@vkontakte/vkui 6.6.0 → 6.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Alert/Alert.js +1 -1
- package/dist/cjs/components/Alert/Alert.js.map +1 -1
- package/dist/cjs/components/AspectRatio/AspectRatio.js +1 -1
- package/dist/cjs/components/AspectRatio/AspectRatio.js.map +1 -1
- package/dist/cjs/components/Badge/Badge.js +1 -1
- package/dist/cjs/components/Badge/Badge.js.map +1 -1
- package/dist/cjs/components/Button/Button.js +1 -1
- package/dist/cjs/components/Button/Button.js.map +1 -1
- package/dist/cjs/components/Calendar/Calendar.d.ts +2 -2
- package/dist/cjs/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/cjs/components/Calendar/Calendar.js +4 -2
- package/dist/cjs/components/Calendar/Calendar.js.map +1 -1
- package/dist/cjs/components/CalendarDay/CalendarDay.d.ts +1 -0
- package/dist/cjs/components/CalendarDay/CalendarDay.d.ts.map +1 -1
- package/dist/cjs/components/CalendarDay/CalendarDay.js +26 -14
- package/dist/cjs/components/CalendarDay/CalendarDay.js.map +1 -1
- package/dist/cjs/components/CalendarDays/CalendarDays.d.ts +3 -3
- package/dist/cjs/components/CalendarDays/CalendarDays.d.ts.map +1 -1
- package/dist/cjs/components/CalendarDays/CalendarDays.js +5 -3
- package/dist/cjs/components/CalendarDays/CalendarDays.js.map +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.d.ts +2 -2
- package/dist/cjs/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.js +5 -2
- package/dist/cjs/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cjs/components/CardGrid/CardGrid.js +1 -1
- package/dist/cjs/components/CardGrid/CardGrid.js.map +1 -1
- package/dist/cjs/components/Clickable/Clickable.d.ts +1 -0
- package/dist/cjs/components/Clickable/Clickable.d.ts.map +1 -1
- package/dist/cjs/components/Clickable/Clickable.js +21 -6
- package/dist/cjs/components/Clickable/Clickable.js.map +1 -1
- package/dist/cjs/components/Clickable/useState.d.ts +39 -3
- package/dist/cjs/components/Clickable/useState.d.ts.map +1 -1
- package/dist/cjs/components/Clickable/useState.js +110 -37
- package/dist/cjs/components/Clickable/useState.js.map +1 -1
- package/dist/cjs/components/Clickable/useStateWithDelay.d.ts +19 -1
- package/dist/cjs/components/Clickable/useStateWithDelay.d.ts.map +1 -1
- package/dist/cjs/components/Clickable/useStateWithDelay.js +20 -4
- package/dist/cjs/components/Clickable/useStateWithDelay.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +3 -2
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.js +7 -7
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js +1 -1
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/cjs/components/DateInput/DateInput.d.ts +2 -2
- package/dist/cjs/components/DateInput/DateInput.d.ts.map +1 -1
- package/dist/cjs/components/DateInput/DateInput.js +5 -3
- package/dist/cjs/components/DateInput/DateInput.js.map +1 -1
- package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts +2 -2
- package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/cjs/components/DateRangeInput/DateRangeInput.js +6 -4
- package/dist/cjs/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/cjs/components/FormField/FormField.js +1 -1
- package/dist/cjs/components/FormField/FormField.js.map +1 -1
- package/dist/cjs/components/FormItem/FormItem.js +1 -1
- package/dist/cjs/components/FormItem/FormItem.js.map +1 -1
- package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js +1 -1
- package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
- package/dist/cjs/components/Input/Input.js +1 -1
- package/dist/cjs/components/Input/Input.js.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRoot.js +4 -14
- package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRootDesktop.d.ts.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRootDesktop.js +9 -1
- package/dist/cjs/components/ModalRoot/ModalRootDesktop.js.map +1 -1
- package/dist/cjs/components/NativeSelect/NativeSelect.js +1 -1
- package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/cjs/components/Panel/Panel.js +2 -2
- package/dist/cjs/components/Panel/Panel.js.map +1 -1
- package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
- package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js +1 -1
- package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cjs/components/RichCell/RichCell.js +1 -1
- package/dist/cjs/components/RichCell/RichCell.js.map +1 -1
- package/dist/cjs/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
- package/dist/cjs/components/ScreenSpinner/ScreenSpinner.js +4 -2
- package/dist/cjs/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
- package/dist/cjs/components/ScreenSpinner/ScreenSpinnerContainer.d.ts +1 -1
- package/dist/cjs/components/ScreenSpinner/ScreenSpinnerContainer.d.ts.map +1 -1
- package/dist/cjs/components/ScreenSpinner/ScreenSpinnerContainer.js +23 -6
- package/dist/cjs/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
- package/dist/cjs/components/ScreenSpinner/ScreenSpinnerLoader.d.ts.map +1 -1
- package/dist/cjs/components/ScreenSpinner/ScreenSpinnerLoader.js +8 -3
- package/dist/cjs/components/ScreenSpinner/ScreenSpinnerLoader.js.map +1 -1
- package/dist/cjs/components/ScreenSpinner/context.d.ts +1 -0
- package/dist/cjs/components/ScreenSpinner/context.d.ts.map +1 -1
- package/dist/cjs/components/ScreenSpinner/context.js +2 -1
- package/dist/cjs/components/ScreenSpinner/context.js.map +1 -1
- package/dist/cjs/components/ScreenSpinner/types.d.ts +5 -0
- package/dist/cjs/components/ScreenSpinner/types.d.ts.map +1 -1
- package/dist/cjs/components/Search/Search.d.ts.map +1 -1
- package/dist/cjs/components/Search/Search.js +16 -11
- package/dist/cjs/components/Search/Search.js.map +1 -1
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js +1 -1
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/cjs/components/Select/Select.d.ts.map +1 -1
- package/dist/cjs/components/Select/Select.js +5 -1
- package/dist/cjs/components/Select/Select.js.map +1 -1
- package/dist/cjs/components/SelectMimicry/SelectMimicry.js +1 -1
- package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/cjs/components/SimpleCell/SimpleCell.js +1 -1
- package/dist/cjs/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/cjs/components/Skeleton/Skeleton.d.ts +1 -1
- package/dist/cjs/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/cjs/components/Skeleton/Skeleton.js +85 -4
- package/dist/cjs/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/cjs/components/Slider/Slider.js +1 -1
- package/dist/cjs/components/Slider/Slider.js.map +1 -1
- package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js +1 -1
- package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
- package/dist/cjs/components/TabsItem/TabsItem.js +1 -1
- package/dist/cjs/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/cjs/components/Textarea/Textarea.js +1 -1
- package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
- package/dist/cjs/components/ToolButton/ToolButton.d.ts +2 -1
- package/dist/cjs/components/ToolButton/ToolButton.d.ts.map +1 -1
- package/dist/cjs/components/ToolButton/ToolButton.js +20 -4
- package/dist/cjs/components/ToolButton/ToolButton.js.map +1 -1
- package/dist/cjs/components/Typography/Caption/Caption.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Caption/Caption.js +7 -1
- package/dist/cjs/components/Typography/Caption/Caption.js.map +1 -1
- package/dist/cjs/components/Typography/DisplayTitle/DisplayTitle.d.ts.map +1 -1
- package/dist/cjs/components/Typography/DisplayTitle/DisplayTitle.js +7 -1
- package/dist/cjs/components/Typography/DisplayTitle/DisplayTitle.js.map +1 -1
- package/dist/cjs/components/Typography/Footnote/Footnote.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Footnote/Footnote.js +7 -1
- package/dist/cjs/components/Typography/Footnote/Footnote.js.map +1 -1
- package/dist/cjs/components/Typography/Headline/Headline.d.ts +1 -1
- package/dist/cjs/components/Typography/Headline/Headline.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Headline/Headline.js +2 -4
- package/dist/cjs/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/cjs/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Paragraph/Paragraph.js +7 -1
- package/dist/cjs/components/Typography/Paragraph/Paragraph.js.map +1 -1
- package/dist/cjs/components/Typography/Subhead/Subhead.js +1 -1
- package/dist/cjs/components/Typography/Subhead/Subhead.js.map +1 -1
- package/dist/cjs/components/Typography/Text/Text.js +1 -1
- package/dist/cjs/components/Typography/Text/Text.js.map +1 -1
- package/dist/cjs/components/Typography/Title/Title.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Title/Title.js +7 -1
- package/dist/cjs/components/Typography/Title/Title.js.map +1 -1
- package/dist/cjs/components/Typography/Typography.d.ts +7 -1
- package/dist/cjs/components/Typography/Typography.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Typography.js +4 -2
- package/dist/cjs/components/Typography/Typography.js.map +1 -1
- package/dist/cjs/components/View/ViewInfinite.js +5 -16
- package/dist/cjs/components/View/ViewInfinite.js.map +1 -1
- package/dist/cjs/components/WriteBar/WriteBar.js +3 -1
- package/dist/cjs/components/WriteBar/WriteBar.js.map +1 -1
- package/dist/cjs/hooks/useAdaptivityConditionalRender/constants.js +4 -4
- package/dist/cjs/hooks/useAdaptivityConditionalRender/constants.js.map +1 -1
- package/dist/cjs/hooks/useWaitTransitionFinish.d.ts +1 -1
- package/dist/cjs/hooks/useWaitTransitionFinish.d.ts.map +1 -1
- package/dist/cjs/hooks/useWaitTransitionFinish.js.map +1 -1
- package/dist/components/Alert/Alert.js +1 -1
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/AspectRatio/AspectRatio.js +1 -1
- package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
- package/dist/components/Badge/Badge.js +1 -1
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Button/Button.js +1 -1
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Calendar/Calendar.d.ts +2 -2
- package/dist/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/components/Calendar/Calendar.js +4 -2
- package/dist/components/Calendar/Calendar.js.map +1 -1
- package/dist/components/CalendarDay/CalendarDay.d.ts +1 -0
- package/dist/components/CalendarDay/CalendarDay.d.ts.map +1 -1
- package/dist/components/CalendarDay/CalendarDay.js +26 -14
- package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
- package/dist/components/CalendarDays/CalendarDays.d.ts +3 -3
- package/dist/components/CalendarDays/CalendarDays.d.ts.map +1 -1
- package/dist/components/CalendarDays/CalendarDays.js +5 -3
- package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts +2 -2
- package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.js +5 -2
- package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/components/CardGrid/CardGrid.js +1 -1
- package/dist/components/CardGrid/CardGrid.js.map +1 -1
- package/dist/components/Clickable/Clickable.d.ts +1 -0
- package/dist/components/Clickable/Clickable.d.ts.map +1 -1
- package/dist/components/Clickable/Clickable.js +21 -7
- package/dist/components/Clickable/Clickable.js.map +1 -1
- package/dist/components/Clickable/useState.d.ts +39 -3
- package/dist/components/Clickable/useState.d.ts.map +1 -1
- package/dist/components/Clickable/useState.js +110 -37
- package/dist/components/Clickable/useState.js.map +1 -1
- package/dist/components/Clickable/useStateWithDelay.d.ts +19 -1
- package/dist/components/Clickable/useStateWithDelay.d.ts.map +1 -1
- package/dist/components/Clickable/useStateWithDelay.js +38 -4
- package/dist/components/Clickable/useStateWithDelay.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +3 -2
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js +7 -7
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/CustomSelectOption/CustomSelectOption.js +1 -1
- package/dist/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/components/DateInput/DateInput.d.ts +2 -2
- package/dist/components/DateInput/DateInput.d.ts.map +1 -1
- package/dist/components/DateInput/DateInput.js +5 -3
- package/dist/components/DateInput/DateInput.js.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.d.ts +2 -2
- package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.js +6 -4
- package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/components/FormField/FormField.js +1 -1
- package/dist/components/FormField/FormField.js.map +1 -1
- package/dist/components/FormItem/FormItem.js +1 -1
- package/dist/components/FormItem/FormItem.js.map +1 -1
- package/dist/components/FormLayoutGroup/FormLayoutGroup.js +1 -1
- package/dist/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
- package/dist/components/Input/Input.js +1 -1
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.js +4 -14
- package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/components/ModalRoot/ModalRootDesktop.d.ts.map +1 -1
- package/dist/components/ModalRoot/ModalRootDesktop.js +9 -1
- package/dist/components/ModalRoot/ModalRootDesktop.js.map +1 -1
- package/dist/components/NativeSelect/NativeSelect.js +1 -1
- package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/components/Panel/Panel.js +2 -2
- package/dist/components/Panel/Panel.js.map +1 -1
- package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js +1 -1
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/components/RichCell/RichCell.js +1 -1
- package/dist/components/RichCell/RichCell.js.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinner.js +4 -2
- package/dist/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinnerContainer.d.ts +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinnerContainer.d.ts.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinnerContainer.js +25 -8
- package/dist/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinnerLoader.d.ts.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinnerLoader.js +8 -3
- package/dist/components/ScreenSpinner/ScreenSpinnerLoader.js.map +1 -1
- package/dist/components/ScreenSpinner/context.d.ts +1 -0
- package/dist/components/ScreenSpinner/context.d.ts.map +1 -1
- package/dist/components/ScreenSpinner/context.js +2 -1
- package/dist/components/ScreenSpinner/context.js.map +1 -1
- package/dist/components/ScreenSpinner/types.d.ts +5 -0
- package/dist/components/ScreenSpinner/types.d.ts.map +1 -1
- package/dist/components/ScreenSpinner/types.js.map +1 -1
- package/dist/components/Search/Search.d.ts.map +1 -1
- package/dist/components/Search/Search.js +17 -12
- package/dist/components/Search/Search.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/Select.js +5 -1
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/SelectMimicry/SelectMimicry.js +1 -1
- package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/components/SimpleCell/SimpleCell.js +1 -1
- package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/Skeleton/Skeleton.js +85 -4
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Slider/Slider.js +1 -1
- package/dist/components/Slider/Slider.js.map +1 -1
- package/dist/components/SubnavigationButton/SubnavigationButton.js +1 -1
- package/dist/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
- package/dist/components/TabsItem/TabsItem.js +1 -1
- package/dist/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/components/Textarea/Textarea.js +1 -1
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/ToolButton/ToolButton.d.ts +2 -1
- package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
- package/dist/components/ToolButton/ToolButton.js +9 -1
- package/dist/components/ToolButton/ToolButton.js.map +1 -1
- package/dist/components/Typography/Caption/Caption.d.ts.map +1 -1
- package/dist/components/Typography/Caption/Caption.js +7 -1
- package/dist/components/Typography/Caption/Caption.js.map +1 -1
- package/dist/components/Typography/DisplayTitle/DisplayTitle.d.ts.map +1 -1
- package/dist/components/Typography/DisplayTitle/DisplayTitle.js +7 -1
- package/dist/components/Typography/DisplayTitle/DisplayTitle.js.map +1 -1
- package/dist/components/Typography/Footnote/Footnote.d.ts.map +1 -1
- package/dist/components/Typography/Footnote/Footnote.js +7 -1
- package/dist/components/Typography/Footnote/Footnote.js.map +1 -1
- package/dist/components/Typography/Headline/Headline.d.ts +1 -1
- package/dist/components/Typography/Headline/Headline.d.ts.map +1 -1
- package/dist/components/Typography/Headline/Headline.js +2 -4
- package/dist/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
- package/dist/components/Typography/Paragraph/Paragraph.js +7 -1
- package/dist/components/Typography/Paragraph/Paragraph.js.map +1 -1
- package/dist/components/Typography/Subhead/Subhead.js +1 -1
- package/dist/components/Typography/Subhead/Subhead.js.map +1 -1
- package/dist/components/Typography/Text/Text.js +1 -1
- package/dist/components/Typography/Text/Text.js.map +1 -1
- package/dist/components/Typography/Title/Title.d.ts.map +1 -1
- package/dist/components/Typography/Title/Title.js +7 -1
- package/dist/components/Typography/Title/Title.js.map +1 -1
- package/dist/components/Typography/Typography.d.ts +7 -1
- package/dist/components/Typography/Typography.d.ts.map +1 -1
- package/dist/components/Typography/Typography.js +4 -2
- package/dist/components/Typography/Typography.js.map +1 -1
- package/dist/components/View/ViewInfinite.js +5 -16
- package/dist/components/View/ViewInfinite.js.map +1 -1
- package/dist/components/WriteBar/WriteBar.js +3 -1
- package/dist/components/WriteBar/WriteBar.js.map +1 -1
- package/dist/components.css +313 -3
- package/dist/components.css.map +1 -1
- package/dist/components.js.tmp +647 -301
- package/dist/cssm/components/Alert/Alert.js +1 -1
- package/dist/cssm/components/Alert/Alert.js.map +1 -1
- package/dist/cssm/components/AspectRatio/AspectRatio.js +1 -1
- package/dist/cssm/components/AspectRatio/AspectRatio.js.map +1 -1
- package/dist/cssm/components/Badge/Badge.js +1 -1
- package/dist/cssm/components/Badge/Badge.js.map +1 -1
- package/dist/cssm/components/Button/Button.js +1 -1
- package/dist/cssm/components/Button/Button.js.map +1 -1
- package/dist/cssm/components/Calendar/Calendar.d.ts +2 -2
- package/dist/cssm/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/cssm/components/Calendar/Calendar.js +3 -2
- package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
- package/dist/cssm/components/CalendarDay/CalendarDay.d.ts +1 -0
- package/dist/cssm/components/CalendarDay/CalendarDay.d.ts.map +1 -1
- package/dist/cssm/components/CalendarDay/CalendarDay.js +24 -13
- package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
- package/dist/cssm/components/CalendarDays/CalendarDays.d.ts +3 -3
- package/dist/cssm/components/CalendarDays/CalendarDays.d.ts.map +1 -1
- package/dist/cssm/components/CalendarDays/CalendarDays.js +2 -1
- package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.d.ts +2 -2
- package/dist/cssm/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js +3 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cssm/components/CardGrid/CardGrid.js +1 -1
- package/dist/cssm/components/CardGrid/CardGrid.js.map +1 -1
- package/dist/cssm/components/Clickable/Clickable.d.ts +1 -0
- package/dist/cssm/components/Clickable/Clickable.d.ts.map +1 -1
- package/dist/cssm/components/Clickable/Clickable.js +16 -6
- package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
- package/dist/cssm/components/Clickable/useState.d.ts +39 -3
- package/dist/cssm/components/Clickable/useState.d.ts.map +1 -1
- package/dist/cssm/components/Clickable/useState.js +104 -36
- package/dist/cssm/components/Clickable/useState.js.map +1 -1
- package/dist/cssm/components/Clickable/useStateWithDelay.d.ts +19 -1
- package/dist/cssm/components/Clickable/useStateWithDelay.d.ts.map +1 -1
- package/dist/cssm/components/Clickable/useStateWithDelay.js +38 -4
- package/dist/cssm/components/Clickable/useStateWithDelay.js.map +1 -1
- package/dist/cssm/components/Counter/Counter.module.css +0 -14
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +3 -2
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js +3 -3
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js +1 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/cssm/components/DateInput/DateInput.d.ts +2 -2
- package/dist/cssm/components/DateInput/DateInput.d.ts.map +1 -1
- package/dist/cssm/components/DateInput/DateInput.js +3 -2
- package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
- package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts +2 -2
- package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -3
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/cssm/components/FormField/FormField.js +1 -1
- package/dist/cssm/components/FormField/FormField.js.map +1 -1
- package/dist/cssm/components/FormItem/FormItem.js +1 -1
- package/dist/cssm/components/FormItem/FormItem.js.map +1 -1
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js +1 -1
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
- package/dist/cssm/components/Input/Input.js +1 -1
- package/dist/cssm/components/Input/Input.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRootDesktop.d.ts.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRootDesktop.js +9 -1
- package/dist/cssm/components/ModalRoot/ModalRootDesktop.js.map +1 -1
- package/dist/cssm/components/NativeSelect/NativeSelect.js +1 -1
- package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/cssm/components/Panel/Panel.js +2 -2
- package/dist/cssm/components/Panel/Panel.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +48 -3
- package/dist/cssm/components/RichCell/RichCell.js +1 -1
- package/dist/cssm/components/RichCell/RichCell.js.map +1 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js +2 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinner.module.css +40 -0
- package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.d.ts +1 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.d.ts.map +1 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.js +20 -7
- package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinnerLoader.d.ts.map +1 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinnerLoader.js +8 -3
- package/dist/cssm/components/ScreenSpinner/ScreenSpinnerLoader.js.map +1 -1
- package/dist/cssm/components/ScreenSpinner/context.d.ts +1 -0
- package/dist/cssm/components/ScreenSpinner/context.d.ts.map +1 -1
- package/dist/cssm/components/ScreenSpinner/context.js +2 -1
- package/dist/cssm/components/ScreenSpinner/context.js.map +1 -1
- package/dist/cssm/components/ScreenSpinner/types.d.ts +5 -0
- package/dist/cssm/components/ScreenSpinner/types.d.ts.map +1 -1
- package/dist/cssm/components/ScreenSpinner/types.js.map +1 -1
- package/dist/cssm/components/Search/Search.d.ts.map +1 -1
- package/dist/cssm/components/Search/Search.js +17 -12
- package/dist/cssm/components/Search/Search.js.map +1 -1
- package/dist/cssm/components/Search/Search.module.css +25 -13
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js +1 -1
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/cssm/components/Select/Select.d.ts.map +1 -1
- package/dist/cssm/components/Select/Select.js +1 -1
- package/dist/cssm/components/Select/Select.js.map +1 -1
- package/dist/cssm/components/SelectMimicry/SelectMimicry.js +1 -1
- package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.js +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/cssm/components/Skeleton/Skeleton.d.ts +1 -1
- package/dist/cssm/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/cssm/components/Skeleton/Skeleton.js +83 -3
- package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/cssm/components/Skeleton/Skeleton.module.css +30 -32
- package/dist/cssm/components/Slider/Slider.js +1 -1
- package/dist/cssm/components/Slider/Slider.js.map +1 -1
- package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js +1 -1
- package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
- package/dist/cssm/components/TabsItem/TabsItem.js +1 -1
- package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/cssm/components/Textarea/Textarea.js +1 -1
- package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
- package/dist/cssm/components/ToolButton/ToolButton.d.ts +2 -1
- package/dist/cssm/components/ToolButton/ToolButton.d.ts.map +1 -1
- package/dist/cssm/components/ToolButton/ToolButton.js +9 -1
- package/dist/cssm/components/ToolButton/ToolButton.js.map +1 -1
- package/dist/cssm/components/ToolButton/ToolButton.module.css +13 -6
- package/dist/cssm/components/Typography/Caption/Caption.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Caption/Caption.js +7 -1
- package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
- package/dist/cssm/components/Typography/Caption/Caption.module.css +240 -0
- package/dist/cssm/components/Typography/DisplayTitle/DisplayTitle.d.ts.map +1 -1
- package/dist/cssm/components/Typography/DisplayTitle/DisplayTitle.js +7 -1
- package/dist/cssm/components/Typography/DisplayTitle/DisplayTitle.js.map +1 -1
- package/dist/cssm/components/Typography/DisplayTitle/DisplayTitle.module.css +160 -0
- package/dist/cssm/components/Typography/Footnote/Footnote.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Footnote/Footnote.js +10 -2
- package/dist/cssm/components/Typography/Footnote/Footnote.js.map +1 -1
- package/dist/cssm/components/Typography/Footnote/Footnote.module.css +80 -0
- package/dist/cssm/components/Typography/Headline/Headline.d.ts +1 -1
- package/dist/cssm/components/Typography/Headline/Headline.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Headline/Headline.js +2 -3
- package/dist/cssm/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/cssm/components/Typography/Headline/Headline.module.css +48 -8
- package/dist/cssm/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Paragraph/Paragraph.js +7 -1
- package/dist/cssm/components/Typography/Paragraph/Paragraph.js.map +1 -1
- package/dist/cssm/components/Typography/Paragraph/Paragraph.module.css +40 -0
- package/dist/cssm/components/Typography/Subhead/Subhead.js +1 -1
- package/dist/cssm/components/Typography/Subhead/Subhead.js.map +1 -1
- package/dist/cssm/components/Typography/Subhead/Subhead.module.css +32 -4
- package/dist/cssm/components/Typography/Text/Text.js +1 -1
- package/dist/cssm/components/Typography/Text/Text.js.map +1 -1
- package/dist/cssm/components/Typography/Text/Text.module.css +29 -4
- package/dist/cssm/components/Typography/Title/Title.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Title/Title.js +7 -1
- package/dist/cssm/components/Typography/Title/Title.js.map +1 -1
- package/dist/cssm/components/Typography/Title/Title.module.css +120 -0
- package/dist/cssm/components/Typography/Typography.d.ts +7 -1
- package/dist/cssm/components/Typography/Typography.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Typography.js +3 -2
- package/dist/cssm/components/Typography/Typography.js.map +1 -1
- package/dist/cssm/components/Typography/Typography.module.css +21 -3
- package/dist/cssm/components/WriteBar/WriteBar.js +1 -0
- package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
- package/dist/cssm/hooks/useAdaptivityConditionalRender/constants.js +4 -4
- package/dist/cssm/hooks/useAdaptivityConditionalRender/constants.js.map +1 -1
- package/dist/cssm/hooks/useWaitTransitionFinish.d.ts +1 -1
- package/dist/cssm/hooks/useWaitTransitionFinish.d.ts.map +1 -1
- package/dist/cssm/hooks/useWaitTransitionFinish.js.map +1 -1
- package/dist/cssm/styles/missedThemeTokens.css +22 -0
- package/dist/hooks/useAdaptivityConditionalRender/constants.js +4 -4
- package/dist/hooks/useAdaptivityConditionalRender/constants.js.map +1 -1
- package/dist/hooks/useWaitTransitionFinish.d.ts +1 -1
- package/dist/hooks/useWaitTransitionFinish.d.ts.map +1 -1
- package/dist/hooks/useWaitTransitionFinish.js.map +1 -1
- package/dist/vkui.css +313 -3
- package/dist/vkui.css.map +1 -1
- package/dist/vkui.js.tmp +647 -301
- package/package.json +3 -2
- package/src/components/Alert/Alert.tsx +1 -1
- package/src/components/AspectRatio/AspectRatio.tsx +1 -1
- package/src/components/Badge/Badge.tsx +1 -1
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/Calendar/Calendar.tsx +3 -1
- package/src/components/CalendarDay/CalendarDay.tsx +16 -4
- package/src/components/CalendarDays/CalendarDays.tsx +9 -2
- package/src/components/CalendarRange/CalendarRange.tsx +4 -1
- package/src/components/CardGrid/CardGrid.tsx +1 -1
- package/src/components/Clickable/Clickable.tsx +21 -3
- package/src/components/Clickable/useState.tsx +195 -42
- package/src/components/Clickable/useStateWithDelay.tsx +40 -3
- package/src/components/Counter/Counter.module.css +0 -12
- package/src/components/CustomSelect/CustomSelect.tsx +11 -10
- package/src/components/CustomSelectOption/CustomSelectOption.tsx +1 -1
- package/src/components/DateInput/DateInput.tsx +4 -1
- package/src/components/DateRangeInput/DateRangeInput.tsx +4 -1
- package/src/components/FormField/FormField.tsx +1 -1
- package/src/components/FormItem/FormItem.tsx +1 -1
- package/src/components/FormLayoutGroup/FormLayoutGroup.tsx +1 -1
- package/src/components/Input/Input.tsx +1 -1
- package/src/components/ModalRoot/ModalRootDesktop.tsx +13 -1
- package/src/components/NativeSelect/NativeSelect.tsx +1 -1
- package/src/components/Panel/Panel.tsx +2 -2
- package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +44 -3
- package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +1 -1
- package/src/components/RichCell/RichCell.tsx +1 -1
- package/src/components/ScreenSpinner/ScreenSpinner.module.css +35 -0
- package/src/components/ScreenSpinner/ScreenSpinner.tsx +2 -1
- package/src/components/ScreenSpinner/ScreenSpinnerContainer.tsx +15 -4
- package/src/components/ScreenSpinner/ScreenSpinnerLoader.tsx +16 -3
- package/src/components/ScreenSpinner/context.ts +2 -0
- package/src/components/ScreenSpinner/types.tsx +5 -0
- package/src/components/Search/Search.module.css +24 -13
- package/src/components/Search/Search.tsx +19 -14
- package/src/components/SegmentedControl/SegmentedControl.tsx +1 -1
- package/src/components/Select/Select.tsx +4 -0
- package/src/components/SelectMimicry/SelectMimicry.tsx +1 -1
- package/src/components/SimpleCell/SimpleCell.tsx +1 -1
- package/src/components/Skeleton/Skeleton.module.css +30 -32
- package/src/components/Skeleton/Skeleton.tsx +90 -2
- package/src/components/Slider/Slider.tsx +1 -1
- package/src/components/SubnavigationButton/SubnavigationButton.tsx +1 -1
- package/src/components/TabsItem/TabsItem.tsx +1 -1
- package/src/components/Textarea/Textarea.tsx +1 -1
- package/src/components/ToolButton/ToolButton.module.css +12 -6
- package/src/components/ToolButton/ToolButton.tsx +15 -2
- package/src/components/Typography/Caption/Caption.module.css +240 -0
- package/src/components/Typography/Caption/Caption.tsx +14 -1
- package/src/components/Typography/DisplayTitle/DisplayTitle.module.css +160 -0
- package/src/components/Typography/DisplayTitle/DisplayTitle.tsx +13 -1
- package/src/components/Typography/Footnote/Footnote.module.css +80 -0
- package/src/components/Typography/Footnote/Footnote.tsx +24 -9
- package/src/components/Typography/Headline/Headline.module.css +48 -8
- package/src/components/Typography/Headline/Headline.tsx +1 -3
- package/src/components/Typography/Paragraph/Paragraph.module.css +40 -0
- package/src/components/Typography/Paragraph/Paragraph.tsx +13 -1
- package/src/components/Typography/Subhead/Subhead.module.css +32 -4
- package/src/components/Typography/Subhead/Subhead.tsx +1 -1
- package/src/components/Typography/Text/Text.module.css +29 -4
- package/src/components/Typography/Text/Text.tsx +1 -1
- package/src/components/Typography/Title/Title.module.css +120 -0
- package/src/components/Typography/Title/Title.tsx +13 -1
- package/src/components/Typography/Typography.module.css +20 -3
- package/src/components/Typography/Typography.tsx +10 -0
- package/src/components/WriteBar/WriteBar.tsx +1 -1
- package/src/hooks/useAdaptivityConditionalRender/constants.ts +4 -4
- package/src/hooks/useWaitTransitionFinish.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { type DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { type CustomTouchEvent, Touch } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { ModalRootContext, type ModalRootContextInterface } from './ModalRootContext';\nimport { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';\nimport type { ModalRootWithDOMProps, ModalsStateEntry, TranslateRange } from './types';\nimport { type ModalTransitionProps, withModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nfunction numberInRange(number: number, range: TranslateRange | undefined) {\n if (!range) {\n return false;\n }\n return number >= range[0] && number <= range[1];\n}\n\nfunction rangeTranslate(number: number) {\n return clamp(number, 0, 98);\n}\n\ninterface ModalRootState {\n touchDown?: boolean;\n dragging?: boolean;\n modalOpenedLog: string[];\n}\n\nclass ModalRootTouchComponent extends React.Component<\n ModalRootWithDOMProps & DOMProps & ModalTransitionProps,\n ModalRootState\n> {\n constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {\n super(props);\n this.state = {\n touchDown: false,\n dragging: false,\n modalOpenedLog: [],\n };\n\n this.maskElementRef = React.createRef();\n\n this.modalRootContext = {\n updateModalHeight: this.updateModalHeight,\n registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),\n onClose: () => this.props.onExit(),\n isInsideModal: true,\n };\n\n this.frameIds = {};\n }\n\n private readonly maskElementRef: React.RefObject<HTMLDivElement>;\n private readonly viewportRef = React.createRef<HTMLDivElement>();\n private maskAnimationFrame: number | undefined = undefined;\n private readonly modalRootContext: ModalRootContextInterface;\n private readonly frameIds: {\n [index: string]: number;\n };\n private restoreFocusTo: HTMLElement | undefined | null = undefined;\n\n get timeout(): number {\n return this.props.platform === 'ios' ? 400 : 320;\n }\n\n get document(): Document {\n return this.props.document as Document;\n }\n\n get window(): Window {\n return this.props.window as Window;\n }\n\n getModals() {\n return React.Children.toArray(this.props.children) as React.ReactElement[];\n }\n\n componentDidMount() {\n // Отслеживаем изменение размеров viewport\n this.window?.addEventListener('resize', this.updateModalHeight, false);\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalHeight, false);\n }\n\n componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {\n // transition phase 2: animate exiting modal\n if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {\n this.closeModal(this.props.exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {\n const enteringState = this.props.getModalState(this.props.enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState) {\n if (enteringState.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.onEntered(enteringState);\n }\n });\n\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = this.props.delayEnter\n ? `${this.timeout}ms`\n : '';\n this.animateTranslate(enteringState, enteringState.translateY);\n this.setMaskOpacity(enteringState, 1);\n }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (enabled) {\n // восстанавливаем значение overscroll behavior\n // eslint-disable-next-line no-restricted-properties\n this.document.documentElement.classList.remove('vkui--disable-overscroll-behavior');\n } else {\n // отключаем нативный pull-to-refresh при открытом модальном окне\n // чтобы он не срабатывал при закрытии модалки смахиванием вниз\n // eslint-disable-next-line no-restricted-properties\n this.document.documentElement.classList.add('vkui--disable-overscroll-behavior');\n }\n }\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === 'page' && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === 'page') {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n onEntered({ id, modalElement }: ModalsStateEntry) {\n if (\n !this.props.noFocusToDialog &&\n modalElement &&\n !modalElement.contains(this.document.activeElement)\n ) {\n modalElement.focus();\n }\n\n this.props.onEntered(id);\n }\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n if (!this.state.modalOpenedLog.length) {\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, id],\n }));\n }\n const nextModalState = this.props.getModalState(this.props.activeModal);\n const nextIsPage = !!nextModalState && nextModalState.type === 'page';\n\n const prevIsPage = !!prevModalState && prevModalState.type === 'page';\n this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));\n const exitTranslate =\n prevIsPage &&\n nextIsPage &&\n (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&\n !this.props.isBack\n ? (nextModalState?.translateYFrom ?? 0) + 10\n : 100;\n this.animateTranslate(prevModalState, exitTranslate);\n\n if (!nextModalState) {\n // NOTE: was only for clean exit\n this.setMaskOpacity(prevModalState, 0);\n this.setState({ modalOpenedLog: [] });\n prevModalState.translateY = undefined;\n prevModalState.expandable = undefined;\n } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {\n nextModalState.translateY = undefined;\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, nextModalState.id!],\n }));\n }\n }\n\n onTouchMove = (e: CustomTouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === 'page') {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === 'card') {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: CustomTouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== 'ios');\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: CustomTouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== 'ios');\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: CustomTouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === 'page') {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === 'card') {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: CustomTouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = modalState.preventClose ? modalState.translateYFrom ?? 0 : 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = modalState.preventClose ? modalState.translateYFrom ?? 0 : 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75 && !modalState.preventClose) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = numberInRange(translateY, modalState.collapsedRange);\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: CustomTouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === 'page' && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n const el = modalState ? modalState.innerElement : null;\n if (el) {\n el.addEventListener('transitionend', eventHandler, { once: true });\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n if (!modalState.innerElement) {\n return;\n }\n modalState.innerElement.style.transform = `translate3d(0, ${percent}%, 0)`;\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n this.maskElementRef.current.style.transitionDelay =\n opacity && this.props.delayEnter ? `${this.timeout}ms` : '';\n }\n });\n }\n\n render() {\n const { activeModal, exitingModal, enteringModal, modalOverlayTestId } = this.props;\n const { touchDown, dragging } = this.state;\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <ModalRootContext.Provider value={this.modalRootContext}>\n <Touch\n className={classNames(\n styles['ModalRoot'],\n this.props.configProvider?.hasCustomPanelHeaderAfter &&\n styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n touchDown &&\n classNames(styles['ModalRoot--touched'], 'vkuiInternalModalRoot--touched'),\n !!(enteringModal || exitingModal) &&\n classNames(styles['ModalRoot--switching'], 'vkuiInternalModalRoot--switching'),\n )}\n onMove={this.onTouchMove}\n onEnd={this.onTouchEnd}\n onScroll={this.onScroll}\n >\n <div\n data-testid={modalOverlayTestId}\n className={styles['ModalRoot__mask']}\n onClick={this.props.onExit}\n ref={this.maskElementRef}\n />\n <div className={styles['ModalRoot__viewport']} ref={this.viewportRef}>\n {this.getModals().map((Modal) => {\n const modalId = getNavId(Modal.props, warn);\n const _modalState = this.props.getModalState(modalId);\n if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {\n return null;\n }\n const modalState = { ..._modalState };\n\n const isPage = modalState.type === 'page';\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n key={key}\n onClose={this.props.onExit}\n timeout={this.timeout}\n className={classNames(\n styles['ModalRoot__modal'],\n\n dragging && 'vkuiInternalModalRoot__modal--dragging',\n\n isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',\n isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',\n )}\n autoFocus={false}\n restoreFocus={false}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </Touch>\n </ModalRootContext.Provider>\n </TouchRootContext.Provider>\n );\n }\n}\n\nexport const ModalRootTouch: React.FC<ModalRootWithDOMProps> = withContext(\n withPlatform(\n withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),\n ),\n ConfigProviderContext,\n 'configProvider',\n);\n\n/**\n * Инициализирует модалку перед анимацией открытия\n */\nfunction initModal(modalState: ModalsStateEntry) {\n switch (modalState.type) {\n case 'page':\n modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;\n return initPageModal(modalState);\n case 'card':\n return initCardModal(modalState);\n default:\n process.env.NODE_ENV === 'development' &&\n warn(`initActiveModal: modalState.type=\"${modalState.type}\" не поддерживается`, 'error');\n }\n}\n\nfunction initPageModal(modalState: ModalsStateEntry) {\n const { contentElement, bottomInset } = modalState;\n const contentElementHeight = calculateModalContentHeight(\n contentElement?.firstElementChild as HTMLElement,\n modalState.expandable,\n );\n const bottomInsetHeight = bottomInset?.offsetHeight || 0;\n const contentHeight = contentElementHeight + bottomInsetHeight;\n let prevTranslateY = modalState.translateY;\n let prevExpandable = modalState.expandable;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) || modalState.settlingHeight === 100;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange | undefined;\n let hiddenRange: TranslateRange;\n\n const hasCollapsedState = Boolean(modalState.expandable && modalState.settlingHeight !== 100);\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = hasCollapsedState ? [shiftHalf, translateYFrom + visiblePart / 4] : undefined;\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = hasCollapsedState && translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = undefined;\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Свойство expandable может измениться из-за высоты контента, в таком случае на всю высоту не разворачиваем\n const shouldExpand = prevExpandable && modalState.expandable;\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if ((shouldExpand && translateY > (prevTranslateY ?? 100)) || modalState.settlingHeight === 100) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n\nfunction calculateModalContentHeight(\n element: HTMLElement,\n isExpandable: ModalsStateEntry['expandable'],\n) {\n if (!isExpandable) {\n return element.scrollHeight;\n }\n\n /*\n * В режиме expandable мы назначаем контейнеру контента высоту 100%, что не даёт\n * получить реальную высоту контента.\n * Поэтому мы пересчитываем высоту, временно устанавливая height: auto;\n * */\n const currentHeightStyle = element.style.height;\n element.style.height = 'auto';\n\n const elementHeight = element.scrollHeight;\n element.style.height = currentHeightStyle;\n\n return elementHeight;\n}\n"],"names":["ModalRootTouch","warn","warnOnce","numberInRange","number","range","rangeTranslate","clamp","ModalRootTouchComponent","React","Component","timeout","props","platform","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","updateModalHeight","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","exitingModal","closeModal","enteringModal","enteringState","getModalState","onEnter","waitTransitionFinish","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","setMaskOpacity","activeModal","restoreFocusTo","activeElement","focus","enabled","documentElement","classList","remove","add","checkPageContentHeight","modalState","type","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","id","noFocusToDialog","contains","setState","touchDown","state","modalOpenedLog","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","undefined","includes","onPageTouchMove","event","shiftY","originalEvent","target","isY","viewportRef","current","preventDefault","stopPropagation","contentScrolled","collapsed","expanded","touchStartContentScrollTop","contentElement","scrollTop","touchMovePositive","headerElement","dragging","shiftYPercent","innerHeight","shiftYCurrent","rubber","touchShiftYPercent","translateYCurrent","onCardTouchMove","offsetHeight","Math","max","onPageTouchEnd","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","preventClose","hidden","onExit","onCardTouchEnd","eventHandler","el","once","setTimeout","percent","frameId","cancelAnimationFrame","frameIds","requestAnimationFrame","transform","forceOpacity","history","maskAnimationFrame","maskElementRef","opacity","toString","render","modalOverlayTestId","TouchRootContext","Provider","value","ModalRootContext","modalRootContext","Touch","className","classNames","configProvider","hasCustomPanelHeaderAfter","onMove","onTouchMove","onEnd","onTouchEnd","onScroll","div","data-testid","onClick","ref","map","Modal","modalId","getNavId","_modalState","isPage","key","FocusTrap","onClose","autoFocus","restoreFocus","constructor","createRef","e","contentScrollStopTimeout","clearTimeout","registerModal","data","Object","assign","isInsideModal","withContext","withPlatform","withDOM","withModalManager","initModal","ConfigProviderContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","initCardModal","process","env","NODE_ENV","bottomInset","contentElementHeight","calculateModalContentHeight","firstElementChild","bottomInsetHeight","contentHeight","prevTranslateY","prevExpandable","clientHeight","hasCollapsedState","Boolean","shiftHalf","visiblePart","headerHeight","height","parentElement","shouldExpand","element","isExpandable","scrollHeight","currentHeightStyle","elementHeight"],"mappings":";;;;+BA8lBaA;;;eAAAA;;;;;;;;;iEA9lBU;sBACI;sBACL;6BACM;8BACC;qBACU;0BACd;uBACF;0BACE;uCACa;2BACZ;uBACmB;uEAChB;kCACoC;2BACf;iCAEU;AAG5D,MAAMC,OAAOC,IAAAA,kBAAQ,EAAC;AAEtB,SAASC,cAAcC,MAAc,EAAEC,KAAiC;IACtE,IAAI,CAACA,OAAO;QACV,OAAO;IACT;IACA,OAAOD,UAAUC,KAAK,CAAC,EAAE,IAAID,UAAUC,KAAK,CAAC,EAAE;AACjD;AAEA,SAASC,eAAeF,MAAc;IACpC,OAAOG,IAAAA,WAAK,EAACH,QAAQ,GAAG;AAC1B;AAQA,MAAMI,gCAAgCC,OAAMC,SAAS;IAiCnD,IAAIC,UAAkB;QACpB,OAAO,IAAI,CAACC,KAAK,CAACC,QAAQ,KAAK,QAAQ,MAAM;IAC/C;IAEA,IAAIC,WAAqB;QACvB,OAAO,IAAI,CAACF,KAAK,CAACE,QAAQ;IAC5B;IAEA,IAAIC,SAAiB;QACnB,OAAO,IAAI,CAACH,KAAK,CAACG,MAAM;IAC1B;IAEAC,YAAY;QACV,OAAOP,OAAMQ,QAAQ,CAACC,OAAO,CAAC,IAAI,CAACN,KAAK,CAACO,QAAQ;IACnD;IAEAC,oBAAoB;YAClB,0CAA0C;QAC1C;SAAA,eAAA,IAAI,CAACL,MAAM,cAAX,mCAAA,aAAaM,gBAAgB,CAAC,UAAU,IAAI,CAACC,iBAAiB,EAAE;IAClE;IAEAC,uBAAuB;QACrB,IAAI,CAACC,uBAAuB,CAAC;QAC7B,IAAI,CAACT,MAAM,CAACU,mBAAmB,CAAC,UAAU,IAAI,CAACH,iBAAiB,EAAE;IACpE;IAEAI,mBAAmBC,SAAuD,EAAE;QAC1E,4CAA4C;QAC5C,IAAI,IAAI,CAACf,KAAK,CAACgB,YAAY,IAAI,IAAI,CAAChB,KAAK,CAACgB,YAAY,KAAKD,UAAUC,YAAY,EAAE;YACjF,IAAI,CAACC,UAAU,CAAC,IAAI,CAACjB,KAAK,CAACgB,YAAY;QACzC;QAEA,6CAA6C;QAC7C,IAAI,IAAI,CAAChB,KAAK,CAACkB,aAAa,IAAI,IAAI,CAAClB,KAAK,CAACkB,aAAa,KAAKH,UAAUG,aAAa,EAAE;YACpF,MAAMC,gBAAgB,IAAI,CAACnB,KAAK,CAACoB,aAAa,CAAC,IAAI,CAACpB,KAAK,CAACkB,aAAa;YACvE,IAAI,CAAClB,KAAK,CAACqB,OAAO;YAClB,IAAI,CAACC,oBAAoB,CAACH,eAAe;gBACvC,IAAIA,eAAe;oBACjB,IAAIA,cAAcI,YAAY,EAAE;wBAC9BJ,cAAcI,YAAY,CAACC,KAAK,CAACC,eAAe,GAAG;oBACrD;oBACA,IAAI,CAACC,SAAS,CAACP;gBACjB;YACF;YAEA,IAAIA,0BAAAA,oCAAAA,cAAeI,YAAY,EAAE;gBAC/BJ,cAAcI,YAAY,CAACC,KAAK,CAACC,eAAe,GAAG,IAAI,CAACzB,KAAK,CAAC2B,UAAU,GACpE,CAAC,EAAE,IAAI,CAAC5B,OAAO,CAAC,EAAE,CAAC,GACnB;gBACJ,IAAI,CAAC6B,gBAAgB,CAACT,eAAeA,cAAcU,UAAU;gBAC7D,IAAI,CAACC,cAAc,CAACX,eAAe;YACrC;QACF;QAEA,oBAAoB;QACpB,IAAI,IAAI,CAACnB,KAAK,CAAC+B,WAAW,IAAI,CAAChB,UAAUgB,WAAW,EAAE;YACpD,IAAI,CAACC,cAAc,GAAG,IAAI,CAAC9B,QAAQ,CAAC+B,aAAa;QACnD;QACA,IAAI,CAAC,IAAI,CAACjC,KAAK,CAAC+B,WAAW,IAAI,CAAC,IAAI,CAAC/B,KAAK,CAACgB,YAAY,IAAI,IAAI,CAACgB,cAAc,EAAE;YAC9E,IAAI,CAACA,cAAc,CAACE,KAAK;YACzB,IAAI,CAACF,cAAc,GAAG;QACxB;QAEA,IAAI,CAACpB,uBAAuB,CAAC,CAAC,IAAI,CAACZ,KAAK,CAAC+B,WAAW,IAAI,CAAC,IAAI,CAAC/B,KAAK,CAACgB,YAAY;IAClF;IAEA,8BAA8B,GAC9BJ,wBAAwBuB,OAAgB,EAAE;QACxC,IAAIA,SAAS;YACX,+CAA+C;YAC/C,oDAAoD;YACpD,IAAI,CAACjC,QAAQ,CAACkC,eAAe,CAACC,SAAS,CAACC,MAAM,CAAC;QACjD,OAAO;YACL,iEAAiE;YACjE,+DAA+D;YAC/D,oDAAoD;YACpD,IAAI,CAACpC,QAAQ,CAACkC,eAAe,CAACC,SAAS,CAACE,GAAG,CAAC;QAC9C;IACF;IAEAC,yBAAyB;QACvB,MAAMC,aAAa,IAAI,CAACzC,KAAK,CAACoB,aAAa,CAAC,IAAI,CAACpB,KAAK,CAAC+B,WAAW;QAElE,IAAIU,CAAAA,uBAAAA,iCAAAA,WAAYC,IAAI,MAAK,WAAUD,uBAAAA,iCAAAA,WAAYE,YAAY,GAAE;YAC3D,MAAMC,iBAAiB,qBAAKH;YAC5BI,cAAcJ;YACd,MAAMK,oBAAoB,qBAAKL;YAE/B,IAAIM,cAAc;YAElB,IAAIH,eAAeI,UAAU,KAAKF,kBAAkBE,UAAU,EAAE;gBAC9D,IAAIJ,eAAeK,cAAc,KAAKH,kBAAkBG,cAAc,EAAE;oBACtEF,cAAc;gBAChB;YACF,OAAO;gBACLA,cAAc;YAChB;YAEA,IAAIA,aAAa;gBACf,IAAI,CAACnB,gBAAgB,CAACa,YAAYA,WAAWZ,UAAU;YACzD;QACF;IACF;IAgBAH,UAAU,EAAEwB,EAAE,EAAEP,YAAY,EAAoB,EAAE;QAChD,IACE,CAAC,IAAI,CAAC3C,KAAK,CAACmD,eAAe,IAC3BR,gBACA,CAACA,aAAaS,QAAQ,CAAC,IAAI,CAAClD,QAAQ,CAAC+B,aAAa,GAClD;YACAU,aAAaT,KAAK;QACpB;QAEA,IAAI,CAAClC,KAAK,CAAC0B,SAAS,CAACwB;IACvB;IAEAjC,WAAWiC,EAAU,EAAE;QACrB,wEAAwE;QACxE,IAAI,CAACG,QAAQ,CAAC;YAAEC,WAAW;QAAM;QAEjC,MAAMV,iBAAiB,IAAI,CAAC5C,KAAK,CAACoB,aAAa,CAAC8B;QAEhD,IAAI,CAACN,gBAAgB;YACnBM,MAAM7D,KAAK,CAAC,4CAA4C,EAAE6D,GAAG,cAAc,CAAC,EAAE;YAC9E;QACF;QACA,IAAI,CAAC,IAAI,CAACK,KAAK,CAACC,cAAc,CAACC,MAAM,EAAE;YACrC,IAAI,CAACJ,QAAQ,CAAC,CAACK,YAAe,CAAA;oBAC5BF,gBAAgB;2BAAIE,UAAUF,cAAc;wBAAEN;qBAAG;gBACnD,CAAA;QACF;QACA,MAAMS,iBAAiB,IAAI,CAAC3D,KAAK,CAACoB,aAAa,CAAC,IAAI,CAACpB,KAAK,CAAC+B,WAAW;QACtE,MAAM6B,aAAa,CAAC,CAACD,kBAAkBA,eAAejB,IAAI,KAAK;QAE/D,MAAMmB,aAAa,CAAC,CAACjB,kBAAkBA,eAAeF,IAAI,KAAK;QAC/D,IAAI,CAACpB,oBAAoB,CAACsB,gBAAgB,IAAM,IAAI,CAAC5C,KAAK,CAAC8D,QAAQ,CAACZ;YAIjEN,4BAAoCe,gCAEhCA;QALP,MAAMI,gBACJF,cACAD,cACA,AAAChB,CAAAA,CAAAA,6BAAAA,eAAef,UAAU,cAAzBe,wCAAAA,6BAA6B,CAAA,KAAOe,CAAAA,CAAAA,iCAAAA,2BAAAA,qCAAAA,eAAgBV,cAAc,cAA9BU,4CAAAA,iCAAkC,CAAA,KACvE,CAAC,IAAI,CAAC3D,KAAK,CAACgE,MAAM,GACd,AAACL,CAAAA,CAAAA,kCAAAA,2BAAAA,qCAAAA,eAAgBV,cAAc,cAA9BU,6CAAAA,kCAAkC,CAAA,IAAK,KACxC;QACN,IAAI,CAAC/B,gBAAgB,CAACgB,gBAAgBmB;QAEtC,IAAI,CAACJ,gBAAgB;YACnB,gCAAgC;YAChC,IAAI,CAAC7B,cAAc,CAACc,gBAAgB;YACpC,IAAI,CAACS,QAAQ,CAAC;gBAAEG,gBAAgB,EAAE;YAAC;YACnCZ,eAAef,UAAU,GAAGoC;YAC5BrB,eAAeI,UAAU,GAAGiB;QAC9B,OAAO,IAAIN,eAAeT,EAAE,IAAI,CAAC,IAAI,CAACK,KAAK,CAACC,cAAc,CAACU,QAAQ,CAACP,eAAeT,EAAE,GAAG;YACtFS,eAAe9B,UAAU,GAAGoC;YAC5B,IAAI,CAACZ,QAAQ,CAAC,CAACK,YAAe,CAAA;oBAC5BF,gBAAgB;2BAAIE,UAAUF,cAAc;wBAAEG,eAAeT,EAAE;qBAAE;gBACnE,CAAA;QACF;IACF;IAoBAiB,gBAAgBC,KAAuB,EAAE3B,UAA4B,EAAE;YAWhEA,0BAyBHA;QAnCF,MAAM,EAAE4B,MAAM,EAAEC,aAAa,EAAE,GAAGF;QAClC,MAAMG,SAASD,cAAcC,MAAM;QAEnC,IAAI,CAACH,MAAMI,GAAG,EAAE;gBACV;YAAJ,KAAI,4BAAA,IAAI,CAACC,WAAW,CAACC,OAAO,cAAxB,gDAAA,0BAA0BtB,QAAQ,CAACmB,SAAS;gBAC9CD,cAAcK,cAAc;YAC9B;YACA;QACF;QAEA,IAAI,GAAClC,2BAAAA,WAAWlB,YAAY,cAAvBkB,+CAAAA,yBAAyBW,QAAQ,CAACmB,UAAS;YAC9C,OAAOD,cAAcK,cAAc;QACrC;QAEAL,cAAcM,eAAe;QAE7B,MAAM,EAAE5B,UAAU,EAAE6B,eAAe,EAAEC,SAAS,EAAEC,QAAQ,EAAE,GAAGtC;QAE7D,IAAI,CAAC,IAAI,CAACc,KAAK,CAACD,SAAS,EAAE;gBACeb;gBAAAA;YAAxCA,WAAWuC,0BAA0B,GAAGvC,CAAAA,wCAAAA,6BAAAA,WAAWwC,cAAc,cAAzBxC,iDAAAA,2BAA2ByC,SAAS,cAApCzC,kDAAAA,uCAAwC;YAChF,IAAI,CAACY,QAAQ,CAAC;gBAAEC,WAAW;YAAK;QAClC;QAEA,IAAIuB,iBAAiB;YACnB;QACF;QAEA,IAAIpC,WAAW0C,iBAAiB,KAAK,MAAM;YACzC1C,WAAW0C,iBAAiB,GAAGd,SAAS;QAC1C;QAEA,IACE,CAAC5B,WAAWO,UAAU,IACtB8B,aACCC,YAAYtC,WAAW0C,iBAAiB,IAAI1C,WAAWuC,0BAA0B,KAAK,OACvFvC,4BAAAA,WAAW2C,aAAa,cAAxB3C,gDAAAA,0BAA0BW,QAAQ,CAACmB,UACnC;YACAD,cAAcK,cAAc;YAE5B,IAAI,AAAC,CAAC3B,cAAcqB,SAAS,KAAM,CAAC,IAAI,CAAClE,MAAM,EAAE;gBAC/C;YACF;YAEA,CAAC,IAAI,CAACoD,KAAK,CAAC8B,QAAQ,IAAI,IAAI,CAAChC,QAAQ,CAAC;gBAAEgC,UAAU;YAAK;YAEvD,MAAMC,gBAAgB,AAACjB,SAAS,IAAI,CAAClE,MAAM,CAACoF,WAAW,GAAI;YAC3D,MAAMC,gBAAgBC,IAAAA,aAAM,EAACH,eAAe,IAAI,KAAK,IAAI,CAACtF,KAAK,CAACC,QAAQ,KAAK;YAE7EwC,WAAWiD,kBAAkB,GAAGJ;gBACe7C;YAA/CA,WAAWkD,iBAAiB,GAAGjG,eAAe,AAAC+C,CAAAA,CAAAA,yBAAAA,WAAWZ,UAAU,cAArBY,oCAAAA,yBAAyB,CAAA,IAAK+C;YAE7E,IAAI,CAAC5D,gBAAgB,CAACa,YAAYA,WAAWkD,iBAAiB;YAC9D,IAAI,CAAC7D,cAAc,CAACW;QACtB;IACF;IAEAmD,gBAAgBxB,KAAuB,EAAE3B,UAA4B,EAAE;YAGjEA;QAFJ,MAAM,EAAE6B,aAAa,EAAED,MAAM,EAAE,GAAGD;QAClC,MAAMG,SAASD,cAAcC,MAAM;QACnC,KAAI9B,2BAAAA,WAAWlB,YAAY,cAAvBkB,+CAAAA,yBAAyBW,QAAQ,CAACmB,SAAS;YAC7C,IAAI,CAAC,IAAI,CAAChB,KAAK,CAACD,SAAS,EAAE;gBACzB,IAAI,CAACD,QAAQ,CAAC;oBAAEC,WAAW;oBAAM+B,UAAU;gBAAK;YAClD;YAEA,MAAMC,gBAAgB,AAACjB,SAAS5B,WAAWlB,YAAY,CAACsE,YAAY,GAAI;YACxE,MAAML,gBAAgBC,IAAAA,aAAM,EAACH,eAAe,IAAI,KAAK,IAAI,CAACtF,KAAK,CAACC,QAAQ,KAAK;YAE7EwC,WAAWiD,kBAAkB,GAAGJ;gBACY7C;YAA5CA,WAAWkD,iBAAiB,GAAGG,KAAKC,GAAG,CAAC,GAAG,AAACtD,CAAAA,CAAAA,yBAAAA,WAAWZ,UAAU,cAArBY,oCAAAA,yBAAyB,CAAA,IAAK+C;YAE1E,IAAI,CAAC5D,gBAAgB,CAACa,YAAYA,WAAWkD,iBAAiB;YAC9D,IAAI,CAAC7D,cAAc,CAACW;QACtB;IACF;IAcAuD,eAAe5B,KAAuB,EAAE3B,UAA4B,EAAE;QACpE,MAAM,EAAEwD,MAAM,EAAE5B,MAAM,EAAE,GAAGD;QAE3B3B,WAAWoC,eAAe,GAAG;QAC7BpC,WAAW0C,iBAAiB,GAAG;QAE/B,IAAIe;QAEJ,IAAI,IAAI,CAAC3C,KAAK,CAAC8B,QAAQ,IAAI,IAAI,CAAClF,MAAM,EAAE;YACtC,MAAMgG,mBAAmB,AAAEF,CAAAA,SAAS5B,MAAK,IAAK,IAAI,CAAClE,MAAM,CAACoF,WAAW,GAAI;gBAExD9C;YAAjB,IAAIZ,aAAaY,CAAAA,gCAAAA,WAAWkD,iBAAiB,cAA5BlD,2CAAAA,gCAAgC;gBAK7CA;YAJJ,MAAM2D,mBACJ,AAACvE,aAAauC,MAAMiC,QAAQ,GAC5B,MACA,MACC,CAAA,AAAC5D,CAAAA,CAAAA,iCAAAA,WAAWiD,kBAAkB,cAA7BjD,4CAAAA,iCAAiC,CAAA,IAAK,IAAI,CAAC,IAAI,CAAA;YACnDZ,aAAanC,eAAemC,aAAauE;YAEzC,IAAI3D,WAAW6D,cAAc,KAAK,KAAK;gBACrC,IAAI/G,cAAcsC,YAAYY,WAAW8D,aAAa,GAAG;wBAC1C9D;wBAAAA;oBAAbZ,aAAaY,CAAAA,8BAAAA,4BAAAA,WAAW8D,aAAa,cAAxB9D,gDAAAA,yBAA0B,CAAC,EAAE,cAA7BA,wCAAAA,6BAAiC;gBAChD,OAAO,IAAIlD,cAAcsC,YAAYY,WAAW+D,cAAc,GAAG;wBAClD/D;oBAAbZ,aAAaY,CAAAA,6BAAAA,WAAWQ,cAAc,cAAzBR,wCAAAA,6BAA6B;gBAC5C,OAAO,IAAIlD,cAAcsC,YAAYY,WAAWgE,WAAW,GAAG;wBACrBhE;oBAAvCZ,aAAaY,WAAWiE,YAAY,GAAGjE,CAAAA,8BAAAA,WAAWQ,cAAc,cAAzBR,yCAAAA,8BAA6B,IAAI;gBAC1E,OAAO;wBACQA;oBAAbZ,aAAaY,CAAAA,8BAAAA,WAAWQ,cAAc,cAAzBR,yCAAAA,8BAA6B;gBAC5C;YACF,OAAO;gBACL,IAAIlD,cAAcsC,YAAY;oBAAC;oBAAG;iBAAG,GAAG;oBACtCA,aAAa;gBACf,OAAO;wBACkCY;oBAAvCZ,aAAaY,WAAWiE,YAAY,GAAGjE,CAAAA,8BAAAA,WAAWQ,cAAc,cAAzBR,yCAAAA,8BAA6B,IAAI;gBAC1E;YACF;YAEA,IAAIZ,eAAe,OAAOsE,oBAAoB,MAAM,CAAC1D,WAAWiE,YAAY,EAAE;gBAC5E7E,aAAa;YACf;YAEAY,WAAWZ,UAAU,GAAGA;YACxBY,WAAWkD,iBAAiB,GAAG9D;YAC/BY,WAAWqC,SAAS,GAAGvF,cAAcsC,YAAYY,WAAW+D,cAAc;YAC1E/D,WAAWsC,QAAQ,GAAGlD,eAAe;YACrCY,WAAWkE,MAAM,GAAG9E,eAAe;YAEnC,IAAIY,WAAWkE,MAAM,EAAE;gBACrB,IAAI,CAAC3G,KAAK,CAAC4G,MAAM;YACnB;YAEAV,mBAAmB;gBACjB,IAAI,CAACzD,WAAWkE,MAAM,EAAE;oBACtB,IAAI,CAAC/E,gBAAgB,CAACa,YAAYA,WAAWZ,UAAU;gBACzD;gBAEA,IAAI,CAACC,cAAc,CAACW;YACtB;QACF;QAEA,IAAI,CAACY,QAAQ,CACX;YACEC,WAAW;YACX+B,UAAU;QACZ,GACAa;IAEJ;IAEAW,eAAe,EAAER,QAAQ,EAAoB,EAAE5D,UAA4B,EAAE;QAC3E,IAAIyD;QAEJ,IAAI,IAAI,CAAC3C,KAAK,CAAC8B,QAAQ,EAAE;gBACN5C;YAAjB,IAAIZ,aAAaY,CAAAA,gCAAAA,WAAWkD,iBAAiB,cAA5BlD,2CAAAA,gCAAgC;gBAGPA;YAD1C,MAAM2D,mBACJ,AAACvE,aAAawE,WAAY,MAAM,MAAO,CAAA,AAAC5D,CAAAA,CAAAA,iCAAAA,WAAWiD,kBAAkB,cAA7BjD,4CAAAA,iCAAiC,CAAA,IAAK,IAAI,CAAC,IAAI,CAAA;YACzFZ,aAAaiE,KAAKC,GAAG,CAAC,GAAGlE,aAAauE;YAEtC,IAAIvE,cAAc,IAAI;gBACpBA,aAAa;YACf,OAAO;gBACLA,aAAa;YACf;YAEAY,WAAWZ,UAAU,GAAGA;YACxBY,WAAWkE,MAAM,GAAG9E,eAAe;YAEnC,IAAIY,WAAWkE,MAAM,EAAE;gBACrB,IAAI,CAAC3G,KAAK,CAAC4G,MAAM;YACnB;YAEAV,mBAAmB;gBACjB,IAAI,CAACzD,WAAWkE,MAAM,EAAE;oBACtB,IAAI,CAAC/E,gBAAgB,CAACa,YAAYA,WAAWZ,UAAU;gBACzD;gBAEA,IAAI,CAACC,cAAc,CAACW;YACtB;QACF;QAEA,IAAI,CAACY,QAAQ,CACX;YACEC,WAAW;YACX+B,UAAU;QACZ,GACAa;IAEJ;IA0BA5E,qBAAqBmB,UAAwC,EAAEqE,YAAwB,EAAE;QACvF,MAAMC,KAAKtE,aAAaA,WAAWlB,YAAY,GAAG;QAClD,IAAIwF,IAAI;YACNA,GAAGtG,gBAAgB,CAAC,iBAAiBqG,cAAc;gBAAEE,MAAM;YAAK;QAClE,OAAO;YACLC,WAAWH,cAAc,IAAI,CAAC/G,OAAO;QACvC;IACF;IAEA;;;;;GAKC,GACD6B,iBAAiBa,UAA4B,EAAEyE,OAA2B,EAAE;QAC1E,MAAMC,UAAU,CAAC,qBAAqB,EAAE1E,WAAWS,EAAE,CAAC,CAAC;QAEvDkE,qBAAqB,IAAI,CAACC,QAAQ,CAACF,QAAQ;QAE3C,IAAI,CAACE,QAAQ,CAACF,QAAQ,GAAGG,sBAAsB;YAC7C,IAAI,CAAC7E,WAAWlB,YAAY,EAAE;gBAC5B;YACF;YACAkB,WAAWlB,YAAY,CAACC,KAAK,CAAC+F,SAAS,GAAG,CAAC,eAAe,EAAEL,QAAQ,KAAK,CAAC;QAC5E;IACF;IAEA,0DAA0D,GAC1DpF,eAAeW,UAA4B,EAAE+E,eAA8B,IAAI,EAAE;YAClD;QAA7B,IAAIA,iBAAiB,QAAQ,EAAA,sBAAA,IAAI,CAACxH,KAAK,CAACyH,OAAO,cAAlB,0CAAA,mBAAoB,CAAC,EAAE,MAAKhF,WAAWS,EAAE,EAAE;YACtE;QACF;QACA,IAAI,IAAI,CAACwE,kBAAkB,EAAE;YAC3BN,qBAAqB,IAAI,CAACM,kBAAkB;QAC9C;QACA,IAAI,CAACA,kBAAkB,GAAGJ,sBAAsB;YAC9C,IAAI,IAAI,CAACK,cAAc,CAACjD,OAAO,EAAE;gBAC/B,MAAM,EAAE7C,aAAa,CAAC,EAAE8D,oBAAoB,CAAC,EAAE,GAAGlD;gBAElD,MAAMmF,UACJJ,iBAAiB,OACb,IAAI,AAAC7B,CAAAA,oBAAoB9D,UAAS,IAAM,CAAA,MAAMA,UAAS,KAAM,IAC7D2F;gBACN,IAAI,CAACG,cAAc,CAACjD,OAAO,CAAClD,KAAK,CAACoG,OAAO,GAAGjI,IAAAA,WAAK,EAACiI,SAAS,GAAG,KAAKC,QAAQ;gBAC3E,IAAI,CAACF,cAAc,CAACjD,OAAO,CAAClD,KAAK,CAACC,eAAe,GAC/CmG,WAAW,IAAI,CAAC5H,KAAK,CAAC2B,UAAU,GAAG,CAAC,EAAE,IAAI,CAAC5B,OAAO,CAAC,EAAE,CAAC,GAAG;YAC7D;QACF;IACF;IAEA+H,SAAS;YAcG;QAbV,MAAM,EAAE/F,WAAW,EAAEf,YAAY,EAAEE,aAAa,EAAE6G,kBAAkB,EAAE,GAAG,IAAI,CAAC/H,KAAK;QACnF,MAAM,EAAEsD,SAAS,EAAE+B,QAAQ,EAAE,GAAG,IAAI,CAAC9B,KAAK;QAE1C,IAAI,CAACxB,eAAe,CAACf,cAAc;YACjC,OAAO;QACT;QAEA,qBACE,qBAACgH,qBAAgB,CAACC,QAAQ;YAACC,OAAO;sBAChC,cAAA,qBAACC,kCAAgB,CAACF,QAAQ;gBAACC,OAAO,IAAI,CAACE,gBAAgB;0BACrD,cAAA,sBAACC,YAAK;oBACJC,WAAWC,IAAAA,gBAAU,mBAEnB,EAAA,6BAAA,IAAI,CAACvI,KAAK,CAACwI,cAAc,cAAzB,iDAAA,2BAA2BC,yBAAyB,qDAEpDnF,aACEiF,IAAAA,gBAAU,4BAA+B,mCAC3C,CAAC,CAAErH,CAAAA,iBAAiBF,YAAW,KAC7BuH,IAAAA,gBAAU,8BAAiC;oBAE/CG,QAAQ,IAAI,CAACC,WAAW;oBACxBC,OAAO,IAAI,CAACC,UAAU;oBACtBC,UAAU,IAAI,CAACA,QAAQ;;sCAEvB,qBAACC;4BACCC,eAAajB;4BACbO,SAAS;4BACTW,SAAS,IAAI,CAACjJ,KAAK,CAAC4G,MAAM;4BAC1BsC,KAAK,IAAI,CAACvB,cAAc;;sCAE1B,qBAACoB;4BAAIT,SAAS;4BAAiCY,KAAK,IAAI,CAACzE,WAAW;sCACjE,IAAI,CAACrE,SAAS,GAAG+I,GAAG,CAAC,CAACC;gCACrB,MAAMC,UAAUC,IAAAA,kBAAQ,EAACF,MAAMpJ,KAAK,EAAEX;gCACtC,MAAMkK,cAAc,IAAI,CAACvJ,KAAK,CAACoB,aAAa,CAACiI;gCAC7C,IAAI,AAACA,YAAYtH,eAAesH,YAAYrI,gBAAiB,CAACuI,aAAa;oCACzE,OAAO;gCACT;gCACA,MAAM9G,aAAa,qBAAK8G;gCAExB,MAAMC,SAAS/G,WAAWC,IAAI,KAAK;gCACnC,MAAM+G,MAAM,CAAC,MAAM,EAAEJ,QAAQ,CAAC;gCAE9B,qBACE,qBAACK,oBAAS;oCAERC,SAAS,IAAI,CAAC3J,KAAK,CAAC4G,MAAM;oCAC1B7G,SAAS,IAAI,CAACA,OAAO;oCACrBuI,WAAWC,IAAAA,gBAAU,0BAGnBlD,YAAY,0CAEZmE,UAAU/G,WAAWO,UAAU,IAAI,4CACnCwG,UAAU/G,WAAWqC,SAAS,IAAI;oCAEpC8E,WAAW;oCACXC,cAAc;8CAEbT;mCAdIK;4BAiBX;;;;;;IAMZ;IAjjBAK,YAAY9J,KAAmD,CAAE;QAC/D,KAAK,CAACA;QAmBR,yBAAiB2H,kBAAjB,KAAA;QACA,yBAAiBlD,6BAAc5E,OAAMkK,SAAS;QAC9C,yBAAQrC,sBAAyCzD;QACjD,yBAAiBmE,oBAAjB,KAAA;QACA,yBAAiBf,YAAjB,KAAA;QAGA,yBAAQrF,kBAAiDiC;QA0GzDvD,yBAAAA,qBAAoB;YAClB,MAAM+B,aAAa,IAAI,CAACzC,KAAK,CAACoB,aAAa,CAAC,IAAI,CAACpB,KAAK,CAAC+B,WAAW;YAElE,IAAIU,cAAcA,WAAWC,IAAI,KAAK,QAAQ;gBAC5C,IAAI,IAAI,CAAC1C,KAAK,CAACkB,aAAa,EAAE;oBAC5B,IAAI,CAACI,oBAAoB,CAACmB,YAAY;wBACpC6E,sBAAsB,IAAM,IAAI,CAAC9E,sBAAsB;oBACzD;gBACF,OAAO;oBACL8E,sBAAsB,IAAM,IAAI,CAAC9E,sBAAsB;gBACzD;YACF;QACF;QAyDAmG,yBAAAA,eAAc,CAACqB;YACb,IAAI,IAAI,CAAChK,KAAK,CAACgB,YAAY,EAAE;gBAC3B;YACF;YACA,MAAMyB,aAAa,IAAI,CAACzC,KAAK,CAACoB,aAAa,CAAC,IAAI,CAACpB,KAAK,CAAC+B,WAAW;YAClE,IAAI,CAACU,YAAY;gBACf;YACF;YAEA,IAAIA,WAAWC,IAAI,KAAK,QAAQ;gBAC9B,OAAO,IAAI,CAACyB,eAAe,CAAC6F,GAAGvH;YACjC;YAEA,IAAIA,WAAWC,IAAI,KAAK,QAAQ;gBAC9B,OAAO,IAAI,CAACkD,eAAe,CAACoE,GAAGvH;YACjC;QACF;QA8EAoG,yBAAAA,cAAa,CAACmB;YACZ,MAAMvH,aAAa,IAAI,CAACzC,KAAK,CAACoB,aAAa,CAAC,IAAI,CAACpB,KAAK,CAAC+B,WAAW;YAElE,IAAIU,CAAAA,uBAAAA,iCAAAA,WAAYC,IAAI,MAAK,QAAQ;gBAC/B,OAAO,IAAI,CAACsD,cAAc,CAACgE,GAAGvH;YAChC;YAEA,IAAIA,CAAAA,uBAAAA,iCAAAA,WAAYC,IAAI,MAAK,QAAQ;gBAC/B,OAAO,IAAI,CAACmE,cAAc,CAACmD,GAAGvH;YAChC;QACF;QAgHAqG,yBAAAA,YAAW,CAACkB;gBASyBvH;YARnC,MAAMV,cAAc,IAAI,CAAC/B,KAAK,CAAC+B,WAAW;YAE1C,MAAMwC,SAASyF,EAAEzF,MAAM;YAEvB,IAAI,CAACxC,aAAa;gBAChB;YACF;YACA,MAAMU,aAAa,IAAI,CAACzC,KAAK,CAACoB,aAAa,CAACW;YAC5C,IAAIU,CAAAA,uBAAAA,iCAAAA,WAAYC,IAAI,MAAK,WAAUD,uBAAAA,kCAAAA,6BAAAA,WAAYwC,cAAc,cAA1BxC,iDAAAA,2BAA4BW,QAAQ,CAACmB,UAAS;gBAC/E9B,WAAWoC,eAAe,GAAG;gBAE7B,IAAIpC,WAAWwH,wBAAwB,EAAE;oBACvCC,aAAazH,WAAWwH,wBAAwB;gBAClD;gBAEAxH,WAAWwH,wBAAwB,GAAGhD,WAAW;oBAC/C,IAAIxE,WAAWoC,eAAe,EAAE;wBAC9BpC,WAAWoC,eAAe,GAAG;oBAC/B;gBACF,GAAG;YACL;QACF;QAtbE,IAAI,CAACtB,KAAK,GAAG;YACXD,WAAW;YACX+B,UAAU;YACV7B,gBAAgB,EAAE;QACpB;QAEA,IAAI,CAACmE,cAAc,iBAAG9H,OAAMkK,SAAS;QAErC,IAAI,CAAC3B,gBAAgB,GAAG;YACtB1H,mBAAmB,IAAI,CAACA,iBAAiB;YACzCyJ,eAAe;oBAAC,EAAEjH,EAAE,EAAW,WAANkH;oBAAPlH;;oBAAgC;uBAAdmH,OAAOC,MAAM,CAAC,CAAA,4BAAA,IAAI,CAACtK,KAAK,CAACoB,aAAa,CAAC8B,iBAAzB,uCAAA,4BAAgC,CAAC,GAAGkH;;YACtFT,SAAS,IAAM,IAAI,CAAC3J,KAAK,CAAC4G,MAAM;YAChC2D,eAAe;QACjB;QAEA,IAAI,CAAClD,QAAQ,GAAG,CAAC;IACnB;AAgiBF;AAEO,MAAMjI,iBAAkDoL,IAAAA,wBAAW,EACxEC,IAAAA,0BAAY,EACVC,IAAAA,YAAO,EAAwBC,IAAAA,iCAAgB,EAACC,WAAWhL,4BAE7DiL,4CAAqB,EACrB;AAGF;;CAEC,GACD,SAASD,UAAUnI,UAA4B;IAC7C,OAAQA,WAAWC,IAAI;QACrB,KAAK;YACHD,WAAW6D,cAAc,GAAG7D,WAAW6D,cAAc,IAAIwE,4CAAiC;YAC1F,OAAOjI,cAAcJ;QACvB,KAAK;YACH,OAAOsI,cAActI;QACvB;YACEuI,QAAQC,GAAG,CAACC,QAAQ,KAAK,iBACvB7L,KAAK,CAAC,kCAAkC,EAAEoD,WAAWC,IAAI,CAAC,mBAAmB,CAAC,EAAE;IACtF;AACF;AAEA,SAASG,cAAcJ,UAA4B;IACjD,MAAM,EAAEwC,cAAc,EAAEkG,WAAW,EAAE,GAAG1I;IACxC,MAAM2I,uBAAuBC,4BAC3BpG,2BAAAA,qCAAAA,eAAgBqG,iBAAiB,EACjC7I,WAAWO,UAAU;IAEvB,MAAMuI,oBAAoBJ,CAAAA,wBAAAA,kCAAAA,YAAatF,YAAY,KAAI;IACvD,MAAM2F,gBAAgBJ,uBAAuBG;IAC7C,IAAIE,iBAAiBhJ,WAAWZ,UAAU;IAC1C,IAAI6J,iBAAiBjJ,WAAWO,UAAU;QAGvBiC;IADnBxC,WAAWO,UAAU,GACnBwI,gBAAiBvG,CAAAA,CAAAA,+BAAAA,2BAAAA,qCAAAA,eAAgB0G,YAAY,cAA5B1G,0CAAAA,+BAAgC,CAAA,KAAMxC,WAAW6D,cAAc,KAAK;IAEvF,IAAIxB,YAAY;IAChB,IAAIC,WAAW;IACf,IAAI9B;IACJ,IAAIpB;IACJ,IAAI0E;IACJ,IAAIC;IACJ,IAAIC;IAEJ,MAAMmF,oBAAoBC,QAAQpJ,WAAWO,UAAU,IAAIP,WAAW6D,cAAc,KAAK;IACzF,IAAI7D,WAAWO,UAAU,EAAE;YACDP;QAAxBQ,iBAAiB,MAAOR,CAAAA,CAAAA,6BAAAA,WAAW6D,cAAc,cAAzB7D,wCAAAA,6BAA6B,CAAA;QAErD,MAAMqJ,YAAY7I,iBAAiB;QACnC,MAAM8I,cAAc,MAAM9I;QAE1BsD,gBAAgB;YAAC;YAAGuF;SAAU;QAC9BtF,iBAAiBoF,oBAAoB;YAACE;YAAW7I,iBAAiB8I,cAAc;SAAE,GAAG9H;QACrFwC,cAAc;YAACxD,iBAAiB8I,cAAc;YAAG;SAAI;QAErDjH,YAAY8G,qBAAqB3I,iBAAiB;QAClD8B,WAAW9B,kBAAkB;QAC7BpB,aAAaoB;IACf,OAAO;YACgBR,2BAIFA,wCAAAA;YAJEA;QAArB,MAAMuJ,eAAevJ,CAAAA,0CAAAA,4BAAAA,WAAW2C,aAAa,cAAxB3C,gDAAAA,0BAA0BoD,YAAY,cAAtCpD,oDAAAA,yCAA0C;QAC/D,MAAMwJ,SAAST,gBAAgBQ;YAGZvJ;QADnBQ,iBACE,MAAM,AAACgJ,SAAUxJ,CAAAA,CAAAA,uDAAAA,2BAAAA,WAAWlB,YAAY,cAAvBkB,gDAAAA,yCAAAA,yBAAyByJ,aAAa,cAAtCzJ,6DAAAA,uCAAwCoD,YAAY,cAApDpD,iEAAAA,sDAAwD,CAAA,IAAM;QACjFZ,aAAaoB;QAEbsD,gBAAgB;YAAC1E;YAAYA,aAAa;SAAG;QAC7C2E,iBAAiBvC;QACjBwC,cAAc;YAAC5E,aAAa;YAAIA,aAAa;SAAI;IACnD;IAEA,4GAA4G;IAC5G,MAAMsK,eAAeT,kBAAkBjJ,WAAWO,UAAU;IAC5D,8GAA8G;IAC9G,IAAI,AAACmJ,gBAAgBtK,aAAc4J,CAAAA,2BAAAA,4BAAAA,iBAAkB,GAAE,KAAOhJ,WAAW6D,cAAc,KAAK,KAAK;QAC/FzE,aAAa;IACf;IAEA,gDAAgD;IAChD,IAAIA,eAAe,GAAG;QACpBkD,WAAW;QACXD,YAAY;IACd;IAEArC,WAAW8D,aAAa,GAAGA;IAC3B9D,WAAW+D,cAAc,GAAGA;IAC5B/D,WAAWgE,WAAW,GAAGA;IACzBhE,WAAWZ,UAAU,GAAGA;IACxBY,WAAWQ,cAAc,GAAGA;IAC5BR,WAAWqC,SAAS,GAAGA;IACvBrC,WAAWsC,QAAQ,GAAGA;AACxB;AAEA,SAASgG,cAActI,UAA4B;IACjDA,WAAWZ,UAAU,GAAG;AAC1B;AAEA,SAASwJ,4BACPe,OAAoB,EACpBC,YAA4C;IAE5C,IAAI,CAACA,cAAc;QACjB,OAAOD,QAAQE,YAAY;IAC7B;IAEA;;;;KAIG,GACH,MAAMC,qBAAqBH,QAAQ5K,KAAK,CAACyK,MAAM;IAC/CG,QAAQ5K,KAAK,CAACyK,MAAM,GAAG;IAEvB,MAAMO,gBAAgBJ,QAAQE,YAAY;IAC1CF,QAAQ5K,KAAK,CAACyK,MAAM,GAAGM;IAEvB,OAAOC;AACT"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { type DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { type CustomTouchEvent, Touch } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { ModalRootContext, type ModalRootContextInterface } from './ModalRootContext';\nimport { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';\nimport type { ModalRootWithDOMProps, ModalsStateEntry, TranslateRange } from './types';\nimport { type ModalTransitionProps, withModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nfunction numberInRange(number: number, range: TranslateRange | undefined) {\n if (!range) {\n return false;\n }\n return number >= range[0] && number <= range[1];\n}\n\nfunction rangeTranslate(number: number) {\n return clamp(number, 0, 98);\n}\n\ninterface ModalRootState {\n touchDown?: boolean;\n dragging?: boolean;\n modalOpenedLog: string[];\n}\n\nclass ModalRootTouchComponent extends React.Component<\n ModalRootWithDOMProps & DOMProps & ModalTransitionProps,\n ModalRootState\n> {\n constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {\n super(props);\n this.state = {\n touchDown: false,\n dragging: false,\n modalOpenedLog: [],\n };\n\n this.maskElementRef = React.createRef();\n\n this.modalRootContext = {\n updateModalHeight: this.updateModalHeight,\n registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),\n onClose: () => this.props.onExit(),\n isInsideModal: true,\n };\n\n this.frameIds = {};\n }\n\n private readonly maskElementRef: React.RefObject<HTMLDivElement>;\n private readonly viewportRef = React.createRef<HTMLDivElement>();\n private maskAnimationFrame: number | undefined = undefined;\n private readonly modalRootContext: ModalRootContextInterface;\n private readonly frameIds: {\n [index: string]: number;\n };\n private restoreFocusTo: HTMLElement | undefined | null = undefined;\n\n get timeout(): number {\n return this.props.platform === 'ios' ? 400 : 320;\n }\n\n get document(): Document {\n return this.props.document as Document;\n }\n\n get window(): Window {\n return this.props.window as Window;\n }\n\n getModals() {\n return React.Children.toArray(this.props.children) as React.ReactElement[];\n }\n\n componentDidMount() {\n // Отслеживаем изменение размеров viewport\n this.window?.addEventListener('resize', this.updateModalHeight, false);\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalHeight, false);\n }\n\n componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {\n // transition phase 2: animate exiting modal\n if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {\n this.closeModal(this.props.exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {\n const enteringState = this.props.getModalState(this.props.enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState) {\n if (enteringState.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.onEntered(enteringState);\n }\n });\n\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = this.props.delayEnter\n ? `${this.timeout}ms`\n : '';\n this.animateTranslate(enteringState, enteringState.translateY);\n this.setMaskOpacity(enteringState, 1);\n }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (enabled) {\n // восстанавливаем значение overscroll behavior\n // eslint-disable-next-line no-restricted-properties\n this.document.documentElement.classList.remove('vkui--disable-overscroll-behavior');\n } else {\n // отключаем нативный pull-to-refresh при открытом модальном окне\n // чтобы он не срабатывал при закрытии модалки смахиванием вниз\n // eslint-disable-next-line no-restricted-properties\n this.document.documentElement.classList.add('vkui--disable-overscroll-behavior');\n }\n }\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === 'page' && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === 'page') {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n onEntered({ id, modalElement }: ModalsStateEntry) {\n if (\n !this.props.noFocusToDialog &&\n modalElement &&\n !modalElement.contains(this.document.activeElement)\n ) {\n modalElement.focus();\n }\n\n this.props.onEntered(id);\n }\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n if (!this.state.modalOpenedLog.length) {\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, id],\n }));\n }\n const nextModalState = this.props.getModalState(this.props.activeModal);\n const nextIsPage = !!nextModalState && nextModalState.type === 'page';\n\n const prevIsPage = !!prevModalState && prevModalState.type === 'page';\n this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));\n const exitTranslate =\n prevIsPage &&\n nextIsPage &&\n (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&\n !this.props.isBack\n ? (nextModalState?.translateYFrom ?? 0) + 10\n : 100;\n this.animateTranslate(prevModalState, exitTranslate);\n\n if (!nextModalState) {\n // NOTE: was only for clean exit\n this.setMaskOpacity(prevModalState, 0);\n this.setState({ modalOpenedLog: [] });\n prevModalState.translateY = undefined;\n prevModalState.expandable = undefined;\n } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {\n nextModalState.translateY = undefined;\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, nextModalState.id!],\n }));\n }\n }\n\n onTouchMove = (e: CustomTouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === 'page') {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === 'card') {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: CustomTouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== 'ios');\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: CustomTouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== 'ios');\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: CustomTouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === 'page') {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === 'card') {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: CustomTouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = modalState.preventClose ? modalState.translateYFrom ?? 0 : 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = modalState.preventClose ? modalState.translateYFrom ?? 0 : 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75 && !modalState.preventClose) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = numberInRange(translateY, modalState.collapsedRange);\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: CustomTouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === 'page' && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n const el = modalState ? modalState.innerElement : null;\n if (el) {\n el.addEventListener('transitionend', eventHandler, { once: true });\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n if (!modalState.innerElement) {\n return;\n }\n modalState.innerElement.style.transform = `translate3d(0, ${percent}%, 0)`;\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n this.maskElementRef.current.style.transitionDelay =\n opacity && this.props.delayEnter ? `${this.timeout}ms` : '';\n }\n });\n }\n\n render() {\n const { activeModal, exitingModal, enteringModal, modalOverlayTestId } = this.props;\n const { touchDown, dragging } = this.state;\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <ModalRootContext.Provider value={this.modalRootContext}>\n <Touch\n className={classNames(\n styles['ModalRoot'],\n this.props.configProvider?.hasCustomPanelHeaderAfter &&\n styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n touchDown &&\n classNames(styles['ModalRoot--touched'], 'vkuiInternalModalRoot--touched'),\n !!(enteringModal || exitingModal) &&\n classNames(styles['ModalRoot--switching'], 'vkuiInternalModalRoot--switching'),\n )}\n onMove={this.onTouchMove}\n onEnd={this.onTouchEnd}\n onScroll={this.onScroll}\n >\n <div\n data-testid={modalOverlayTestId}\n className={styles['ModalRoot__mask']}\n onClick={this.props.onExit}\n ref={this.maskElementRef}\n />\n <div className={styles['ModalRoot__viewport']} ref={this.viewportRef}>\n {this.getModals().map((Modal) => {\n const modalId = getNavId(Modal.props, warn);\n const _modalState = this.props.getModalState(modalId);\n if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {\n return null;\n }\n const modalState = { ..._modalState };\n\n const isPage = modalState.type === 'page';\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n key={key}\n onClose={this.props.onExit}\n timeout={this.timeout}\n className={classNames(\n styles['ModalRoot__modal'],\n\n dragging && 'vkuiInternalModalRoot__modal--dragging',\n\n isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',\n isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',\n )}\n autoFocus={false}\n restoreFocus={false}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </Touch>\n </ModalRootContext.Provider>\n </TouchRootContext.Provider>\n );\n }\n}\n\nexport const ModalRootTouch: React.FC<ModalRootWithDOMProps> = withContext(\n withPlatform(\n withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),\n ),\n ConfigProviderContext,\n 'configProvider',\n);\n\n/**\n * Инициализирует модалку перед анимацией открытия\n */\nfunction initModal(modalState: ModalsStateEntry) {\n switch (modalState.type) {\n case 'page':\n modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;\n return initPageModal(modalState);\n case 'card':\n return initCardModal(modalState);\n default:\n process.env.NODE_ENV === 'development' &&\n warn(`initActiveModal: modalState.type=\"${modalState.type}\" не поддерживается`, 'error');\n }\n}\n\nfunction initPageModal(modalState: ModalsStateEntry) {\n const { contentElement, bottomInset } = modalState;\n const contentElementHeight = calculateModalContentHeight(\n contentElement?.firstElementChild as HTMLElement,\n modalState.expandable,\n );\n const bottomInsetHeight = bottomInset?.offsetHeight || 0;\n const contentHeight = contentElementHeight + bottomInsetHeight;\n let prevTranslateY = modalState.translateY;\n let prevExpandable = modalState.expandable;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) || modalState.settlingHeight === 100;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange | undefined;\n let hiddenRange: TranslateRange;\n\n const hasCollapsedState = Boolean(modalState.expandable && modalState.settlingHeight !== 100);\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = hasCollapsedState ? [shiftHalf, translateYFrom + visiblePart / 4] : undefined;\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = hasCollapsedState && translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = undefined;\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Свойство expandable может измениться из-за высоты контента, в таком случае на всю высоту не разворачиваем\n const shouldExpand = prevExpandable && modalState.expandable;\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if ((shouldExpand && translateY > (prevTranslateY ?? 100)) || modalState.settlingHeight === 100) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n\nfunction calculateModalContentHeight(\n element: HTMLElement,\n isExpandable: ModalsStateEntry['expandable'],\n) {\n if (!isExpandable) {\n return element.scrollHeight;\n }\n\n /*\n * В режиме expandable мы назначаем контейнеру контента высоту 100%, что не даёт\n * получить реальную высоту контента.\n * Поэтому мы пересчитываем высоту, временно устанавливая height: auto;\n * */\n const currentHeightStyle = element.style.height;\n element.style.height = 'auto';\n\n const elementHeight = element.scrollHeight;\n element.style.height = currentHeightStyle;\n\n return elementHeight;\n}\n"],"names":["ModalRootTouch","warn","warnOnce","numberInRange","number","range","rangeTranslate","clamp","ModalRootTouchComponent","React","Component","timeout","props","platform","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","updateModalHeight","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","exitingModal","closeModal","enteringModal","enteringState","getModalState","onEnter","waitTransitionFinish","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","setMaskOpacity","activeModal","restoreFocusTo","activeElement","focus","enabled","documentElement","classList","remove","add","checkPageContentHeight","modalState","type","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","id","noFocusToDialog","contains","setState","touchDown","state","modalOpenedLog","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","undefined","includes","onPageTouchMove","event","shiftY","originalEvent","target","isY","viewportRef","current","preventDefault","stopPropagation","contentScrolled","collapsed","expanded","touchStartContentScrollTop","contentElement","scrollTop","touchMovePositive","headerElement","dragging","shiftYPercent","innerHeight","shiftYCurrent","rubber","touchShiftYPercent","translateYCurrent","onCardTouchMove","offsetHeight","Math","max","onPageTouchEnd","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","preventClose","hidden","onExit","onCardTouchEnd","eventHandler","el","once","setTimeout","percent","frameId","cancelAnimationFrame","frameIds","requestAnimationFrame","transform","forceOpacity","history","maskAnimationFrame","maskElementRef","opacity","toString","render","modalOverlayTestId","TouchRootContext","Provider","value","ModalRootContext","modalRootContext","Touch","className","classNames","configProvider","hasCustomPanelHeaderAfter","onMove","onTouchMove","onEnd","onTouchEnd","onScroll","div","data-testid","onClick","ref","map","Modal","modalId","getNavId","_modalState","isPage","key","FocusTrap","onClose","autoFocus","restoreFocus","constructor","createRef","e","contentScrollStopTimeout","clearTimeout","registerModal","data","Object","assign","isInsideModal","withContext","withPlatform","withDOM","withModalManager","initModal","ConfigProviderContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","initCardModal","process","env","NODE_ENV","bottomInset","contentElementHeight","calculateModalContentHeight","firstElementChild","bottomInsetHeight","contentHeight","prevTranslateY","prevExpandable","clientHeight","hasCollapsedState","Boolean","shiftHalf","visiblePart","headerHeight","height","parentElement","shouldExpand","element","isExpandable","scrollHeight","currentHeightStyle","elementHeight"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalRootDesktop.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,KAAK,EAAE,qBAAqB,EAAoB,MAAM,SAAS,CAAC;AAMvE,eAAO,MAAM,gBAAgB,0HAS1B,qBAAqB,KAAG,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"ModalRootDesktop.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,KAAK,EAAE,qBAAqB,EAAoB,MAAM,SAAS,CAAC;AAMvE,eAAO,MAAM,gBAAgB,0HAS1B,qBAAqB,KAAG,KAAK,CAAC,SAqNhC,CAAC"}
|
|
@@ -117,7 +117,15 @@ const ModalRootDesktop = ({ activeModal: activeModalProp, children, noFocusToDia
|
|
|
117
117
|
// Анимация закрытия модального окна
|
|
118
118
|
if (!activeModal) {
|
|
119
119
|
requestAnimationFrame(()=>{
|
|
120
|
-
waitTransitionFinish(prevModalState === null || prevModalState === void 0 ? void 0 : prevModalState.innerElement, ()=>
|
|
120
|
+
waitTransitionFinish(prevModalState === null || prevModalState === void 0 ? void 0 : prevModalState.innerElement, (event)=>{
|
|
121
|
+
// Исключаем дочерние элементы
|
|
122
|
+
if (event && event.target === (prevModalState === null || prevModalState === void 0 ? void 0 : prevModalState.innerElement)) {
|
|
123
|
+
onExited(id);
|
|
124
|
+
} else if (!event) {
|
|
125
|
+
// Вызвался по тайм-ауту
|
|
126
|
+
onExited(id);
|
|
127
|
+
}
|
|
128
|
+
}, timeout);
|
|
121
129
|
animateModalOpacity(prevModalState, false);
|
|
122
130
|
setMaskOpacity(prevModalState, 0);
|
|
123
131
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { useDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { ModalRootContext, type ModalRootContextInterface } from './ModalRootContext';\nimport type { ModalRootWithDOMProps, ModalsStateEntry } from './types';\nimport { useModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nexport const ModalRootDesktop = ({\n activeModal: activeModalProp,\n children,\n noFocusToDialog = false,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n modalOverlayTestId,\n}: ModalRootWithDOMProps): React.ReactNode => {\n const maskElementRef = React.useRef<HTMLDivElement>(null);\n const maskAnimationFrame = React.useRef<number | undefined>(undefined);\n const restoreFocusTo = React.useRef<HTMLElement | undefined>(undefined);\n\n const { document } = useDOM();\n const { hasCustomPanelHeaderAfter, platform } = useConfigProvider();\n const {\n activeModal,\n exitingModal,\n onExit,\n getModalState,\n enteringModal,\n onEnter,\n onEntered: onEnteredProp,\n onExited,\n history,\n delayEnter,\n } = useModalManager(activeModalProp, children, onOpen, onOpened, onClose, onClosed, noop);\n\n const waitTransitionFinish = useWaitTransitionFinish();\n const prevProps = usePrevious({\n exitingModal,\n enteringModal,\n activeModal,\n });\n const modalRootContext: ModalRootContextInterface = useObjectMemo({\n updateModalHeight: () => undefined,\n registerModal: ({ id, ...data }) => Object.assign(getModalState(id) ?? {}, data),\n onClose: onExit,\n isInsideModal: true,\n });\n\n const timeout = platform === 'ios' ? 400 : 320;\n const modals = React.Children.toArray(children) as React.ReactElement[];\n\n /* Анимирует сдвиг модального окна */\n const animateModalOpacity = (modalState: ModalsStateEntry | undefined, display: boolean) => {\n if (modalState?.innerElement) {\n modalState.innerElement.style.transition = '';\n modalState.innerElement.style.transitionDelay = display && delayEnter ? `${timeout}ms` : '';\n modalState.innerElement.style.opacity = display ? '1' : '0';\n }\n };\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n const setMaskOpacity = (modalState: ModalsStateEntry, forceOpacity: number | null = null) => {\n if (forceOpacity === null && history?.[0] !== modalState.id) {\n return;\n }\n\n if (maskAnimationFrame.current) {\n cancelAnimationFrame(maskAnimationFrame.current);\n }\n maskAnimationFrame.current = requestAnimationFrame(() => {\n if (maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n }\n });\n };\n\n const onEntered = ({ id, modalElement }: ModalsStateEntry) => {\n if (!noFocusToDialog && modalElement && !modalElement.contains(document!.activeElement)) {\n modalElement.focus();\n }\n\n onEnteredProp(id);\n };\n\n const openModal = () => {\n if (!enteringModal || !prevProps) {\n return;\n }\n\n const enteringState = getModalState(enteringModal);\n onEnter();\n\n // Анимация открытия модального окна\n if (!prevProps.exitingModal) {\n requestAnimationFrame(() => {\n if (enteringModal === enteringModal && enteringState) {\n waitTransitionFinish(enteringState.innerElement, () => onEntered(enteringState), timeout);\n animateModalOpacity(enteringState, true);\n setMaskOpacity(enteringState, 1);\n }\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n requestAnimationFrame(() => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transition = 'none';\n enteringState.innerElement.style.opacity = '1';\n setMaskOpacity(enteringState, 1);\n }\n });\n\n if (enteringState) {\n onEntered(enteringState);\n }\n };\n\n const closeModal = (id: string) => {\n const prevModalState = getModalState(id);\n if (!prevModalState) {\n return;\n }\n\n // Анимация закрытия модального окна\n if (!activeModal) {\n requestAnimationFrame(() => {\n waitTransitionFinish(prevModalState?.innerElement, () => onExited(id), timeout);\n animateModalOpacity(prevModalState, false);\n setMaskOpacity(prevModalState, 0);\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n onExited(id);\n };\n\n React.useEffect(() => {\n if (!prevProps) {\n return;\n }\n\n // transition phase 2: animate exiting modal\n if (exitingModal && exitingModal !== prevProps.exitingModal) {\n closeModal(exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (enteringModal && enteringModal !== prevProps.enteringModal) {\n openModal();\n }\n\n // focus restoration\n if (activeModal && !prevProps.activeModal) {\n restoreFocusTo.current = (document?.activeElement ?? undefined) as HTMLElement | undefined;\n }\n if (!activeModal && !exitingModal && restoreFocusTo.current) {\n restoreFocusTo.current.focus();\n restoreFocusTo.current = undefined;\n }\n });\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <ModalRootContext.Provider value={modalRootContext}>\n <div\n className={classNames(\n styles['ModalRoot'],\n hasCustomPanelHeaderAfter && styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n styles['ModalRoot--desktop'],\n )}\n >\n <div\n data-testid={modalOverlayTestId}\n className={styles['ModalRoot__mask']}\n ref={maskElementRef}\n onClick={onExit}\n />\n <div className={styles['ModalRoot__viewport']}>\n {modals.map((Modal: React.ReactElement) => {\n const modalId = getNavId(Modal.props, warn);\n if (modalId !== activeModal && modalId !== exitingModal) {\n return null;\n }\n\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n autoFocus={false}\n restoreFocus={false}\n onClose={onExit}\n timeout={timeout}\n key={key}\n className={styles['ModalRoot__modal']}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </div>\n </ModalRootContext.Provider>\n );\n};\n"],"names":["ModalRootDesktop","warn","warnOnce","activeModal","activeModalProp","children","noFocusToDialog","onOpen","onOpened","onClose","onClosed","modalOverlayTestId","maskElementRef","React","useRef","maskAnimationFrame","undefined","restoreFocusTo","document","useDOM","hasCustomPanelHeaderAfter","platform","useConfigProvider","exitingModal","onExit","getModalState","enteringModal","onEnter","onEntered","onEnteredProp","onExited","history","delayEnter","useModalManager","noop","waitTransitionFinish","useWaitTransitionFinish","prevProps","usePrevious","modalRootContext","useObjectMemo","updateModalHeight","registerModal","id","data","Object","assign","isInsideModal","timeout","modals","Children","toArray","animateModalOpacity","modalState","display","innerElement","style","transition","transitionDelay","opacity","setMaskOpacity","forceOpacity","current","cancelAnimationFrame","requestAnimationFrame","translateY","translateYCurrent","clamp","toString","modalElement","contains","activeElement","focus","openModal","enteringState","closeModal","prevModalState","useEffect","ModalRootContext","Provider","value","div","className","classNames","data-testid","ref","onClick","map","Modal","modalId","getNavId","props","key","FocusTrap","autoFocus","restoreFocus"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { useDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { ModalRootContext, type ModalRootContextInterface } from './ModalRootContext';\nimport type { ModalRootWithDOMProps, ModalsStateEntry } from './types';\nimport { useModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nexport const ModalRootDesktop = ({\n activeModal: activeModalProp,\n children,\n noFocusToDialog = false,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n modalOverlayTestId,\n}: ModalRootWithDOMProps): React.ReactNode => {\n const maskElementRef = React.useRef<HTMLDivElement>(null);\n const maskAnimationFrame = React.useRef<number | undefined>(undefined);\n const restoreFocusTo = React.useRef<HTMLElement | undefined>(undefined);\n\n const { document } = useDOM();\n const { hasCustomPanelHeaderAfter, platform } = useConfigProvider();\n const {\n activeModal,\n exitingModal,\n onExit,\n getModalState,\n enteringModal,\n onEnter,\n onEntered: onEnteredProp,\n onExited,\n history,\n delayEnter,\n } = useModalManager(activeModalProp, children, onOpen, onOpened, onClose, onClosed, noop);\n\n const waitTransitionFinish = useWaitTransitionFinish();\n const prevProps = usePrevious({\n exitingModal,\n enteringModal,\n activeModal,\n });\n const modalRootContext: ModalRootContextInterface = useObjectMemo({\n updateModalHeight: () => undefined,\n registerModal: ({ id, ...data }) => Object.assign(getModalState(id) ?? {}, data),\n onClose: onExit,\n isInsideModal: true,\n });\n\n const timeout = platform === 'ios' ? 400 : 320;\n const modals = React.Children.toArray(children) as React.ReactElement[];\n\n /* Анимирует сдвиг модального окна */\n const animateModalOpacity = (modalState: ModalsStateEntry | undefined, display: boolean) => {\n if (modalState?.innerElement) {\n modalState.innerElement.style.transition = '';\n modalState.innerElement.style.transitionDelay = display && delayEnter ? `${timeout}ms` : '';\n modalState.innerElement.style.opacity = display ? '1' : '0';\n }\n };\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n const setMaskOpacity = (modalState: ModalsStateEntry, forceOpacity: number | null = null) => {\n if (forceOpacity === null && history?.[0] !== modalState.id) {\n return;\n }\n\n if (maskAnimationFrame.current) {\n cancelAnimationFrame(maskAnimationFrame.current);\n }\n maskAnimationFrame.current = requestAnimationFrame(() => {\n if (maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n }\n });\n };\n\n const onEntered = ({ id, modalElement }: ModalsStateEntry) => {\n if (!noFocusToDialog && modalElement && !modalElement.contains(document!.activeElement)) {\n modalElement.focus();\n }\n\n onEnteredProp(id);\n };\n\n const openModal = () => {\n if (!enteringModal || !prevProps) {\n return;\n }\n\n const enteringState = getModalState(enteringModal);\n onEnter();\n\n // Анимация открытия модального окна\n if (!prevProps.exitingModal) {\n requestAnimationFrame(() => {\n if (enteringModal === enteringModal && enteringState) {\n waitTransitionFinish(enteringState.innerElement, () => onEntered(enteringState), timeout);\n animateModalOpacity(enteringState, true);\n setMaskOpacity(enteringState, 1);\n }\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n requestAnimationFrame(() => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transition = 'none';\n enteringState.innerElement.style.opacity = '1';\n setMaskOpacity(enteringState, 1);\n }\n });\n\n if (enteringState) {\n onEntered(enteringState);\n }\n };\n\n const closeModal = (id: string) => {\n const prevModalState = getModalState(id);\n if (!prevModalState) {\n return;\n }\n\n // Анимация закрытия модального окна\n if (!activeModal) {\n requestAnimationFrame(() => {\n waitTransitionFinish(\n prevModalState?.innerElement,\n (event) => {\n // Исключаем дочерние элементы\n if (event && event.target === prevModalState?.innerElement) {\n onExited(id);\n } else if (!event) {\n // Вызвался по тайм-ауту\n onExited(id);\n }\n },\n timeout,\n );\n animateModalOpacity(prevModalState, false);\n setMaskOpacity(prevModalState, 0);\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n onExited(id);\n };\n\n React.useEffect(() => {\n if (!prevProps) {\n return;\n }\n\n // transition phase 2: animate exiting modal\n if (exitingModal && exitingModal !== prevProps.exitingModal) {\n closeModal(exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (enteringModal && enteringModal !== prevProps.enteringModal) {\n openModal();\n }\n\n // focus restoration\n if (activeModal && !prevProps.activeModal) {\n restoreFocusTo.current = (document?.activeElement ?? undefined) as HTMLElement | undefined;\n }\n if (!activeModal && !exitingModal && restoreFocusTo.current) {\n restoreFocusTo.current.focus();\n restoreFocusTo.current = undefined;\n }\n });\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <ModalRootContext.Provider value={modalRootContext}>\n <div\n className={classNames(\n styles['ModalRoot'],\n hasCustomPanelHeaderAfter && styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n styles['ModalRoot--desktop'],\n )}\n >\n <div\n data-testid={modalOverlayTestId}\n className={styles['ModalRoot__mask']}\n ref={maskElementRef}\n onClick={onExit}\n />\n <div className={styles['ModalRoot__viewport']}>\n {modals.map((Modal: React.ReactElement) => {\n const modalId = getNavId(Modal.props, warn);\n if (modalId !== activeModal && modalId !== exitingModal) {\n return null;\n }\n\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n autoFocus={false}\n restoreFocus={false}\n onClose={onExit}\n timeout={timeout}\n key={key}\n className={styles['ModalRoot__modal']}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </div>\n </ModalRootContext.Provider>\n );\n};\n"],"names":["ModalRootDesktop","warn","warnOnce","activeModal","activeModalProp","children","noFocusToDialog","onOpen","onOpened","onClose","onClosed","modalOverlayTestId","maskElementRef","React","useRef","maskAnimationFrame","undefined","restoreFocusTo","document","useDOM","hasCustomPanelHeaderAfter","platform","useConfigProvider","exitingModal","onExit","getModalState","enteringModal","onEnter","onEntered","onEnteredProp","onExited","history","delayEnter","useModalManager","noop","waitTransitionFinish","useWaitTransitionFinish","prevProps","usePrevious","modalRootContext","useObjectMemo","updateModalHeight","registerModal","id","data","Object","assign","isInsideModal","timeout","modals","Children","toArray","animateModalOpacity","modalState","display","innerElement","style","transition","transitionDelay","opacity","setMaskOpacity","forceOpacity","current","cancelAnimationFrame","requestAnimationFrame","translateY","translateYCurrent","clamp","toString","modalElement","contains","activeElement","focus","openModal","enteringState","closeModal","prevModalState","event","target","useEffect","ModalRootContext","Provider","value","div","className","classNames","data-testid","ref","onClick","map","Modal","modalId","getNavId","props","key","FocusTrap","autoFocus","restoreFocus"],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ const _FormField = require("../FormField/FormField");
|
|
|
25
25
|
const _SelectTypography = require("../SelectTypography/SelectTypography");
|
|
26
26
|
const sizeYClassNames = {
|
|
27
27
|
none: "vkuiSelect--sizeY-none",
|
|
28
|
-
|
|
28
|
+
compact: "vkuiSelect--sizeY-compact"
|
|
29
29
|
};
|
|
30
30
|
/**
|
|
31
31
|
* @see https://vkcom.github.io/VKUI/#/NativeSelect
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/NativeSelect/NativeSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport type { SelectType } from '../Select/Select';\nimport { SelectTypography } from '../SelectTypography/SelectTypography';\nimport styles from '../Select/Select.module.css';\n\nconst sizeYClassNames = {\n none: styles['Select--sizeY-none'],\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/NativeSelect/NativeSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport type { SelectType } from '../Select/Select';\nimport { SelectTypography } from '../SelectTypography/SelectTypography';\nimport styles from '../Select/Select.module.css';\n\nconst sizeYClassNames = {\n none: styles['Select--sizeY-none'],\n compact: styles['Select--sizeY-compact'],\n};\n\nexport interface NativeSelectProps\n extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'multiple'>,\n HasRef<HTMLSelectElement>,\n HasRootRef<HTMLDivElement>,\n HasAlign,\n Pick<FormFieldProps, 'before' | 'status'> {\n placeholder?: string;\n multiline?: boolean;\n selectType?: SelectType;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n}\n\nexport interface SelectState {\n value?: React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n title?: string;\n notSelected?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/NativeSelect\n */\nconst NativeSelect = ({\n style,\n align,\n placeholder,\n children,\n className,\n getRef,\n getRootRef,\n disabled,\n multiline,\n selectType = 'default',\n status,\n icon = <DropdownIcon />,\n before,\n onChange,\n ...restProps\n}: NativeSelectProps): React.ReactNode => {\n const [title, setTitle] = React.useState('');\n const [empty, setEmpty] = React.useState(false);\n const selectRef = useExternRef(getRef);\n const { sizeY = 'none' } = useAdaptivity();\n\n const checkSelectedOption = () => {\n const selectedOption = selectRef.current?.options[selectRef.current.selectedIndex];\n if (selectedOption) {\n setTitle(selectedOption.text);\n setEmpty(selectedOption.value === '' && placeholder != null);\n }\n };\n useIsomorphicLayoutEffect(checkSelectedOption, [children]);\n\n return (\n <FormField\n Component=\"div\"\n className={classNames(\n styles['Select'],\n 'vkuiInternalNativeSelect',\n before && styles['Select--hasBefore'],\n empty && styles['Select--empty'],\n multiline && styles['Select--multiline'],\n align === 'center' && styles['Select--align-center'],\n align === 'right' && styles['Select--align-right'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n getRootRef={getRootRef}\n disabled={disabled}\n before={before}\n after={icon}\n status={status}\n mode={getFormFieldModeFromSelectType(selectType)}\n >\n <select\n {...restProps}\n disabled={disabled}\n className={styles['Select__el']}\n onChange={callMultiple(onChange, checkSelectedOption)}\n ref={selectRef}\n >\n {placeholder && <option value=\"\">{placeholder}</option>}\n {children}\n </select>\n <div className={styles['Select__container']} aria-hidden>\n <SelectTypography className={styles['Select__title']} selectType={selectType}>\n {title}\n </SelectTypography>\n </div>\n </FormField>\n );\n};\n\nexport { NativeSelect };\n"],"names":["NativeSelect","sizeYClassNames","none","compact","style","align","placeholder","children","className","getRef","getRootRef","disabled","multiline","selectType","status","icon","DropdownIcon","before","onChange","restProps","title","setTitle","React","useState","empty","setEmpty","selectRef","useExternRef","sizeY","useAdaptivity","checkSelectedOption","selectedOption","current","options","selectedIndex","text","value","useIsomorphicLayoutEffect","FormField","Component","classNames","after","mode","getFormFieldModeFromSelectType","select","callMultiple","ref","option","div","aria-hidden","SelectTypography"],"mappings":";;;;+BAmHSA;;;eAAAA;;;;;;;;iEAnHc;sBACI;+BACG;8BACD;8BACA;wBACkB;2CACL;8BAEb;2BACkB;kCAEd;AAGjC,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAuBA;;CAEC,GACD,MAAMH,eAAe;QAAC,EACpBI,KAAK,EACLC,KAAK,EACLC,WAAW,EACXC,QAAQ,EACRC,SAAS,EACTC,MAAM,EACNC,UAAU,EACVC,QAAQ,EACRC,SAAS,EACTC,aAAa,SAAS,EACtBC,MAAM,EACNC,qBAAO,qBAACC,0BAAY,KAAG,EACvBC,MAAM,EACNC,QAAQ,EAEU,WADfC;QAdHf;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAC;;IAGA,MAAM,CAACE,OAAOC,SAAS,GAAGC,OAAMC,QAAQ,CAAC;IACzC,MAAM,CAACC,OAAOC,SAAS,GAAGH,OAAMC,QAAQ,CAAC;IACzC,MAAMG,YAAYC,IAAAA,0BAAY,EAAClB;IAC/B,MAAM,EAAEmB,QAAQ,MAAM,EAAE,GAAGC,IAAAA,4BAAa;IAExC,MAAMC,sBAAsB;YACHJ;QAAvB,MAAMK,kBAAiBL,qBAAAA,UAAUM,OAAO,cAAjBN,yCAAAA,mBAAmBO,OAAO,CAACP,UAAUM,OAAO,CAACE,aAAa,CAAC;QAClF,IAAIH,gBAAgB;YAClBV,SAASU,eAAeI,IAAI;YAC5BV,SAASM,eAAeK,KAAK,KAAK,MAAM9B,eAAe;QACzD;IACF;IACA+B,IAAAA,oDAAyB,EAACP,qBAAqB;QAACvB;KAAS;IAEzD,qBACE,sBAAC+B,oBAAS;QACRC,WAAU;QACV/B,WAAWgC,IAAAA,gBAAU,gBAEnB,4BACAvB,mCACAO,8BACAZ,sCACAP,UAAU,wCACVA,UAAU,sCACVuB,UAAU,aAAa3B,eAAe,CAAC2B,MAAM,EAC7CpB;QAEFJ,OAAOA;QACPM,YAAYA;QACZC,UAAUA;QACVM,QAAQA;QACRwB,OAAO1B;QACPD,QAAQA;QACR4B,MAAMC,IAAAA,sCAA8B,EAAC9B;;0BAErC,sBAAC+B,sDACKzB;gBACJR,UAAUA;gBACVH,SAAS;gBACTU,UAAU2B,IAAAA,0BAAY,EAAC3B,UAAUY;gBACjCgB,KAAKpB;;oBAEJpB,6BAAe,qBAACyC;wBAAOX,OAAM;kCAAI9B;;oBACjCC;;;0BAEH,qBAACyC;gBAAIxC,SAAS;gBAA+ByC,aAAW;0BACtD,cAAA,qBAACC,kCAAgB;oBAAC1C,SAAS;oBAA2BK,YAAYA;8BAC/DO;;;;;AAKX"}
|
|
@@ -23,8 +23,8 @@ const _RootComponent = require("../RootComponent/RootComponent");
|
|
|
23
23
|
const _Touch = require("../Touch/Touch");
|
|
24
24
|
const sizeXClassNames = {
|
|
25
25
|
none: "vkuiPanel--sizeX-none",
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
compact: "vkuiPanel--sizeX-compact",
|
|
27
|
+
regular: "vkuiPanel--sizeX-regular"
|
|
28
28
|
};
|
|
29
29
|
const stylesMode = {
|
|
30
30
|
none: "vkuiPanel--mode-none",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Panel/Panel.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport type { SizeTypeValues } from '../../lib/adaptivity';\nimport type { NavIdProps } from '../../lib/getNavId';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AppRootContext } from '../AppRoot/AppRootContext';\nimport { NavPanelIdContext } from '../NavIdContext/NavIdContext';\nimport { OnboardingTooltipContainer } from '../OnboardingTooltip/OnboardingTooltipContainer';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Touch } from '../Touch/Touch';\nimport styles from './Panel.module.css';\n\nconst sizeXClassNames = {\n none: styles['Panel--sizeX-none'],\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Panel/Panel.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport type { SizeTypeValues } from '../../lib/adaptivity';\nimport type { NavIdProps } from '../../lib/getNavId';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AppRootContext } from '../AppRoot/AppRootContext';\nimport { NavPanelIdContext } from '../NavIdContext/NavIdContext';\nimport { OnboardingTooltipContainer } from '../OnboardingTooltip/OnboardingTooltipContainer';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Touch } from '../Touch/Touch';\nimport styles from './Panel.module.css';\n\nconst sizeXClassNames = {\n none: styles['Panel--sizeX-none'],\n compact: styles['Panel--sizeX-compact'],\n regular: styles['Panel--sizeX-regular'],\n};\n\nconst stylesMode = {\n none: styles['Panel--mode-none'],\n plain: styles['Panel--mode-plain'],\n card: styles['Panel--mode-card'],\n};\n\nexport interface PanelProps extends HTMLAttributesWithRootRef<HTMLDivElement>, NavIdProps {\n centered?: boolean;\n /**\n * Тип оформления панели.\n *\n * Позволяет переопределить тип оформления панели,\n * заданный через адаптивность или свойство layout у [AppRoot](https://vkcom.github.io/VKUI/#/AppRoot),\n * глобально задающим тип оформления макета.\n *\n * Если установлен `card` - Panel имеет фон отличный от фона контента.\n * Позволяет компоненту [Group](https://vkcom.github.io/VKUI/#/Group) со свойством mode='card' точечно выглядеть как карточка.\n * Тип `plain` — соответствует фону по умолчанию.\n */\n mode?: 'plain' | 'card';\n /**\n * Отключает задний фон\n */\n disableBackground?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Panel\n */\nexport const Panel = ({\n centered = false,\n children,\n nav,\n mode: modeProp,\n disableBackground,\n ...restProps\n}: PanelProps): React.ReactNode => {\n const { sizeX = 'none' } = useAdaptivity();\n\n const mode = usePanelMode(modeProp, sizeX);\n\n return (\n <NavPanelIdContext.Provider value={restProps.id || nav}>\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['Panel'],\n sizeXClassNames[sizeX],\n centered && 'vkuiInternalPanel--centered',\n disableBackground && styles['Panel--disableBackground'],\n stylesMode[mode],\n )}\n >\n <Touch\n Component={OnboardingTooltipContainer}\n className={classNames(styles['Panel__in'], 'vkuiInternalPanel__in')}\n >\n <div className={styles['Panel__in-before']} />\n {centered ? <div className={styles['Panel__centered']}>{children}</div> : children}\n <div className={styles['Panel__in-after']} />\n </Touch>\n </RootComponent>\n </NavPanelIdContext.Provider>\n );\n};\n\nfunction usePanelMode(\n modeProp: PanelProps['mode'],\n sizeX: SizeTypeValues | 'none',\n): 'plain' | 'card' | 'none' {\n const { layout } = React.useContext(AppRootContext);\n\n if (modeProp) {\n return modeProp;\n }\n\n if (layout) {\n return layout;\n }\n\n if (sizeX !== 'none') {\n return sizeX === 'regular' ? 'card' : 'plain';\n }\n\n return 'none';\n}\n"],"names":["Panel","sizeXClassNames","none","compact","regular","stylesMode","plain","card","centered","children","nav","mode","modeProp","disableBackground","restProps","sizeX","useAdaptivity","usePanelMode","NavPanelIdContext","Provider","value","id","RootComponent","baseClassName","classNames","Touch","Component","OnboardingTooltipContainer","className","div","layout","React","useContext","AppRootContext"],"mappings":";;;;+BAgDaA;;;eAAAA;;;;;;;;iEAhDU;sBACI;+BACG;gCAIC;8BACG;4CACS;+BACb;uBACR;AAGtB,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;IACPC,OAAO;AACT;AAEA,MAAMC,aAAa;IACjBH,IAAI;IACJI,KAAK;IACLC,IAAI;AACN;AAyBO,MAAMP,QAAQ;QAAC,EACpBQ,WAAW,KAAK,EAChBC,QAAQ,EACRC,GAAG,EACHC,MAAMC,QAAQ,EACdC,iBAAiB,EAEN,WADRC;QALHN;QACAC;QACAC;QACAC;QACAE;;IAGA,MAAM,EAAEE,QAAQ,MAAM,EAAE,GAAGC,IAAAA,4BAAa;IAExC,MAAML,OAAOM,aAAaL,UAAUG;IAEpC,qBACE,qBAACG,+BAAiB,CAACC,QAAQ;QAACC,OAAON,UAAUO,EAAE,IAAIX;kBACjD,cAAA,qBAACY,4BAAa,8CACRR;YACJS,eAAeC,IAAAA,gBAAU,eAEvBvB,eAAe,CAACc,MAAM,EACtBP,YAAY,+BACZK,qDACAR,UAAU,CAACM,KAAK;sBAGlB,cAAA,sBAACc,YAAK;gBACJC,WAAWC,sDAA0B;gBACrCC,WAAWJ,IAAAA,gBAAU,mBAAsB;;kCAE3C,qBAACK;wBAAID,SAAS;;oBACbpB,yBAAW,qBAACqB;wBAAID,SAAS;kCAA8BnB;yBAAkBA;kCAC1E,qBAACoB;wBAAID,SAAS;;;;;;AAKxB;AAEA,SAASX,aACPL,QAA4B,EAC5BG,KAA8B;IAE9B,MAAM,EAAEe,MAAM,EAAE,GAAGC,OAAMC,UAAU,CAACC,8BAAc;IAElD,IAAIrB,UAAU;QACZ,OAAOA;IACT;IAEA,IAAIkB,QAAQ;QACV,OAAOA;IACT;IAEA,IAAIf,UAAU,QAAQ;QACpB,OAAOA,UAAU,YAAY,SAAS;IACxC;IAEA,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelHeaderButton.d.ts","sourceRoot":"","sources":["../../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAWpE,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PanelHeaderButton.d.ts","sourceRoot":"","sources":["../../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAWpE,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB;AAsBD;;GAEG;AACH,eAAO,MAAM,iBAAiB,0DAM3B,sBAAsB,KAAG,KAAK,CAAC,SA6DjC,CAAC"}
|
|
@@ -84,7 +84,7 @@ const PanelHeaderButton = (_param)=>{
|
|
|
84
84
|
hoverMode: hoverMode,
|
|
85
85
|
activeEffectDelay: 200,
|
|
86
86
|
activeMode: activeMode,
|
|
87
|
-
className: (0, _vkjs.classNames)(
|
|
87
|
+
className: (0, _vkjs.classNames)("vkuiPanelHeaderButton", platformClassNames.hasOwnProperty(platform) ? platformClassNames[platform] : platformClassNames.android, isPrimitive && "vkuiPanelHeaderButton--primitive", !isPrimitive && !isPrimitiveLabel && "vkuiPanelHeaderButton--notPrimitive", className),
|
|
88
88
|
children: [
|
|
89
89
|
isPrimitive ? /*#__PURE__*/ (0, _jsxruntime.jsx)(ButtonTypography, {
|
|
90
90
|
primary: primary,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, isPrimitiveReactNode } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { hasAccessibleName } from '../../lib/accessibility';\nimport { COMMON_WARNINGS, warnOnce } from '../../lib/warnOnce';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Text } from '../Typography/Text/Text';\nimport { Title } from '../Typography/Title/Title';\nimport styles from './PanelHeaderButton.module.css';\n\nconst platformClassNames = {\n ios: styles['PanelHeaderButton--ios'],\n android: styles['PanelHeaderButton--android'],\n vkcom: styles['PanelHeaderButton--vkcom'],\n};\n\nexport interface PanelHeaderButtonProps extends Omit<TappableProps, 'label'> {\n primary?: boolean;\n label?: React.ReactNode;\n}\n\ninterface ButtonTypographyProps extends React.AllHTMLAttributes<HTMLElement> {\n primary?: PanelHeaderButtonProps['primary'];\n}\n\nconst ButtonTypography = ({ primary, children }: ButtonTypographyProps) => {\n const platform = usePlatform();\n\n if (platform === 'ios') {\n return (\n <Title Component=\"span\" level=\"3\" weight={primary ? '1' : '3'}>\n {children}\n </Title>\n );\n }\n\n return <Text weight={platform === 'vkcom' ? undefined : '2'}>{children}</Text>;\n};\n\nconst warn = warnOnce('PanelHeaderButton');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderButton\n */\nexport const PanelHeaderButton = ({\n children,\n primary = false,\n label,\n className,\n ...restProps\n}: PanelHeaderButtonProps): React.ReactNode => {\n const isPrimitive = isPrimitiveReactNode(children);\n const isPrimitiveLabel = isPrimitiveReactNode(label);\n const platform = usePlatform();\n\n let hoverMode;\n let activeMode;\n\n switch (platform) {\n case 'ios':\n hoverMode = 'background';\n activeMode = 'opacity';\n break;\n case 'vkcom':\n hoverMode = styles['PanelHeaderButton--hover'];\n activeMode = styles['PanelHeaderButton--active'];\n break;\n default:\n hoverMode = 'background';\n activeMode = 'background';\n }\n\n if (process.env.NODE_ENV === 'development') {\n /* istanbul ignore next: проверка в dev mode, тест на hasAccessibleName() есть в lib/accessibility.test.tsx */\n const isAccessible = hasAccessibleName({\n children: [children, label],\n ...restProps,\n });\n\n if (!isAccessible) {\n warn(COMMON_WARNINGS.a11y[restProps.href ? 'link-name' : 'button-name'], 'error');\n }\n }\n\n return (\n <Tappable\n Component={restProps.href ? 'a' : 'button'}\n {...restProps}\n hoverMode={hoverMode}\n activeEffectDelay={200}\n activeMode={activeMode}\n className={classNames(\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, isPrimitiveReactNode } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { hasAccessibleName } from '../../lib/accessibility';\nimport { COMMON_WARNINGS, warnOnce } from '../../lib/warnOnce';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Text } from '../Typography/Text/Text';\nimport { Title } from '../Typography/Title/Title';\nimport styles from './PanelHeaderButton.module.css';\n\nconst platformClassNames = {\n ios: styles['PanelHeaderButton--ios'],\n android: styles['PanelHeaderButton--android'],\n vkcom: styles['PanelHeaderButton--vkcom'],\n};\n\nexport interface PanelHeaderButtonProps extends Omit<TappableProps, 'label'> {\n primary?: boolean;\n // TODO [>=7]: добавить св-во `indicator`, чтобы разграничить кейсы\n label?: React.ReactNode;\n}\n\ninterface ButtonTypographyProps extends React.AllHTMLAttributes<HTMLElement> {\n primary?: PanelHeaderButtonProps['primary'];\n}\n\nconst ButtonTypography = ({ primary, children }: ButtonTypographyProps) => {\n const platform = usePlatform();\n\n if (platform === 'ios') {\n return (\n <Title Component=\"span\" level=\"3\" weight={primary ? '1' : '3'}>\n {children}\n </Title>\n );\n }\n\n return <Text weight={platform === 'vkcom' ? undefined : '2'}>{children}</Text>;\n};\n\nconst warn = warnOnce('PanelHeaderButton');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderButton\n */\nexport const PanelHeaderButton = ({\n children,\n primary = false,\n label,\n className,\n ...restProps\n}: PanelHeaderButtonProps): React.ReactNode => {\n const isPrimitive = isPrimitiveReactNode(children);\n const isPrimitiveLabel = isPrimitiveReactNode(label);\n const platform = usePlatform();\n\n let hoverMode;\n let activeMode;\n\n switch (platform) {\n case 'ios':\n hoverMode = 'background';\n activeMode = 'opacity';\n break;\n case 'vkcom':\n hoverMode = styles['PanelHeaderButton--hover'];\n activeMode = styles['PanelHeaderButton--active'];\n break;\n default:\n hoverMode = 'background';\n activeMode = 'background';\n }\n\n if (process.env.NODE_ENV === 'development') {\n /* istanbul ignore next: проверка в dev mode, тест на hasAccessibleName() есть в lib/accessibility.test.tsx */\n const isAccessible = hasAccessibleName({\n children: [children, label],\n ...restProps,\n });\n\n if (!isAccessible) {\n warn(COMMON_WARNINGS.a11y[restProps.href ? 'link-name' : 'button-name'], 'error');\n }\n }\n\n return (\n <Tappable\n Component={restProps.href ? 'a' : 'button'}\n {...restProps}\n hoverMode={hoverMode}\n activeEffectDelay={200}\n activeMode={activeMode}\n className={classNames(\n styles['PanelHeaderButton'],\n platformClassNames.hasOwnProperty(platform)\n ? platformClassNames[platform]\n : platformClassNames.android,\n isPrimitive && styles['PanelHeaderButton--primitive'],\n !isPrimitive && !isPrimitiveLabel && styles['PanelHeaderButton--notPrimitive'],\n className,\n )}\n >\n {isPrimitive ? <ButtonTypography primary={primary}>{children}</ButtonTypography> : children}\n {isPrimitiveLabel ? (\n <ButtonTypography primary={primary} className={styles['PanelHeaderButton__label']}>\n {label}\n </ButtonTypography>\n ) : (\n label\n )}\n </Tappable>\n );\n};\n"],"names":["PanelHeaderButton","platformClassNames","ios","android","vkcom","ButtonTypography","primary","children","platform","usePlatform","Title","Component","level","weight","Text","undefined","warn","warnOnce","label","className","restProps","isPrimitive","isPrimitiveReactNode","isPrimitiveLabel","hoverMode","activeMode","process","env","NODE_ENV","isAccessible","hasAccessibleName","COMMON_WARNINGS","a11y","href","Tappable","activeEffectDelay","classNames","hasOwnProperty"],"mappings":";;;;+BA6CaA;;;eAAAA;;;;;;;;iEA7CU;sBAC0B;6BACrB;+BACM;0BACQ;0BACG;sBACxB;uBACC;AAGtB,MAAMC,qBAAqB;IACzBC,GAAG;IACHC,OAAO;IACPC,KAAK;AACP;AAYA,MAAMC,mBAAmB,CAAC,EAAEC,OAAO,EAAEC,QAAQ,EAAyB;IACpE,MAAMC,WAAWC,IAAAA,wBAAW;IAE5B,IAAID,aAAa,OAAO;QACtB,qBACE,qBAACE,YAAK;YAACC,WAAU;YAAOC,OAAM;YAAIC,QAAQP,UAAU,MAAM;sBACvDC;;IAGP;IAEA,qBAAO,qBAACO,UAAI;QAACD,QAAQL,aAAa,UAAUO,YAAY;kBAAMR;;AAChE;AAEA,MAAMS,OAAOC,IAAAA,kBAAQ,EAAC;AAKf,MAAMjB,oBAAoB;QAAC,EAChCO,QAAQ,EACRD,UAAU,KAAK,EACfY,KAAK,EACLC,SAAS,EAEc,WADpBC;QAJHb;QACAD;QACAY;QACAC;;IAGA,MAAME,cAAcC,IAAAA,0BAAoB,EAACf;IACzC,MAAMgB,mBAAmBD,IAAAA,0BAAoB,EAACJ;IAC9C,MAAMV,WAAWC,IAAAA,wBAAW;IAE5B,IAAIe;IACJ,IAAIC;IAEJ,OAAQjB;QACN,KAAK;YACHgB,YAAY;YACZC,aAAa;YACb;QACF,KAAK;YACHD;YACAC;YACA;QACF;YACED,YAAY;YACZC,aAAa;IACjB;IAEA,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,4GAA4G,GAC5G,MAAMC,eAAeC,IAAAA,gCAAiB,EAAC;YACrCvB,UAAU;gBAACA;gBAAUW;aAAM;WACxBE;QAGL,IAAI,CAACS,cAAc;YACjBb,KAAKe,yBAAe,CAACC,IAAI,CAACZ,UAAUa,IAAI,GAAG,cAAc,cAAc,EAAE;QAC3E;IACF;IAEA,qBACE,sBAACC,kBAAQ;QACPvB,WAAWS,UAAUa,IAAI,GAAG,MAAM;OAC9Bb;QACJI,WAAWA;QACXW,mBAAmB;QACnBV,YAAYA;QACZN,WAAWiB,IAAAA,gBAAU,2BAEnBnC,mBAAmBoC,cAAc,CAAC7B,YAC9BP,kBAAkB,CAACO,SAAS,GAC5BP,mBAAmBE,OAAO,EAC9BkB,mDACA,CAACA,eAAe,CAACE,2DACjBJ;;YAGDE,4BAAc,qBAAChB;gBAAiBC,SAASA;0BAAUC;iBAA+BA;YAClFgB,iCACC,qBAAClB;gBAAiBC,SAASA;gBAASa,SAAS;0BAC1CD;iBAGHA;;;AAIR"}
|
|
@@ -21,7 +21,7 @@ const _Subhead = require("../Typography/Subhead/Subhead");
|
|
|
21
21
|
const _RichCellIcon = require("./RichCellIcon/RichCellIcon");
|
|
22
22
|
const sizeYClassNames = {
|
|
23
23
|
none: "vkuiRichCell--sizeY-none",
|
|
24
|
-
|
|
24
|
+
compact: "vkuiRichCell--sizeY-compact"
|
|
25
25
|
};
|
|
26
26
|
const alignAfterClassNames = {
|
|
27
27
|
start: "vkuiRichCell__content-after--align-start",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/RichCell/RichCell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { RichCellIcon } from './RichCellIcon/RichCellIcon';\nimport styles from './RichCell.module.css';\n\nconst sizeYClassNames = {\n none: styles['RichCell--sizeY-none'],\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/RichCell/RichCell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { RichCellIcon } from './RichCellIcon/RichCellIcon';\nimport styles from './RichCell.module.css';\n\nconst sizeYClassNames = {\n none: styles['RichCell--sizeY-none'],\n compact: styles['RichCell--sizeY-compact'],\n};\n\nconst alignAfterClassNames = {\n start: styles['RichCell__content-after--align-start'],\n center: styles['RichCell__content-after--align-center'],\n end: styles['RichCell__content-after--align-end'],\n};\n\nexport interface RichCellProps extends TappableProps {\n /**\n * Контейнер для текста над `children`.\n */\n subhead?: React.ReactNode;\n /**\n * Контейнер для текста под `children`.\n */\n text?: React.ReactNode;\n /**\n * Контейнер для текста под `text`.\n */\n caption?: React.ReactNode;\n /**\n * Контейнер для контента под `caption`. Например `<UsersStack size=\"m\" />`.\n */\n bottom?: React.ReactNode;\n /**\n * Кнопки-действия. Принимает [`Button`](https://vkcom.github.io/VKUI/#/Button) с параметрами:\n *\n * - `mode=\"primary\" size=\"s\"`\n * - `mode=\"secondary\" size=\"s\"`\n *\n * Для набора кнопок используйте [`ButtonGroup`](https://vkcom.github.io/VKUI/#/ButtonGroup) с параметрами:\n *\n * - `mode=\"horizontal\" gap=\"s\" stretched`\n */\n actions?: React.ReactNode;\n /**\n * `<Avatar size={40|48|72} />`.\n */\n before?: React.ReactNode;\n /**\n * Иконка 28 или текст.\n */\n after?: React.ReactNode;\n /**\n * Текст под `after`.\n */\n afterCaption?: React.ReactNode;\n /**\n * Выравнивание after компонента по вертикали\n */\n afterAlign?: 'start' | 'center' | 'end';\n /**\n * Убирает анимацию нажатия.\n */\n disabled?: boolean;\n /**\n * Включает многострочный режим для `subhead`, `children`, `text` и `caption`.\n */\n multiline?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/RichCell\n */\nexport const RichCell: React.FC<RichCellProps> & {\n Icon: typeof RichCellIcon;\n} = ({\n subhead,\n children,\n text,\n caption,\n before,\n after,\n afterCaption,\n bottom,\n actions,\n multiline,\n className,\n afterAlign = 'start',\n ...restProps\n}: RichCellProps) => {\n const { sizeY = 'none' } = useAdaptivity();\n\n const afterRender = () => {\n if (!after && !afterCaption) {\n return;\n }\n return (\n <div\n className={classNames(styles['RichCell__content-after'], alignAfterClassNames[afterAlign])}\n >\n {after && <div className={styles['RichCell__after-children']}>{after}</div>}\n {afterCaption && <div className={styles['RichCell__after-caption']}>{afterCaption}</div>}\n </div>\n );\n };\n\n return (\n <Tappable\n {...restProps}\n className={classNames(\n styles['RichCell'],\n !multiline && styles['RichCell--text-ellipsis'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n >\n {before && <div className={styles['RichCell__before']}>{before}</div>}\n <div className={styles['RichCell__in']}>\n <div className={styles['RichCell__content']}>\n <div className={styles['RichCell__content-before']}>\n {subhead && (\n <Subhead Component=\"div\" className={styles['RichCell__subhead']}>\n {subhead}\n </Subhead>\n )}\n <div className={styles['RichCell__children']}>{children}</div>\n {text && <div className={styles['RichCell__text']}>{text}</div>}\n {caption && (\n <Subhead Component=\"div\" className={styles['RichCell__caption']}>\n {caption}\n </Subhead>\n )}\n </div>\n {afterAlign === 'start' && afterRender()}\n </div>\n {bottom && <div className={styles['RichCell__bottom']}>{bottom}</div>}\n {actions && <div className={styles['RichCell__actions']}>{actions}</div>}\n </div>\n {afterAlign !== 'start' && afterRender()}\n </Tappable>\n );\n};\n\nRichCell.Icon = RichCellIcon;\n"],"names":["RichCell","sizeYClassNames","none","compact","alignAfterClassNames","start","center","end","subhead","children","text","caption","before","after","afterCaption","bottom","actions","multiline","className","afterAlign","restProps","sizeY","useAdaptivity","afterRender","div","classNames","Tappable","Subhead","Component","Icon","RichCellIcon"],"mappings":";;;;+BA4EaA;;;eAAAA;;;;;;;;iEA5EU;sBACI;+BACG;0BACe;yBACrB;8BACK;AAG7B,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAEA,MAAMC,uBAAuB;IAC3BC,KAAK;IACLC,MAAM;IACNC,GAAG;AACL;AA2DO,MAAMP,WAET;QAAC,EACHQ,OAAO,EACPC,QAAQ,EACRC,IAAI,EACJC,OAAO,EACPC,MAAM,EACNC,KAAK,EACLC,YAAY,EACZC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,SAAS,EACTC,aAAa,OAAO,EAEN,WADXC;QAZHZ;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAM,EAAEE,QAAQ,MAAM,EAAE,GAAGC,IAAAA,4BAAa;IAExC,MAAMC,cAAc;QAClB,IAAI,CAACV,SAAS,CAACC,cAAc;YAC3B;QACF;QACA,qBACE,sBAACU;YACCN,WAAWO,IAAAA,gBAAU,iCAAoCrB,oBAAoB,CAACe,WAAW;;gBAExFN,uBAAS,qBAACW;oBAAIN,SAAS;8BAAuCL;;gBAC9DC,8BAAgB,qBAACU;oBAAIN,SAAS;8BAAsCJ;;;;IAG3E;IAEA,qBACE,sBAACY,kBAAQ,8CACHN;QACJF,WAAWO,IAAAA,gBAAU,kBAEnB,CAACR,4CACDI,UAAU,aAAapB,eAAe,CAACoB,MAAM,EAC7CH;;YAGDN,wBAAU,qBAACY;gBAAIN,SAAS;0BAA+BN;;0BACxD,sBAACY;gBAAIN,SAAS;;kCACZ,sBAACM;wBAAIN,SAAS;;0CACZ,sBAACM;gCAAIN,SAAS;;oCACXV,yBACC,qBAACmB,gBAAO;wCAACC,WAAU;wCAAMV,SAAS;kDAC/BV;;kDAGL,qBAACgB;wCAAIN,SAAS;kDAAiCT;;oCAC9CC,sBAAQ,qBAACc;wCAAIN,SAAS;kDAA6BR;;oCACnDC,yBACC,qBAACgB,gBAAO;wCAACC,WAAU;wCAAMV,SAAS;kDAC/BP;;;;4BAINQ,eAAe,WAAWI;;;oBAE5BR,wBAAU,qBAACS;wBAAIN,SAAS;kCAA+BH;;oBACvDC,yBAAW,qBAACQ;wBAAIN,SAAS;kCAAgCF;;;;YAE3DG,eAAe,WAAWI;;;AAGjC;AAEAvB,SAAS6B,IAAI,GAAGC,0BAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScreenSpinner.d.ts","sourceRoot":"","sources":["../../../../src/components/ScreenSpinner/ScreenSpinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEnC;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG;IACzD,SAAS,EAAE,OAAO,sBAAsB,CAAC;IACzC,MAAM,EAAE,OAAO,mBAAmB,CAAC;IACnC,QAAQ,EAAE,OAAO,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"ScreenSpinner.d.ts","sourceRoot":"","sources":["../../../../src/components/ScreenSpinner/ScreenSpinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEnC;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG;IACzD,SAAS,EAAE,OAAO,sBAAsB,CAAC;IACzC,MAAM,EAAE,OAAO,mBAAmB,CAAC;IACnC,QAAQ,EAAE,OAAO,qBAAqB,CAAC;CAqBxC,CAAC"}
|
|
@@ -19,13 +19,14 @@ const _ScreenSpinnerContainer = require("./ScreenSpinnerContainer");
|
|
|
19
19
|
const _ScreenSpinnerLoader = require("./ScreenSpinnerLoader");
|
|
20
20
|
const _ScreenSpinnerSwapIcon = require("./ScreenSpinnerSwapIcon");
|
|
21
21
|
const ScreenSpinner = (_param)=>{
|
|
22
|
-
var { style, className, state = 'loading', onClick, cancelLabel, mode } = _param, restProps = _object_without_properties._(_param, [
|
|
22
|
+
var { style, className, state = 'loading', onClick, cancelLabel, mode, caption } = _param, restProps = _object_without_properties._(_param, [
|
|
23
23
|
"style",
|
|
24
24
|
"className",
|
|
25
25
|
"state",
|
|
26
26
|
"onClick",
|
|
27
27
|
"cancelLabel",
|
|
28
|
-
"mode"
|
|
28
|
+
"mode",
|
|
29
|
+
"caption"
|
|
29
30
|
]);
|
|
30
31
|
(0, _ScrollContext.useScrollLock)();
|
|
31
32
|
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_PopoutWrapper.PopoutWrapper, {
|
|
@@ -35,6 +36,7 @@ const ScreenSpinner = (_param)=>{
|
|
|
35
36
|
children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_ScreenSpinnerContainer.ScreenSpinnerContainer, {
|
|
36
37
|
state: state,
|
|
37
38
|
mode: mode,
|
|
39
|
+
caption: caption,
|
|
38
40
|
children: [
|
|
39
41
|
/*#__PURE__*/ (0, _jsxruntime.jsx)(_ScreenSpinnerLoader.ScreenSpinnerLoader, _object_spread._({}, restProps)),
|
|
40
42
|
/*#__PURE__*/ (0, _jsxruntime.jsx)(_ScreenSpinnerSwapIcon.ScreenSpinnerSwapIcon, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ScreenSpinner/ScreenSpinner.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { ScreenSpinnerContainer } from './ScreenSpinnerContainer';\nimport { ScreenSpinnerLoader } from './ScreenSpinnerLoader';\nimport { ScreenSpinnerSwapIcon } from './ScreenSpinnerSwapIcon';\nimport type { ScreenSpinnerProps } from './types';\n\nexport type { ScreenSpinnerProps };\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ScreenSpinner\n */\nexport const ScreenSpinner: React.FC<ScreenSpinnerProps> & {\n Container: typeof ScreenSpinnerContainer;\n Loader: typeof ScreenSpinnerLoader;\n SwapIcon: typeof ScreenSpinnerSwapIcon;\n} = ({\n style,\n className,\n state = 'loading',\n onClick,\n cancelLabel,\n mode,\n ...restProps\n}: ScreenSpinnerProps): React.ReactNode => {\n useScrollLock();\n\n return (\n <PopoutWrapper className={className} style={style} noBackground>\n <ScreenSpinnerContainer state={state} mode={mode}>\n <ScreenSpinnerLoader {...restProps} />\n <ScreenSpinnerSwapIcon onClick={onClick} cancelLabel={cancelLabel} />\n </ScreenSpinnerContainer>\n </PopoutWrapper>\n );\n};\n\nScreenSpinner.displayName = 'ScreenSpinner';\n\nScreenSpinner.Container = ScreenSpinnerContainer;\nScreenSpinner.Container.displayName = 'ScreenSpinner.Container';\n\nScreenSpinner.Loader = ScreenSpinnerLoader;\nScreenSpinner.Loader.displayName = 'ScreenSpinner.Loader';\n\nScreenSpinner.SwapIcon = ScreenSpinnerSwapIcon;\nScreenSpinner.SwapIcon.displayName = 'ScreenSpinner.SwapIcon';\n"],"names":["ScreenSpinner","style","className","state","onClick","cancelLabel","mode","restProps","useScrollLock","PopoutWrapper","noBackground","ScreenSpinnerContainer","ScreenSpinnerLoader","ScreenSpinnerSwapIcon","displayName","Container","Loader","SwapIcon"],"mappings":";;;;+BAaaA;;;eAAAA;;;;;;;iEAbU;+BACO;+BACA;wCACS;qCACH;uCACE;AAQ/B,MAAMA,gBAIT;QAAC,EACHC,KAAK,EACLC,SAAS,EACTC,QAAQ,SAAS,EACjBC,OAAO,EACPC,WAAW,EACXC,IAAI,
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ScreenSpinner/ScreenSpinner.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { ScreenSpinnerContainer } from './ScreenSpinnerContainer';\nimport { ScreenSpinnerLoader } from './ScreenSpinnerLoader';\nimport { ScreenSpinnerSwapIcon } from './ScreenSpinnerSwapIcon';\nimport type { ScreenSpinnerProps } from './types';\n\nexport type { ScreenSpinnerProps };\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ScreenSpinner\n */\nexport const ScreenSpinner: React.FC<ScreenSpinnerProps> & {\n Container: typeof ScreenSpinnerContainer;\n Loader: typeof ScreenSpinnerLoader;\n SwapIcon: typeof ScreenSpinnerSwapIcon;\n} = ({\n style,\n className,\n state = 'loading',\n onClick,\n cancelLabel,\n mode,\n caption,\n ...restProps\n}: ScreenSpinnerProps): React.ReactNode => {\n useScrollLock();\n\n return (\n <PopoutWrapper className={className} style={style} noBackground>\n <ScreenSpinnerContainer state={state} mode={mode} caption={caption}>\n <ScreenSpinnerLoader {...restProps} />\n <ScreenSpinnerSwapIcon onClick={onClick} cancelLabel={cancelLabel} />\n </ScreenSpinnerContainer>\n </PopoutWrapper>\n );\n};\n\nScreenSpinner.displayName = 'ScreenSpinner';\n\nScreenSpinner.Container = ScreenSpinnerContainer;\nScreenSpinner.Container.displayName = 'ScreenSpinner.Container';\n\nScreenSpinner.Loader = ScreenSpinnerLoader;\nScreenSpinner.Loader.displayName = 'ScreenSpinner.Loader';\n\nScreenSpinner.SwapIcon = ScreenSpinnerSwapIcon;\nScreenSpinner.SwapIcon.displayName = 'ScreenSpinner.SwapIcon';\n"],"names":["ScreenSpinner","style","className","state","onClick","cancelLabel","mode","caption","restProps","useScrollLock","PopoutWrapper","noBackground","ScreenSpinnerContainer","ScreenSpinnerLoader","ScreenSpinnerSwapIcon","displayName","Container","Loader","SwapIcon"],"mappings":";;;;+BAaaA;;;eAAAA;;;;;;;iEAbU;+BACO;+BACA;wCACS;qCACH;uCACE;AAQ/B,MAAMA,gBAIT;QAAC,EACHC,KAAK,EACLC,SAAS,EACTC,QAAQ,SAAS,EACjBC,OAAO,EACPC,WAAW,EACXC,IAAI,EACJC,OAAO,EAEY,WADhBC;QAPHP;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGAE,IAAAA,4BAAa;IAEb,qBACE,qBAACC,4BAAa;QAACR,WAAWA;QAAWD,OAAOA;QAAOU,YAAY;kBAC7D,cAAA,sBAACC,8CAAsB;YAACT,OAAOA;YAAOG,MAAMA;YAAMC,SAASA;;8BACzD,qBAACM,wCAAmB,uBAAKL;8BACzB,qBAACM,4CAAqB;oBAACV,SAASA;oBAASC,aAAaA;;;;;AAI9D;AAEAL,cAAce,WAAW,GAAG;AAE5Bf,cAAcgB,SAAS,GAAGJ,8CAAsB;AAChDZ,cAAcgB,SAAS,CAACD,WAAW,GAAG;AAEtCf,cAAciB,MAAM,GAAGJ,wCAAmB;AAC1Cb,cAAciB,MAAM,CAACF,WAAW,GAAG;AAEnCf,cAAckB,QAAQ,GAAGJ,4CAAqB;AAC9Cd,cAAckB,QAAQ,CAACH,WAAW,GAAG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import type { HTMLAttributesWithRootRef } from '../../types';
|
|
3
3
|
import { type ScreenSpinnerProps } from './types';
|
|
4
|
-
type ScreenSpinnerContainerProps = HTMLAttributesWithRootRef<HTMLSpanElement> & Pick<ScreenSpinnerProps, 'state' | 'mode'>;
|
|
4
|
+
type ScreenSpinnerContainerProps = HTMLAttributesWithRootRef<HTMLSpanElement> & Pick<ScreenSpinnerProps, 'state' | 'mode' | 'caption'>;
|
|
5
5
|
export declare const ScreenSpinnerContainer: React.FC<ScreenSpinnerContainerProps>;
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=ScreenSpinnerContainer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScreenSpinnerContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/ScreenSpinner/ScreenSpinnerContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ScreenSpinnerContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/ScreenSpinner/ScreenSpinnerContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAI7D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAclD,KAAK,2BAA2B,GAAG,yBAAyB,CAAC,eAAe,CAAC,GAC3E,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AAEzD,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CA2BxE,CAAC"}
|