@skbkontur/react-ui 4.21.2 → 4.21.4
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/CHANGELOG.md +23 -0
- package/cjs/components/Autocomplete/Autocomplete.d.ts +1 -0
- package/cjs/components/Autocomplete/Autocomplete.js +2 -1
- package/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
- package/cjs/components/Button/Button.d.ts +1 -0
- package/cjs/components/Button/Button.js +2 -1
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Calendar/Calendar.d.ts +1 -0
- package/cjs/components/Calendar/Calendar.js +2 -1
- package/cjs/components/Calendar/Calendar.js.map +1 -1
- package/cjs/components/Calendar/DayCellView.js +8 -5
- package/cjs/components/Calendar/DayCellView.js.map +1 -1
- package/cjs/components/Center/Center.d.ts +1 -0
- package/cjs/components/Center/Center.js +2 -1
- package/cjs/components/Center/Center.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.d.ts +1 -0
- package/cjs/components/Checkbox/Checkbox.js +2 -1
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/ComboBox/ComboBox.d.ts +1 -0
- package/cjs/components/ComboBox/ComboBox.js +2 -1
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/CurrencyInput/CurrencyInput.d.ts +1 -0
- package/cjs/components/CurrencyInput/CurrencyInput.js +2 -1
- package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
- package/cjs/components/CurrencyLabel/CurrencyLabel.d.ts +1 -0
- package/cjs/components/CurrencyLabel/CurrencyLabel.js +1 -0
- package/cjs/components/CurrencyLabel/CurrencyLabel.js.map +1 -1
- package/cjs/components/DateInput/DateInput.d.ts +1 -0
- package/cjs/components/DateInput/DateInput.js +2 -1
- package/cjs/components/DateInput/DateInput.js.map +1 -1
- package/cjs/components/DatePicker/DatePicker.d.ts +1 -0
- package/cjs/components/DatePicker/DatePicker.js +2 -1
- package/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/cjs/components/DatePicker/Picker.d.ts +1 -0
- package/cjs/components/DatePicker/Picker.js +2 -1
- package/cjs/components/DatePicker/Picker.js.map +1 -1
- package/cjs/components/Dropdown/Dropdown.d.ts +1 -0
- package/cjs/components/Dropdown/Dropdown.js +2 -1
- package/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/cjs/components/DropdownMenu/DropdownMenu.d.ts +1 -0
- package/cjs/components/DropdownMenu/DropdownMenu.js +2 -1
- package/cjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/cjs/components/FileUploader/FileUploader.js +2 -1
- package/cjs/components/FileUploader/FileUploader.js.map +1 -1
- package/cjs/components/FxInput/FxInput.d.ts +1 -0
- package/cjs/components/FxInput/FxInput.js +2 -1
- package/cjs/components/FxInput/FxInput.js.map +1 -1
- package/cjs/components/Gapped/Gapped.d.ts +1 -0
- package/cjs/components/Gapped/Gapped.js +2 -1
- package/cjs/components/Gapped/Gapped.js.map +1 -1
- package/cjs/components/GlobalLoader/GlobalLoader.d.ts +2 -0
- package/cjs/components/GlobalLoader/GlobalLoader.js +4 -1
- package/cjs/components/GlobalLoader/GlobalLoader.js.map +1 -1
- package/cjs/components/Group/Group.d.ts +1 -0
- package/cjs/components/Group/Group.js +3 -1
- package/cjs/components/Group/Group.js.map +1 -1
- package/cjs/components/Hint/Hint.d.ts +1 -0
- package/cjs/components/Hint/Hint.js +2 -1
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +1 -0
- package/cjs/components/Input/Input.js +2 -1
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Kebab/Kebab.d.ts +1 -0
- package/cjs/components/Kebab/Kebab.js +2 -1
- package/cjs/components/Kebab/Kebab.js.map +1 -1
- package/cjs/components/Link/Link.d.ts +1 -0
- package/cjs/components/Link/Link.js +2 -1
- package/cjs/components/Link/Link.js.map +1 -1
- package/cjs/components/Loader/Loader.d.ts +1 -0
- package/cjs/components/Loader/Loader.js +2 -1
- package/cjs/components/Loader/Loader.js.map +1 -1
- package/cjs/components/MenuFooter/MenuFooter.d.ts +1 -0
- package/cjs/components/MenuFooter/MenuFooter.js +1 -0
- package/cjs/components/MenuFooter/MenuFooter.js.map +1 -1
- package/cjs/components/MenuHeader/MenuHeader.d.ts +1 -0
- package/cjs/components/MenuHeader/MenuHeader.js +1 -0
- package/cjs/components/MenuHeader/MenuHeader.js.map +1 -1
- package/cjs/components/MenuItem/MenuItem.d.ts +4 -0
- package/cjs/components/MenuItem/MenuItem.js +29 -10
- package/cjs/components/MenuItem/MenuItem.js.map +1 -1
- package/cjs/components/MenuSeparator/MenuSeparator.d.ts +1 -0
- package/cjs/components/MenuSeparator/MenuSeparator.js +2 -1
- package/cjs/components/MenuSeparator/MenuSeparator.js.map +1 -1
- package/cjs/components/MiniModal/MiniModal.js +0 -2
- package/cjs/components/MiniModal/MiniModal.js.map +1 -1
- package/cjs/components/Modal/Modal.d.ts +1 -0
- package/cjs/components/Modal/Modal.js +2 -1
- package/cjs/components/Modal/Modal.js.map +1 -1
- package/cjs/components/Modal/ModalBody.d.ts +1 -0
- package/cjs/components/Modal/ModalBody.js +2 -1
- package/cjs/components/Modal/ModalBody.js.map +1 -1
- package/cjs/components/Modal/ModalClose.d.ts +4 -0
- package/cjs/components/Modal/ModalClose.js +4 -1
- package/cjs/components/Modal/ModalClose.js.map +1 -1
- package/cjs/components/Modal/ModalFooter.d.ts +1 -0
- package/cjs/components/Modal/ModalFooter.js +1 -0
- package/cjs/components/Modal/ModalFooter.js.map +1 -1
- package/cjs/components/Modal/ModalHeader.d.ts +1 -0
- package/cjs/components/Modal/ModalHeader.js +1 -0
- package/cjs/components/Modal/ModalHeader.js.map +1 -1
- package/cjs/components/Modal/ModalSeparator.d.ts +4 -0
- package/cjs/components/Modal/ModalSeparator.js +4 -1
- package/cjs/components/Modal/ModalSeparator.js.map +1 -1
- package/cjs/components/Paging/Paging.d.ts +1 -0
- package/cjs/components/Paging/Paging.js +10 -6
- package/cjs/components/Paging/Paging.js.map +1 -1
- package/cjs/components/PasswordInput/PasswordInput.d.ts +1 -0
- package/cjs/components/PasswordInput/PasswordInput.js +2 -1
- package/cjs/components/PasswordInput/PasswordInput.js.map +1 -1
- package/cjs/components/Radio/Radio.d.ts +1 -0
- package/cjs/components/Radio/Radio.js +2 -1
- package/cjs/components/Radio/Radio.js.map +1 -1
- package/cjs/components/RadioGroup/RadioGroup.d.ts +1 -0
- package/cjs/components/RadioGroup/RadioGroup.js +2 -1
- package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
- package/cjs/components/ResponsiveLayout/ResponsiveLayout.d.ts +4 -0
- package/cjs/components/ResponsiveLayout/ResponsiveLayout.js +4 -1
- package/cjs/components/ResponsiveLayout/ResponsiveLayout.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -0
- package/cjs/components/ScrollContainer/ScrollContainer.js +2 -1
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/cjs/components/Select/Item.d.ts +1 -0
- package/cjs/components/Select/Item.js +2 -1
- package/cjs/components/Select/Item.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +2 -0
- package/cjs/components/Select/Select.js +5 -2
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePage.d.ts +1 -0
- package/cjs/components/SidePage/SidePage.js +2 -1
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/components/SidePage/SidePageBody.d.ts +1 -0
- package/cjs/components/SidePage/SidePageBody.js +2 -1
- package/cjs/components/SidePage/SidePageBody.js.map +1 -1
- package/cjs/components/SidePage/SidePageCloseButton.d.ts +5 -1
- package/cjs/components/SidePage/SidePageCloseButton.js +4 -1
- package/cjs/components/SidePage/SidePageCloseButton.js.map +1 -1
- package/cjs/components/SidePage/SidePageContainer.d.ts +1 -0
- package/cjs/components/SidePage/SidePageContainer.js +2 -1
- package/cjs/components/SidePage/SidePageContainer.js.map +1 -1
- package/cjs/components/SidePage/SidePageFooter.d.ts +1 -0
- package/cjs/components/SidePage/SidePageFooter.js +2 -1
- package/cjs/components/SidePage/SidePageFooter.js.map +1 -1
- package/cjs/components/SidePage/SidePageHeader.d.ts +1 -0
- package/cjs/components/SidePage/SidePageHeader.js +2 -1
- package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
- package/cjs/components/SingleToast/SingleToast.d.ts +2 -0
- package/cjs/components/SingleToast/SingleToast.js +4 -1
- package/cjs/components/SingleToast/SingleToast.js.map +1 -1
- package/cjs/components/Spinner/Spinner.d.ts +1 -0
- package/cjs/components/Spinner/Spinner.js +2 -1
- package/cjs/components/Spinner/Spinner.js.map +1 -1
- package/cjs/components/Sticky/Sticky.d.ts +1 -0
- package/cjs/components/Sticky/Sticky.js +2 -1
- package/cjs/components/Sticky/Sticky.js.map +1 -1
- package/cjs/components/Switcher/Switcher.d.ts +1 -0
- package/cjs/components/Switcher/Switcher.js +2 -1
- package/cjs/components/Switcher/Switcher.js.map +1 -1
- package/cjs/components/Tabs/Tab.d.ts +1 -0
- package/cjs/components/Tabs/Tab.js +7 -1
- package/cjs/components/Tabs/Tab.js.map +1 -1
- package/cjs/components/Tabs/Tabs.d.ts +1 -0
- package/cjs/components/Tabs/Tabs.js +2 -1
- package/cjs/components/Tabs/Tabs.js.map +1 -1
- package/cjs/components/Textarea/Textarea.d.ts +1 -0
- package/cjs/components/Textarea/Textarea.js +2 -1
- package/cjs/components/Textarea/Textarea.js.map +1 -1
- package/cjs/components/Toast/Toast.d.ts +1 -0
- package/cjs/components/Toast/Toast.js +3 -1
- package/cjs/components/Toast/Toast.js.map +1 -1
- package/cjs/components/Toggle/Toggle.d.ts +1 -0
- package/cjs/components/Toggle/Toggle.js +2 -1
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/components/Token/Token.d.ts +1 -0
- package/cjs/components/Token/Token.js +9 -1
- package/cjs/components/Token/Token.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +1 -0
- package/cjs/components/TokenInput/TokenInput.js +2 -1
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/components/TokenInput/TokenInputMenu.d.ts +1 -0
- package/cjs/components/TokenInput/TokenInputMenu.js +2 -1
- package/cjs/components/TokenInput/TokenInputMenu.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.d.ts +1 -0
- package/cjs/components/Tooltip/Tooltip.js +2 -1
- package/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/cjs/components/TooltipMenu/TooltipMenu.d.ts +1 -0
- package/cjs/components/TooltipMenu/TooltipMenu.js +3 -1
- package/cjs/components/TooltipMenu/TooltipMenu.js.map +1 -1
- package/cjs/internal/CloseButtonIcon/CloseButtonIcon.js +4 -1
- package/cjs/internal/CloseButtonIcon/CloseButtonIcon.js.map +1 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.d.ts +5 -26
- package/cjs/internal/CommonWrapper/CommonWrapper.js +7 -56
- package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
- package/cjs/internal/CommonWrapper/extractCommonProps.d.ts +3 -0
- package/cjs/internal/CommonWrapper/extractCommonProps.js +34 -0
- package/cjs/internal/CommonWrapper/extractCommonProps.js.map +1 -0
- package/cjs/internal/CommonWrapper/getCommonVisualStateDataAttributes.d.ts +2 -0
- package/cjs/internal/CommonWrapper/getCommonVisualStateDataAttributes.js +12 -0
- package/cjs/internal/CommonWrapper/getCommonVisualStateDataAttributes.js.map +1 -0
- package/cjs/internal/CommonWrapper/getVisualStateDataAttributes.d.ts +3 -0
- package/cjs/internal/CommonWrapper/getVisualStateDataAttributes.js +23 -0
- package/cjs/internal/CommonWrapper/getVisualStateDataAttributes.js.map +1 -0
- package/cjs/internal/CommonWrapper/index.d.ts +2 -0
- package/cjs/internal/CommonWrapper/index.js.map +1 -1
- package/cjs/internal/CommonWrapper/types.d.ts +25 -0
- package/cjs/internal/CommonWrapper/types.js +1 -0
- package/cjs/internal/CommonWrapper/types.js.map +1 -0
- package/cjs/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js +2 -1
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +1 -0
- package/cjs/internal/CustomComboBox/ComboBoxView.js +2 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
- package/cjs/internal/CustomComboBox/CustomComboBox.js +2 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/cjs/internal/DateSelect/DateSelect.d.ts +1 -0
- package/cjs/internal/DateSelect/DateSelect.js +2 -1
- package/cjs/internal/DateSelect/DateSelect.js.map +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +1 -0
- package/cjs/internal/DropdownContainer/DropdownContainer.js +2 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +1 -0
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js +1 -0
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
- package/cjs/internal/FocusTrap/FocusTrap.d.ts +1 -0
- package/cjs/internal/FocusTrap/FocusTrap.js +3 -1
- package/cjs/internal/FocusTrap/FocusTrap.js.map +1 -1
- package/cjs/internal/HideBodyVerticalScroll/HideBodyVerticalScroll.d.ts +1 -0
- package/cjs/internal/HideBodyVerticalScroll/HideBodyVerticalScroll.js +2 -1
- package/cjs/internal/HideBodyVerticalScroll/HideBodyVerticalScroll.js.map +1 -1
- package/cjs/internal/IgnoreLayerClick/IgnoreLayerClick.js +2 -1
- package/cjs/internal/IgnoreLayerClick/IgnoreLayerClick.js.map +1 -1
- package/cjs/internal/InputLikeText/InputLikeText.d.ts +1 -0
- package/cjs/internal/InputLikeText/InputLikeText.js +2 -1
- package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
- package/cjs/internal/InternalMaskedInput/InternalMaskedInput.d.ts +1 -0
- package/cjs/internal/InternalMaskedInput/InternalMaskedInput.js +2 -1
- package/cjs/internal/InternalMaskedInput/InternalMaskedInput.js.map +1 -1
- package/cjs/internal/InternalMenu/InternalMenu.d.ts +1 -0
- package/cjs/internal/InternalMenu/InternalMenu.js +2 -1
- package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
- package/cjs/internal/Menu/Menu.d.ts +1 -0
- package/cjs/internal/Menu/Menu.js +2 -1
- package/cjs/internal/Menu/Menu.js.map +1 -1
- package/cjs/internal/MobilePopup/MobilePopup.d.ts +1 -0
- package/cjs/internal/MobilePopup/MobilePopup.js +2 -1
- package/cjs/internal/MobilePopup/MobilePopup.js.map +1 -1
- package/cjs/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.d.ts +1 -0
- package/cjs/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.js +2 -1
- package/cjs/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.js.map +1 -1
- package/cjs/internal/NativeDateInput/NativeDateInput.d.ts +1 -0
- package/cjs/internal/NativeDateInput/NativeDateInput.js +3 -1
- package/cjs/internal/NativeDateInput/NativeDateInput.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +1 -0
- package/cjs/internal/Popup/Popup.js +2 -1
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/Popup/PopupPin.d.ts +1 -0
- package/cjs/internal/Popup/PopupPin.js +2 -1
- package/cjs/internal/Popup/PopupPin.js.map +1 -1
- package/cjs/internal/PopupMenu/PopupMenu.d.ts +1 -0
- package/cjs/internal/PopupMenu/PopupMenu.js +2 -1
- package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainer.d.ts +1 -0
- package/cjs/internal/RenderContainer/RenderContainer.js +2 -1
- package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderInnerContainer.d.ts +3 -0
- package/cjs/internal/RenderContainer/RenderInnerContainer.js +7 -2
- package/cjs/internal/RenderContainer/RenderInnerContainer.js.map +1 -1
- package/cjs/internal/RenderLayer/RenderLayer.d.ts +1 -0
- package/cjs/internal/RenderLayer/RenderLayer.js +2 -1
- package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
- package/cjs/internal/ResizeDetector/ResizeDetector.d.ts +1 -0
- package/cjs/internal/ResizeDetector/ResizeDetector.js +2 -1
- package/cjs/internal/ResizeDetector/ResizeDetector.js.map +1 -1
- package/cjs/internal/ZIndex/ZIndex.d.ts +1 -0
- package/cjs/internal/ZIndex/ZIndex.js +2 -1
- package/cjs/internal/ZIndex/ZIndex.js.map +1 -1
- package/cjs/internal/icons/20px/Icon.d.ts +1 -0
- package/cjs/internal/icons/20px/Icon.js +2 -1
- package/cjs/internal/icons/20px/Icon.js.map +1 -1
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +3 -1
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
- package/cjs/lib/locale/LocaleContext.js +2 -1
- package/cjs/lib/locale/LocaleContext.js.map +1 -1
- package/cjs/lib/rootNode/rootNodeDecorator.d.ts +2 -0
- package/cjs/lib/rootNode/rootNodeDecorator.js +4 -1
- package/cjs/lib/rootNode/rootNodeDecorator.js.map +1 -1
- package/cjs/lib/theming/ThemeContext.js +2 -1
- package/cjs/lib/theming/ThemeContext.js.map +1 -1
- package/cjs/lib/toKebabCase.d.ts +1 -0
- package/cjs/lib/toKebabCase.js +10 -0
- package/cjs/lib/toKebabCase.js.map +1 -0
- package/cjs/lib/utils.d.ts +0 -7
- package/cjs/lib/utils.js +2 -25
- package/cjs/lib/utils.js.map +1 -1
- package/cjs/typings/global-react.d.ts +12 -0
- package/components/Autocomplete/Autocomplete/Autocomplete.js +1 -1
- package/components/Autocomplete/Autocomplete/Autocomplete.js.map +1 -1
- package/components/Autocomplete/Autocomplete.d.ts +1 -0
- package/components/Button/Button/Button.js +1 -1
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +1 -0
- package/components/Calendar/Calendar/Calendar.js +1 -1
- package/components/Calendar/Calendar/Calendar.js.map +1 -1
- package/components/Calendar/Calendar.d.ts +1 -0
- package/components/Calendar/DayCellView/DayCellView.js +9 -3
- package/components/Calendar/DayCellView/DayCellView.js.map +1 -1
- package/components/Center/Center/Center.js +1 -1
- package/components/Center/Center/Center.js.map +1 -1
- package/components/Center/Center.d.ts +1 -0
- package/components/Checkbox/Checkbox/Checkbox.js +1 -1
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +1 -0
- package/components/ComboBox/ComboBox/ComboBox.js +1 -1
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +1 -0
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +1 -1
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
- package/components/CurrencyInput/CurrencyInput.d.ts +1 -0
- package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js +1 -0
- package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js.map +1 -1
- package/components/CurrencyLabel/CurrencyLabel.d.ts +1 -0
- package/components/DateInput/DateInput/DateInput.js +1 -1
- package/components/DateInput/DateInput/DateInput.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +1 -0
- package/components/DatePicker/DatePicker/DatePicker.js +1 -1
- package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +1 -0
- package/components/DatePicker/Picker/Picker.js +1 -1
- package/components/DatePicker/Picker/Picker.js.map +1 -1
- package/components/DatePicker/Picker.d.ts +1 -0
- package/components/Dropdown/Dropdown/Dropdown.js +1 -1
- package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +1 -0
- package/components/DropdownMenu/DropdownMenu/DropdownMenu.js +1 -1
- package/components/DropdownMenu/DropdownMenu/DropdownMenu.js.map +1 -1
- package/components/DropdownMenu/DropdownMenu.d.ts +1 -0
- package/components/FileUploader/FileUploader/FileUploader.js +2 -1
- package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
- package/components/FxInput/FxInput/FxInput.js +1 -1
- package/components/FxInput/FxInput/FxInput.js.map +1 -1
- package/components/FxInput/FxInput.d.ts +1 -0
- package/components/Gapped/Gapped/Gapped.js +1 -1
- package/components/Gapped/Gapped/Gapped.js.map +1 -1
- package/components/Gapped/Gapped.d.ts +1 -0
- package/components/GlobalLoader/GlobalLoader/GlobalLoader.js +1 -1
- package/components/GlobalLoader/GlobalLoader/GlobalLoader.js.map +1 -1
- package/components/GlobalLoader/GlobalLoader.d.ts +2 -0
- package/components/Group/Group/Group.js +1 -1
- package/components/Group/Group/Group.js.map +1 -1
- package/components/Group/Group.d.ts +1 -0
- package/components/Hint/Hint/Hint.js +1 -1
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +1 -0
- package/components/Input/Input/Input.js +1 -1
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +1 -0
- package/components/Kebab/Kebab/Kebab.js +1 -1
- package/components/Kebab/Kebab/Kebab.js.map +1 -1
- package/components/Kebab/Kebab.d.ts +1 -0
- package/components/Link/Link/Link.js +1 -1
- package/components/Link/Link/Link.js.map +1 -1
- package/components/Link/Link.d.ts +1 -0
- package/components/Loader/Loader/Loader.js +1 -1
- package/components/Loader/Loader/Loader.js.map +1 -1
- package/components/Loader/Loader.d.ts +1 -0
- package/components/MenuFooter/MenuFooter/MenuFooter.js +1 -0
- package/components/MenuFooter/MenuFooter/MenuFooter.js.map +1 -1
- package/components/MenuFooter/MenuFooter.d.ts +1 -0
- package/components/MenuHeader/MenuHeader/MenuHeader.js +1 -0
- package/components/MenuHeader/MenuHeader/MenuHeader.js.map +1 -1
- package/components/MenuHeader/MenuHeader.d.ts +1 -0
- package/components/MenuItem/MenuItem/MenuItem.js +29 -6
- package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
- package/components/MenuItem/MenuItem.d.ts +4 -0
- package/components/MenuSeparator/MenuSeparator/MenuSeparator.js +1 -0
- package/components/MenuSeparator/MenuSeparator/MenuSeparator.js.map +1 -1
- package/components/MenuSeparator/MenuSeparator.d.ts +1 -0
- package/components/MiniModal/MiniModal/MiniModal.js +0 -1
- package/components/MiniModal/MiniModal/MiniModal.js.map +1 -1
- package/components/Modal/Modal/Modal.js +1 -0
- package/components/Modal/Modal/Modal.js.map +1 -1
- package/components/Modal/Modal.d.ts +1 -0
- package/components/Modal/ModalBody/ModalBody.js +1 -1
- package/components/Modal/ModalBody/ModalBody.js.map +1 -1
- package/components/Modal/ModalBody.d.ts +1 -0
- package/components/Modal/ModalClose/ModalClose.js +3 -1
- package/components/Modal/ModalClose/ModalClose.js.map +1 -1
- package/components/Modal/ModalClose.d.ts +4 -0
- package/components/Modal/ModalFooter/ModalFooter.js +1 -0
- package/components/Modal/ModalFooter/ModalFooter.js.map +1 -1
- package/components/Modal/ModalFooter.d.ts +1 -0
- package/components/Modal/ModalHeader/ModalHeader.js +1 -0
- package/components/Modal/ModalHeader/ModalHeader.js.map +1 -1
- package/components/Modal/ModalHeader.d.ts +1 -0
- package/components/Modal/ModalSeparator/ModalSeparator.js +3 -1
- package/components/Modal/ModalSeparator/ModalSeparator.js.map +1 -1
- package/components/Modal/ModalSeparator.d.ts +4 -0
- package/components/Paging/Paging/Paging.js +11 -5
- package/components/Paging/Paging/Paging.js.map +1 -1
- package/components/Paging/Paging.d.ts +1 -0
- package/components/PasswordInput/PasswordInput/PasswordInput.js +1 -1
- package/components/PasswordInput/PasswordInput/PasswordInput.js.map +1 -1
- package/components/PasswordInput/PasswordInput.d.ts +1 -0
- package/components/Radio/Radio/Radio.js +1 -1
- package/components/Radio/Radio/Radio.js.map +1 -1
- package/components/Radio/Radio.d.ts +1 -0
- package/components/RadioGroup/RadioGroup/RadioGroup.js +1 -1
- package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +1 -0
- package/components/ResponsiveLayout/ResponsiveLayout/ResponsiveLayout.js +3 -1
- package/components/ResponsiveLayout/ResponsiveLayout/ResponsiveLayout.js.map +1 -1
- package/components/ResponsiveLayout/ResponsiveLayout.d.ts +4 -0
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +1 -1
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +1 -0
- package/components/Select/Item/Item.js +2 -1
- package/components/Select/Item/Item.js.map +1 -1
- package/components/Select/Item.d.ts +1 -0
- package/components/Select/Select/Select.js +4 -2
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +2 -0
- package/components/SidePage/SidePage/SidePage.js +1 -0
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/SidePage/SidePage.d.ts +1 -0
- package/components/SidePage/SidePageBody/SidePageBody.js +1 -1
- package/components/SidePage/SidePageBody/SidePageBody.js.map +1 -1
- package/components/SidePage/SidePageBody.d.ts +1 -0
- package/components/SidePage/SidePageCloseButton/SidePageCloseButton.js +3 -1
- package/components/SidePage/SidePageCloseButton/SidePageCloseButton.js.map +1 -1
- package/components/SidePage/SidePageCloseButton.d.ts +5 -1
- package/components/SidePage/SidePageContainer/SidePageContainer.js +1 -1
- package/components/SidePage/SidePageContainer/SidePageContainer.js.map +1 -1
- package/components/SidePage/SidePageContainer.d.ts +1 -0
- package/components/SidePage/SidePageFooter/SidePageFooter.js +1 -1
- package/components/SidePage/SidePageFooter/SidePageFooter.js.map +1 -1
- package/components/SidePage/SidePageFooter.d.ts +1 -0
- package/components/SidePage/SidePageHeader/SidePageHeader.js +1 -1
- package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
- package/components/SidePage/SidePageHeader.d.ts +1 -0
- package/components/SingleToast/SingleToast/SingleToast.js +2 -0
- package/components/SingleToast/SingleToast/SingleToast.js.map +1 -1
- package/components/SingleToast/SingleToast.d.ts +2 -0
- package/components/Spinner/Spinner/Spinner.js +1 -1
- package/components/Spinner/Spinner/Spinner.js.map +1 -1
- package/components/Spinner/Spinner.d.ts +1 -0
- package/components/Sticky/Sticky/Sticky.js +1 -1
- package/components/Sticky/Sticky/Sticky.js.map +1 -1
- package/components/Sticky/Sticky.d.ts +1 -0
- package/components/Switcher/Switcher/Switcher.js +1 -1
- package/components/Switcher/Switcher/Switcher.js.map +1 -1
- package/components/Switcher/Switcher.d.ts +1 -0
- package/components/Tabs/Tab/Tab.js +6 -2
- package/components/Tabs/Tab/Tab.js.map +1 -1
- package/components/Tabs/Tab.d.ts +1 -0
- package/components/Tabs/Tabs/Tabs.js +1 -1
- package/components/Tabs/Tabs/Tabs.js.map +1 -1
- package/components/Tabs/Tabs.d.ts +1 -0
- package/components/Textarea/Textarea/Textarea.js +1 -1
- package/components/Textarea/Textarea/Textarea.js.map +1 -1
- package/components/Textarea/Textarea.d.ts +1 -0
- package/components/Toast/Toast/Toast.js +1 -1
- package/components/Toast/Toast/Toast.js.map +1 -1
- package/components/Toast/Toast.d.ts +1 -0
- package/components/Toggle/Toggle/Toggle.js +1 -1
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +1 -0
- package/components/Token/Token/Token.js +5 -4
- package/components/Token/Token/Token.js.map +1 -1
- package/components/Token/Token.d.ts +1 -0
- package/components/TokenInput/TokenInput/TokenInput.js +1 -1
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +1 -0
- package/components/TokenInput/TokenInputMenu/TokenInputMenu.js +2 -1
- package/components/TokenInput/TokenInputMenu/TokenInputMenu.js.map +1 -1
- package/components/TokenInput/TokenInputMenu.d.ts +1 -0
- package/components/Tooltip/Tooltip/Tooltip.js +1 -1
- package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +1 -0
- package/components/TooltipMenu/TooltipMenu/TooltipMenu.js +1 -1
- package/components/TooltipMenu/TooltipMenu/TooltipMenu.js.map +1 -1
- package/components/TooltipMenu/TooltipMenu.d.ts +1 -0
- package/internal/CloseButtonIcon/CloseButtonIcon/CloseButtonIcon.js +3 -1
- package/internal/CloseButtonIcon/CloseButtonIcon/CloseButtonIcon.js.map +1 -1
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js +8 -38
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
- package/internal/CommonWrapper/CommonWrapper.d.ts +5 -26
- package/internal/CommonWrapper/extractCommonProps/extractCommonProps.js +31 -0
- package/internal/CommonWrapper/extractCommonProps/extractCommonProps.js.map +1 -0
- package/internal/CommonWrapper/extractCommonProps/package.json +6 -0
- package/internal/CommonWrapper/extractCommonProps.d.ts +3 -0
- package/internal/CommonWrapper/getCommonVisualStateDataAttributes/getCommonVisualStateDataAttributes.js +12 -0
- package/internal/CommonWrapper/getCommonVisualStateDataAttributes/getCommonVisualStateDataAttributes.js.map +1 -0
- package/internal/CommonWrapper/getCommonVisualStateDataAttributes/package.json +6 -0
- package/internal/CommonWrapper/getCommonVisualStateDataAttributes.d.ts +2 -0
- package/internal/CommonWrapper/getVisualStateDataAttributes/getVisualStateDataAttributes.js +16 -0
- package/internal/CommonWrapper/getVisualStateDataAttributes/getVisualStateDataAttributes.js.map +1 -0
- package/internal/CommonWrapper/getVisualStateDataAttributes/package.json +6 -0
- package/internal/CommonWrapper/getVisualStateDataAttributes.d.ts +3 -0
- package/internal/CommonWrapper/index/index.js +2 -1
- package/internal/CommonWrapper/index/index.js.map +1 -1
- package/internal/CommonWrapper/index.d.ts +2 -0
- package/internal/CommonWrapper/types/package.json +6 -0
- package/internal/CommonWrapper/types/types.js +1 -0
- package/internal/CommonWrapper/types/types.js.map +1 -0
- package/internal/CommonWrapper/types.d.ts +25 -0
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +1 -1
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +1 -1
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.d.ts +1 -0
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +1 -1
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
- package/internal/DateSelect/DateSelect/DateSelect.js +1 -1
- package/internal/DateSelect/DateSelect/DateSelect.js.map +1 -1
- package/internal/DateSelect/DateSelect.d.ts +1 -0
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +1 -0
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
- package/internal/DropdownContainer/DropdownContainer.d.ts +1 -0
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js +1 -0
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +1 -0
- package/internal/FocusTrap/FocusTrap/FocusTrap.js +1 -1
- package/internal/FocusTrap/FocusTrap/FocusTrap.js.map +1 -1
- package/internal/FocusTrap/FocusTrap.d.ts +1 -0
- package/internal/HideBodyVerticalScroll/HideBodyVerticalScroll/HideBodyVerticalScroll.js +1 -0
- package/internal/HideBodyVerticalScroll/HideBodyVerticalScroll/HideBodyVerticalScroll.js.map +1 -1
- package/internal/HideBodyVerticalScroll/HideBodyVerticalScroll.d.ts +1 -0
- package/internal/IgnoreLayerClick/IgnoreLayerClick/IgnoreLayerClick.js +1 -1
- package/internal/IgnoreLayerClick/IgnoreLayerClick/IgnoreLayerClick.js.map +1 -1
- package/internal/InputLikeText/InputLikeText/InputLikeText.js +1 -1
- package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
- package/internal/InputLikeText/InputLikeText.d.ts +1 -0
- package/internal/InternalMaskedInput/InternalMaskedInput/InternalMaskedInput.js +2 -1
- package/internal/InternalMaskedInput/InternalMaskedInput/InternalMaskedInput.js.map +1 -1
- package/internal/InternalMaskedInput/InternalMaskedInput.d.ts +1 -0
- package/internal/InternalMenu/InternalMenu/InternalMenu.js +1 -1
- package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
- package/internal/InternalMenu/InternalMenu.d.ts +1 -0
- package/internal/Menu/Menu/Menu.js +1 -1
- package/internal/Menu/Menu/Menu.js.map +1 -1
- package/internal/Menu/Menu.d.ts +1 -0
- package/internal/MobilePopup/MobilePopup/MobilePopup.js +2 -1
- package/internal/MobilePopup/MobilePopup/MobilePopup.js.map +1 -1
- package/internal/MobilePopup/MobilePopup.d.ts +1 -0
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader/MobilePopupHeader.js +2 -1
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader/MobilePopupHeader.js.map +1 -1
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.d.ts +1 -0
- package/internal/NativeDateInput/NativeDateInput/NativeDateInput.js +2 -1
- package/internal/NativeDateInput/NativeDateInput/NativeDateInput.js.map +1 -1
- package/internal/NativeDateInput/NativeDateInput.d.ts +1 -0
- package/internal/Popup/Popup/Popup.js +1 -1
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +1 -0
- package/internal/Popup/PopupPin/PopupPin.js +1 -0
- package/internal/Popup/PopupPin/PopupPin.js.map +1 -1
- package/internal/Popup/PopupPin.d.ts +1 -0
- package/internal/PopupMenu/PopupMenu/PopupMenu.js +1 -1
- package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
- package/internal/PopupMenu/PopupMenu.d.ts +1 -0
- package/internal/RenderContainer/RenderContainer/RenderContainer.js +1 -0
- package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
- package/internal/RenderContainer/RenderContainer.d.ts +1 -0
- package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js +4 -1
- package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js.map +1 -1
- package/internal/RenderContainer/RenderInnerContainer.d.ts +3 -0
- package/internal/RenderLayer/RenderLayer/RenderLayer.js +1 -1
- package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
- package/internal/RenderLayer/RenderLayer.d.ts +1 -0
- package/internal/ResizeDetector/ResizeDetector/ResizeDetector.js +2 -1
- package/internal/ResizeDetector/ResizeDetector/ResizeDetector.js.map +1 -1
- package/internal/ResizeDetector/ResizeDetector.d.ts +1 -0
- package/internal/ZIndex/ZIndex/ZIndex.js +1 -1
- package/internal/ZIndex/ZIndex/ZIndex.js.map +1 -1
- package/internal/ZIndex/ZIndex.d.ts +1 -0
- package/internal/icons/20px/Icon/Icon.js +1 -0
- package/internal/icons/20px/Icon/Icon.js.map +1 -1
- package/internal/icons/20px/Icon.d.ts +1 -0
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js +2 -1
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
- package/lib/locale/LocaleContext/LocaleContext.js +2 -1
- package/lib/locale/LocaleContext/LocaleContext.js.map +1 -1
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js +1 -1
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js.map +1 -1
- package/lib/rootNode/rootNodeDecorator.d.ts +2 -0
- package/lib/theming/ThemeContext/ThemeContext.js +2 -1
- package/lib/theming/ThemeContext/ThemeContext.js.map +1 -1
- package/lib/toKebabCase/package.json +6 -0
- package/lib/toKebabCase/toKebabCase.js +7 -0
- package/lib/toKebabCase/toKebabCase.js.map +1 -0
- package/lib/toKebabCase.d.ts +1 -0
- package/lib/utils/utils.js +1 -27
- package/lib/utils/utils.js.map +1 -1
- package/lib/utils.d.ts +0 -7
- package/package.json +9 -9
- package/typings/global-react.d.ts +12 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Menu.tsx"],"names":["React","globalObject","isBrowser","isKeyArrowDown","isKeyArrowUp","isKeyEnter","MenuSeparator","ThemeFactory","getDOMRect","responsiveLayout","isNonNullable","isNullable","ScrollContainer","MenuItemDataTids","ThemeContext","cx","getRootNode","rootNode","addIconPaddingIfPartOfMenu","isIE11","createPropsGetter","isTheme2022","isIconPaddingEnabled","isInstanceOf","getFullReactUIFlagsContext","ReactUIFeatureFlagsContext","styles","isActiveElement","MenuNavigation","MenuContext","MenuDataTids","root","Menu","getProps","defaultProps","state","highlightedIndex","maxHeight","scrollState","enableIconPadding","unmounted","contentRef","createRef","menuNavigation","content","focusOnRootElement","HTMLElement","focus","renderHeader","wrapper","headerWrapper","el","header","contentWrapper","props","menuSeparatorWrapper","theme","renderMenuSeparatorWithNoMargin","renderFooter","footerWrapper","footer","create","menuSeparatorMarginY","getChildList","menuItemsAtAnyLevel","children","preventIconsOffset","Children","map","child","index","modifiedChild","highlight","ref","refHighlighted","bind","cloneElement","onClick","select","onMouseEnter","onMouseLeave","unhighlight","setInitialSelection","i","initialSelectedItemIndex","down","shouldRecalculateMaxHeight","prevProps","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","count","calculateMaxHeight","parsedMaxHeight","rootElementMaxHeight","getComputedStyle","parseFloat","calculatedMaxHeight","height","setState","refScrollContainer","scrollContainer","scrollToSelected","highlightedItem","highlighted","scrollTo","scrollToTop","scrollToBottom","scroll","nextIndex","items","length","handleKeyDown","event","onKeyDown","defaultPrevented","preventDefault","up","getStyle","align","maxWidth","width","minWidth","handleScrollStateChange","setEnableIconPadding","componentWillUnmount","componentDidMount","componentDidUpdate","render","flags","renderMain","move","enter","navigate","reset","hasHighlightedItem","highlightItem","highlightByIndex","isEmpty","hasShadow","preventWindowScroll","offsetY","top","scrollContainerScrollBarOffsetY","right","bottom","isMobile","isMobileLayout","getAlignRightClass","mobileRoot","shadow","id","setRootNode","disableScrollContainer","scrollContainerMobile","navigation","onItemClick","originalRef","menuItem","shouldHandleHref","item","childrenToArray","href","target","open","location","step","cyclicSelection","activeElements","filter","indexOf","PureComponent","__KONTUR_REACT_UI__","ret","forEach","push","alignRight","alignRightIE11","alignRightIE11FixAutoWidth"],"mappings":"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","sourcesContent":["import React, { CSSProperties, HTMLAttributes } from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { MenuSeparator } from '../../components/MenuSeparator';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { isNonNullable, isNullable } from '../../lib/utils';\nimport { ScrollContainer, ScrollContainerScrollState } from '../../components/ScrollContainer';\nimport { MenuItem, MenuItemDataTids, MenuItemProps } from '../../components/MenuItem';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { addIconPaddingIfPartOfMenu } from '../InternalMenu/addIconPaddingIfPartOfMenu';\nimport { isIE11 } from '../../lib/client';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { isIconPaddingEnabled } from '../InternalMenu/isIconPaddingEnabled';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\n\nimport { styles } from './Menu.styles';\nimport { isActiveElement } from './isActiveElement';\nimport { MenuNavigation } from './MenuNavigation';\nimport { MenuContext } from './MenuContext';\n\nexport interface MenuProps extends Pick<HTMLAttributes<HTMLDivElement>, 'id'> {\n children: React.ReactNode;\n hasShadow?: boolean;\n /**\n * Максимальная высота применяется только для скролл контейнера\n *\n * Высота `header` и `footer` в нее не включены\n */\n maxHeight?: number | string;\n onItemClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n /**\n * Отключение кастомного скролла контейнера\n */\n disableScrollContainer?: boolean;\n align?: 'left' | 'right';\n /**\n * Предотвращает выравнивание текста всех пунктов меню относительно друг друга.\n * Так, если хотя бы у одного пункта меню есть иконка, текст в остальных пунктах меню будет выровнен относительно пункта меню с иконкой\n */\n preventIconsOffset?: boolean;\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n /**\n * Циклический перебор айтемов меню (по-дефолтну включен)\n */\n cyclicSelection?: boolean;\n initialSelectedItemIndex?: number;\n}\n\nexport interface MenuState {\n highlightedIndex: number;\n maxHeight: number | string;\n scrollState: ScrollContainerScrollState;\n enableIconPadding: boolean;\n}\n\nexport const MenuDataTids = {\n root: 'Menu__root',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n MenuProps,\n | 'align'\n | 'width'\n | 'maxHeight'\n | 'hasShadow'\n | 'preventWindowScroll'\n | 'cyclicSelection'\n | 'initialSelectedItemIndex'\n >\n>;\n\n@responsiveLayout\n@rootNode\nexport class Menu extends React.PureComponent<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'Menu';\n\n public static defaultProps: DefaultProps = {\n align: 'left',\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n cyclicSelection: true,\n initialSelectedItemIndex: -1,\n };\n\n private getProps = createPropsGetter(Menu.defaultProps);\n\n public state: MenuState = {\n highlightedIndex: -1,\n maxHeight: this.getProps().maxHeight || 'none',\n scrollState: 'top',\n enableIconPadding: false,\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private isMobileLayout!: boolean;\n private highlighted: Nullable<MenuItem>;\n private unmounted = false;\n private setRootNode!: TSetRootNode;\n private header: Nullable<HTMLDivElement>;\n private footer: Nullable<HTMLDivElement>;\n private contentRef = React.createRef<HTMLDivElement>();\n private menuNavigation: MenuNavigation<MenuItem> = new MenuNavigation(this.contentRef, MenuItemDataTids.content);\n private menuItemsAtAnyLevel?: boolean;\n\n public componentWillUnmount() {\n this.unmounted = true;\n }\n\n public componentDidMount() {\n this.setInitialSelection();\n this.calculateMaxHeight();\n }\n\n public componentDidUpdate(prevProps: MenuProps) {\n if (this.shouldRecalculateMaxHeight(prevProps)) {\n this.calculateMaxHeight();\n }\n\n if (prevProps.maxHeight !== this.getProps().maxHeight) {\n this.setState({\n maxHeight: this.props.maxHeight || 'none',\n });\n }\n }\n\n public focus() {\n this.focusOnRootElement();\n }\n\n private focusOnRootElement = (): void => {\n const rootNode = getRootNode(this);\n if (isInstanceOf(rootNode, globalObject.HTMLElement)) {\n rootNode?.focus();\n }\n };\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.menuItemsAtAnyLevel = getFullReactUIFlagsContext(flags).menuItemsAtAnyLevel;\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public up() {\n this.move(-1);\n }\n\n /**\n * @public\n */\n public down() {\n this.move(1);\n }\n\n /**\n * @public\n */\n public enter(event: React.SyntheticEvent<HTMLElement>) {\n if (this.menuItemsAtAnyLevel) {\n this.menuNavigation.highlightedItem?.navigate();\n return this.menuNavigation.select(event);\n }\n return this.select(this.state.highlightedIndex, true, event);\n }\n\n /**\n * @public\n */\n public reset() {\n if (this.menuItemsAtAnyLevel) {\n this.menuNavigation.reset();\n } else {\n this.setState({ highlightedIndex: -1 });\n }\n }\n\n /**\n * @public\n */\n public hasHighlightedItem() {\n if (this.menuItemsAtAnyLevel) {\n return !!this.menuNavigation.highlightedItem;\n }\n return this.state.highlightedIndex !== -1;\n }\n\n public highlightItem(index: number) {\n if (this.menuItemsAtAnyLevel) {\n this.menuNavigation.highlightByIndex(index);\n } else {\n this.highlight(index);\n }\n }\n\n private renderMain() {\n if (this.isEmpty()) {\n return null;\n }\n const { hasShadow, maxHeight, preventWindowScroll } = this.getProps();\n\n const offsetY = isTheme2022(this.theme)\n ? {\n top: `${this.theme.scrollContainerScrollBarOffsetY}`,\n right: 0,\n bottom: `${this.theme.scrollContainerScrollBarOffsetY}`,\n }\n : {};\n\n const isMobile = this.isMobileLayout;\n return (\n <div\n data-tid={MenuDataTids.root}\n className={cx(getAlignRightClass(this.props), {\n [styles.root(this.theme)]: true,\n [styles.mobileRoot(this.theme)]: isMobile,\n [styles.shadow(this.theme)]: hasShadow && !isMobile,\n })}\n style={this.getStyle(this.props)}\n id={this.props.id}\n onKeyDown={this.handleKeyDown}\n ref={this.setRootNode}\n tabIndex={0}\n >\n {this.props.header && this.renderHeader()}\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={maxHeight}\n preventWindowScroll={preventWindowScroll}\n onScrollStateChange={this.handleScrollStateChange}\n disabled={this.props.disableScrollContainer}\n offsetY={offsetY}\n >\n <div\n className={cx({\n [styles.scrollContainer(this.theme)]: true,\n [styles.scrollContainerMobile(this.theme)]: isMobile,\n })}\n ref={this.contentRef}\n >\n <MenuContext.Provider\n value={{\n navigation: this.menuNavigation,\n onItemClick: this.props.onItemClick,\n enableIconPadding: this.state.enableIconPadding,\n setEnableIconPadding: this.setEnableIconPadding,\n }}\n >\n {this.getChildList()}\n </MenuContext.Provider>\n </div>\n </ScrollContainer>\n {this.props.footer && this.renderFooter()}\n </div>\n );\n }\n\n private renderHeader = () => {\n return (\n <div\n className={cx({\n [styles.wrapper()]: true,\n [styles.headerWrapper()]: true,\n })}\n ref={(el) => (this.header = el)}\n >\n <div className={styles.contentWrapper()}>{this.props.header}</div>\n <div className={styles.menuSeparatorWrapper(this.theme)}>\n {this.state.scrollState !== 'top' && this.renderMenuSeparatorWithNoMargin()}\n </div>\n </div>\n );\n };\n\n private renderFooter = () => {\n return (\n <div\n className={cx({\n [styles.wrapper()]: true,\n [styles.footerWrapper()]: true,\n })}\n ref={(el) => (this.footer = el)}\n >\n <div className={styles.menuSeparatorWrapper(this.theme)}>\n {this.state.scrollState !== 'bottom' && this.renderMenuSeparatorWithNoMargin()}\n </div>\n <div className={styles.contentWrapper()}>{this.props.footer}</div>\n </div>\n );\n };\n\n private renderMenuSeparatorWithNoMargin = () => {\n return (\n <ThemeContext.Provider value={ThemeFactory.create({ menuSeparatorMarginY: '0' }, this.theme)}>\n <MenuSeparator />\n </ThemeContext.Provider>\n );\n };\n\n private getChildList = () => {\n if (this.menuItemsAtAnyLevel) {\n return this.props.children;\n }\n const enableIconPadding = isIconPaddingEnabled(this.props.children, this.props.preventIconsOffset);\n\n return React.Children.map(this.props.children, (child, index) => {\n if (typeof child === 'string' || typeof child === 'number' || isNullable(child)) {\n return child;\n }\n\n const modifiedChild = addIconPaddingIfPartOfMenu(child, enableIconPadding);\n\n if (isActiveElement(modifiedChild)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = modifiedChild.ref;\n if (highlight && typeof modifiedChild.ref !== 'string') {\n ref = this.refHighlighted.bind(this, modifiedChild.ref);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(modifiedChild, {\n ref,\n state: highlight ? 'hover' : modifiedChild.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: this.highlight.bind(this, index),\n onMouseLeave: this.unhighlight,\n });\n }\n\n return modifiedChild;\n });\n };\n\n private setInitialSelection = () => {\n for (let i = this.getProps().initialSelectedItemIndex; i > -1; i--) {\n this.down();\n }\n };\n\n private shouldRecalculateMaxHeight = (prevProps: MenuProps): boolean => {\n const { header, footer, children } = this.props;\n const maxHeight = this.getProps().maxHeight;\n const prevMaxHeight = prevProps.maxHeight;\n const prevHeader = prevProps.header;\n const prevFooter = prevProps.footer;\n const prevChildrenCount = React.Children.count(prevProps.children);\n\n return (\n maxHeight !== prevMaxHeight ||\n footer !== prevFooter ||\n header !== prevHeader ||\n React.Children.count(children) !== prevChildrenCount\n );\n };\n\n private calculateMaxHeight = () => {\n const maxHeight = this.getProps().maxHeight;\n let parsedMaxHeight = maxHeight;\n const rootNode = getRootNode(this);\n\n if (typeof maxHeight === 'string' && isBrowser(globalObject) && rootNode) {\n const rootElementMaxHeight = globalObject.getComputedStyle?.(rootNode).maxHeight;\n\n if (rootElementMaxHeight) {\n parsedMaxHeight = parseFloat(rootElementMaxHeight);\n }\n }\n\n const calculatedMaxHeight =\n typeof parsedMaxHeight === 'number'\n ? parsedMaxHeight +\n ((this.header && getDOMRect(this.header).height) || 0) +\n ((this.footer && getDOMRect(this.footer).height) || 0)\n : maxHeight;\n\n this.setState({\n maxHeight: calculatedMaxHeight || 'none',\n });\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: ((menuItem: MenuItem | null) => any) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n }\n }\n\n private scrollToSelected = () => {\n const highlightedItem = this.menuItemsAtAnyLevel ? this.menuNavigation.highlightedItem : this.highlighted;\n if (this.scrollContainer && highlightedItem) {\n const rootNode = getRootNode(highlightedItem);\n // TODO: Remove this check once IF-647 is resolved\n if (isInstanceOf(rootNode, globalObject.HTMLElement)) {\n this.scrollContainer.scrollTo(rootNode);\n }\n }\n };\n\n private scrollToTop = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToTop();\n }\n };\n\n private scrollToBottom = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToBottom();\n }\n };\n\n private scroll = (nextIndex: number) => {\n switch (nextIndex) {\n case 0:\n this.scrollToTop?.();\n break;\n case this.menuNavigation.items.length - 1:\n this.scrollToBottom?.();\n break;\n default:\n this.scrollToSelected?.();\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n if (isActiveElement(item) && isBrowser(globalObject)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n globalObject.open(item.props.href, item.props.target);\n } else {\n globalObject.location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick(event);\n }\n return true;\n }\n return false;\n }\n\n private highlight = (index: number) => {\n this.setState({ highlightedIndex: index });\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n if (this.unmounted) {\n // NOTE workaround, because `ComboBox` call `process.nextTick` in reducer\n return;\n }\n if (this.menuItemsAtAnyLevel) {\n const nextIndex = this.menuNavigation.move(step, this.getProps().cyclicSelection);\n this.scroll(nextIndex);\n } else {\n const children = childrenToArray(this.props.children);\n const activeElements = children.filter(isActiveElement);\n if (!activeElements.length) {\n return;\n }\n let index = this.state.highlightedIndex;\n do {\n index += step;\n\n if (!this.getProps().cyclicSelection && (index < 0 || index > children.length)) {\n return;\n }\n\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n this.setState({ highlightedIndex: index }, () => {\n switch (activeElements.indexOf(child)) {\n case 0:\n this.scrollToTop();\n break;\n case activeElements.length - 1:\n this.scrollToBottom();\n break;\n default:\n this.scrollToSelected();\n }\n });\n return;\n }\n } while (index !== this.state.highlightedIndex);\n }\n }\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isNonNullable).length;\n }\n\n private handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n if (typeof this.props.onKeyDown === 'function') {\n this.props.onKeyDown(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (isKeyArrowUp(event)) {\n event.preventDefault();\n this.up();\n } else if (isKeyArrowDown(event)) {\n event.preventDefault();\n this.down();\n } else if (isKeyEnter(event)) {\n if (this.menuItemsAtAnyLevel) {\n this.menuNavigation.select(event);\n } else if (this.highlighted && this.highlighted.props.onClick) {\n this.highlighted.props.onClick(event);\n }\n }\n };\n\n private getStyle = (props: MenuProps): CSSProperties => {\n if (props.align === 'right') {\n return {\n maxWidth: props.width,\n minWidth: props.width,\n maxHeight: this.state.maxHeight,\n };\n }\n\n return {\n width: props.width,\n maxHeight: this.state.maxHeight,\n };\n };\n\n private handleScrollStateChange = (scrollState: ScrollContainerScrollState) => {\n if (this.state.scrollState !== scrollState) {\n this.setState({ scrollState });\n }\n };\n\n private setEnableIconPadding = (isIconPaddingEnabled: boolean) => {\n !this.getProps().preventIconsOffset && this.setState({ enableIconPadding: isIconPaddingEnabled });\n };\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n\nconst getAlignRightClass = (props: MenuProps) => {\n if (props.align === 'right') {\n return cx({\n [styles.alignRight()]: !isIE11,\n [styles.alignRightIE11()]: isIE11,\n [styles.alignRightIE11FixAutoWidth()]: isIE11 && props.width === 'auto',\n });\n }\n\n return null;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["Menu.tsx"],"names":["React","globalObject","isBrowser","isKeyArrowDown","isKeyArrowUp","isKeyEnter","MenuSeparator","ThemeFactory","getDOMRect","responsiveLayout","isNonNullable","isNullable","ScrollContainer","MenuItemDataTids","ThemeContext","cx","getRootNode","rootNode","addIconPaddingIfPartOfMenu","isIE11","createPropsGetter","isTheme2022","isIconPaddingEnabled","isInstanceOf","getFullReactUIFlagsContext","ReactUIFeatureFlagsContext","styles","isActiveElement","MenuNavigation","MenuContext","MenuDataTids","root","Menu","getProps","defaultProps","state","highlightedIndex","maxHeight","scrollState","enableIconPadding","unmounted","contentRef","createRef","menuNavigation","content","focusOnRootElement","HTMLElement","focus","renderHeader","wrapper","headerWrapper","el","header","contentWrapper","props","menuSeparatorWrapper","theme","renderMenuSeparatorWithNoMargin","renderFooter","footerWrapper","footer","create","menuSeparatorMarginY","getChildList","menuItemsAtAnyLevel","children","preventIconsOffset","Children","map","child","index","modifiedChild","highlight","ref","refHighlighted","bind","cloneElement","onClick","select","onMouseEnter","onMouseLeave","unhighlight","setInitialSelection","i","initialSelectedItemIndex","down","shouldRecalculateMaxHeight","prevProps","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","count","calculateMaxHeight","parsedMaxHeight","rootElementMaxHeight","getComputedStyle","parseFloat","calculatedMaxHeight","height","setState","refScrollContainer","scrollContainer","scrollToSelected","highlightedItem","highlighted","scrollTo","scrollToTop","scrollToBottom","scroll","nextIndex","items","length","handleKeyDown","event","onKeyDown","defaultPrevented","preventDefault","up","getStyle","align","maxWidth","width","minWidth","handleScrollStateChange","setEnableIconPadding","componentWillUnmount","componentDidMount","componentDidUpdate","render","flags","renderMain","move","enter","navigate","reset","hasHighlightedItem","highlightItem","highlightByIndex","isEmpty","hasShadow","preventWindowScroll","offsetY","top","scrollContainerScrollBarOffsetY","right","bottom","isMobile","isMobileLayout","getAlignRightClass","mobileRoot","shadow","id","setRootNode","disableScrollContainer","scrollContainerMobile","navigation","onItemClick","originalRef","menuItem","shouldHandleHref","item","childrenToArray","href","target","open","location","step","cyclicSelection","activeElements","filter","indexOf","PureComponent","__KONTUR_REACT_UI__","displayName","ret","forEach","push","alignRight","alignRightIE11","alignRightIE11FixAutoWidth"],"mappings":"uLAAA,OAAOA,KAAP,MAAqD,OAArD;AACA,SAASC,YAAT,EAAuBC,SAAvB,QAAwC,0BAAxC;;AAEA,SAASC,cAAT,EAAyBC,YAAzB,EAAuCC,UAAvC,QAAyD,uCAAzD;AACA,SAASC,aAAT,QAA8B,gCAA9B;AACA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,UAAT,QAA2B,0BAA3B;AACA,SAASC,gBAAT,QAAiC,6CAAjC;AACA,SAASC,aAAT,EAAwBC,UAAxB,QAA0C,iBAA1C;AACA,SAASC,eAAT,QAA4D,kCAA5D;AACA,SAAmBC,gBAAnB,QAA0D,2BAA1D;;AAEA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,WAAT,EAAsBC,QAAtB,QAAoD,oBAApD;AACA,SAASC,0BAAT,QAA2C,4CAA3C;AACA,SAASC,MAAT,QAAuB,kBAAvB;AACA,SAASC,iBAAT,QAAkC,6BAAlC;AACA,SAASC,WAAT,QAA4B,gCAA5B;AACA,SAASC,oBAAT,QAAqC,sCAArC;AACA,SAASC,YAAT,QAA6B,wBAA7B;AACA,SAASC,0BAAT,EAAqCC,0BAArC,QAAuE,+BAAvE;;AAEA,SAASC,MAAT,QAAuB,eAAvB;AACA,SAASC,eAAT,QAAgC,mBAAhC;AACA,SAASC,cAAT,QAA+B,kBAA/B;AACA,SAASC,WAAT,QAA4B,eAA5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,OAAO,IAAMC,YAAY,GAAG;AAC1BC,EAAAA,IAAI,EAAE,YADoB,EAArB;;;;;;;;;;;;;;;;;;AAmBP,WAAaC,IAAb,GAFCvB,gBAED,UADCQ,QACD;;;;;;;;;;;;;;AAcUgB,IAAAA,QAdV,GAcqBb,iBAAiB,CAACY,IAAI,CAACE,YAAN,CAdtC;;AAgBSC,IAAAA,KAhBT,GAgB4B;AACxBC,MAAAA,gBAAgB,EAAE,CAAC,CADK;AAExBC,MAAAA,SAAS,EAAE,MAAKJ,QAAL,GAAgBI,SAAhB,IAA6B,MAFhB;AAGxBC,MAAAA,WAAW,EAAE,KAHW;AAIxBC,MAAAA,iBAAiB,EAAE,KAJK,EAhB5B;;;;;;;AA2BUC,IAAAA,SA3BV,GA2BsB,KA3BtB;;;;AA+BUC,IAAAA,UA/BV,gBA+BuBzC,KAAK,CAAC0C,SAAN,EA/BvB;AAgCUC,IAAAA,cAhCV,GAgCqD,IAAIf,cAAJ,CAAmB,MAAKa,UAAxB,EAAoC5B,gBAAgB,CAAC+B,OAArD,CAhCrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DUC,IAAAA,kBA5DV,GA4D+B,YAAY;AACvC,UAAM5B,QAAQ,GAAGD,WAAW,+BAA5B;AACA,UAAIO,YAAY,CAACN,QAAD,EAAWhB,YAAY,CAAC6C,WAAxB,CAAhB,EAAsD;AACpD7B,QAAAA,QAAQ,QAAR,YAAAA,QAAQ,CAAE8B,KAAV;AACD;AACF,KAjEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyMUC,IAAAA,YAzMV,GAyMyB,YAAM;AAC3B;AACE;AACE,UAAA,SAAS,EAAEjC,EAAE;AACVW,UAAAA,MAAM,CAACuB,OAAP,EADU,IACS,IADT;AAEVvB,UAAAA,MAAM,CAACwB,aAAP,EAFU,IAEe,IAFf,OADf;;AAKE,UAAA,GAAG,EAAE,aAACC,EAAD,UAAS,MAAKC,MAAL,GAAcD,EAAvB,EALP;;AAOE,qCAAK,SAAS,EAAEzB,MAAM,CAAC2B,cAAP,EAAhB,IAA0C,MAAKC,KAAL,CAAWF,MAArD,CAPF;AAQE,qCAAK,SAAS,EAAE1B,MAAM,CAAC6B,oBAAP,CAA4B,MAAKC,KAAjC,CAAhB;AACG,cAAKrB,KAAL,CAAWG,WAAX,KAA2B,KAA3B,IAAoC,MAAKmB,+BAAL,EADvC,CARF,CADF;;;;AAcD,KAxNH;;AA0NUC,IAAAA,YA1NV,GA0NyB,YAAM;AAC3B;AACE;AACE,UAAA,SAAS,EAAE3C,EAAE;AACVW,UAAAA,MAAM,CAACuB,OAAP,EADU,IACS,IADT;AAEVvB,UAAAA,MAAM,CAACiC,aAAP,EAFU,IAEe,IAFf,QADf;;AAKE,UAAA,GAAG,EAAE,aAACR,EAAD,UAAS,MAAKS,MAAL,GAAcT,EAAvB,EALP;;AAOE,qCAAK,SAAS,EAAEzB,MAAM,CAAC6B,oBAAP,CAA4B,MAAKC,KAAjC,CAAhB;AACG,cAAKrB,KAAL,CAAWG,WAAX,KAA2B,QAA3B,IAAuC,MAAKmB,+BAAL,EAD1C,CAPF;;AAUE,qCAAK,SAAS,EAAE/B,MAAM,CAAC2B,cAAP,EAAhB,IAA0C,MAAKC,KAAL,CAAWM,MAArD,CAVF,CADF;;;AAcD,KAzOH;;AA2OUH,IAAAA,+BA3OV,GA2O4C,YAAM;AAC9C;AACE,4BAAC,YAAD,CAAc,QAAd,IAAuB,KAAK,EAAElD,YAAY,CAACsD,MAAb,CAAoB,EAAEC,oBAAoB,EAAE,GAAxB,EAApB,EAAmD,MAAKN,KAAxD,CAA9B;AACE,4BAAC,aAAD,OADF,CADF;;;AAKD,KAjPH;;AAmPUO,IAAAA,YAnPV,GAmPyB,YAAM;AAC3B,UAAI,MAAKC,mBAAT,EAA8B;AAC5B,eAAO,MAAKV,KAAL,CAAWW,QAAlB;AACD;AACD,UAAM1B,iBAAiB,GAAGjB,oBAAoB,CAAC,MAAKgC,KAAL,CAAWW,QAAZ,EAAsB,MAAKX,KAAL,CAAWY,kBAAjC,CAA9C;;AAEA,aAAOlE,KAAK,CAACmE,QAAN,CAAeC,GAAf,CAAmB,MAAKd,KAAL,CAAWW,QAA9B,EAAwC,UAACI,KAAD,EAAQC,KAAR,EAAkB;AAC/D,YAAI,OAAOD,KAAP,KAAiB,QAAjB,IAA6B,OAAOA,KAAP,KAAiB,QAA9C,IAA0D1D,UAAU,CAAC0D,KAAD,CAAxE,EAAiF;AAC/E,iBAAOA,KAAP;AACD;;AAED,YAAME,aAAa,GAAGrD,0BAA0B,CAACmD,KAAD,EAAQ9B,iBAAR,CAAhD;;AAEA,YAAIZ,eAAe,CAAC4C,aAAD,CAAnB,EAAoC;AAClC,cAAMC,SAAS,GAAG,MAAKrC,KAAL,CAAWC,gBAAX,KAAgCkC,KAAlD;;AAEA,cAAIG,GAAG,GAAGF,aAAa,CAACE,GAAxB;AACA,cAAID,SAAS,IAAI,OAAOD,aAAa,CAACE,GAArB,KAA6B,QAA9C,EAAwD;AACtDA,YAAAA,GAAG,GAAG,MAAKC,cAAL,CAAoBC,IAApB,gCAA+BJ,aAAa,CAACE,GAA7C,CAAN;AACD;;AAED,8BAAOzE,KAAK,CAAC4E,YAAN,CAA4CL,aAA5C,EAA2D;AAChEE,YAAAA,GAAG,EAAHA,GADgE;AAEhEtC,YAAAA,KAAK,EAAEqC,SAAS,GAAG,OAAH,GAAaD,aAAa,CAACjB,KAAd,CAAoBnB,KAFe;AAGhE0C,YAAAA,OAAO,EAAE,MAAKC,MAAL,CAAYH,IAAZ,gCAAuBL,KAAvB,EAA8B,KAA9B,CAHuD;AAIhES,YAAAA,YAAY,EAAE,MAAKP,SAAL,CAAeG,IAAf,gCAA0BL,KAA1B,CAJkD;AAKhEU,YAAAA,YAAY,EAAE,MAAKC,WAL6C,EAA3D,CAAP;;AAOD;;AAED,eAAOV,aAAP;AACD,OAzBM,CAAP;AA0BD,KAnRH;;AAqRUW,IAAAA,mBArRV,GAqRgC,YAAM;AAClC,WAAK,IAAIC,CAAC,GAAG,MAAKlD,QAAL,GAAgBmD,wBAA7B,EAAuDD,CAAC,GAAG,CAAC,CAA5D,EAA+DA,CAAC,EAAhE,EAAoE;AAClE,cAAKE,IAAL;AACD;AACF,KAzRH;;AA2RUC,IAAAA,0BA3RV,GA2RuC,UAACC,SAAD,EAAmC;AACtE,wBAAqC,MAAKjC,KAA1C,CAAQF,MAAR,eAAQA,MAAR,CAAgBQ,MAAhB,eAAgBA,MAAhB,CAAwBK,QAAxB,eAAwBA,QAAxB;AACA,UAAM5B,SAAS,GAAG,MAAKJ,QAAL,GAAgBI,SAAlC;AACA,UAAMmD,aAAa,GAAGD,SAAS,CAAClD,SAAhC;AACA,UAAMoD,UAAU,GAAGF,SAAS,CAACnC,MAA7B;AACA,UAAMsC,UAAU,GAAGH,SAAS,CAAC3B,MAA7B;AACA,UAAM+B,iBAAiB,GAAG3F,KAAK,CAACmE,QAAN,CAAeyB,KAAf,CAAqBL,SAAS,CAACtB,QAA/B,CAA1B;;AAEA;AACE5B,QAAAA,SAAS,KAAKmD,aAAd;AACA5B,QAAAA,MAAM,KAAK8B,UADX;AAEAtC,QAAAA,MAAM,KAAKqC,UAFX;AAGAzF,QAAAA,KAAK,CAACmE,QAAN,CAAeyB,KAAf,CAAqB3B,QAArB,MAAmC0B,iBAJrC;;AAMD,KAzSH;;AA2SUE,IAAAA,kBA3SV,GA2S+B,YAAM;AACjC,UAAMxD,SAAS,GAAG,MAAKJ,QAAL,GAAgBI,SAAlC;AACA,UAAIyD,eAAe,GAAGzD,SAAtB;AACA,UAAMpB,QAAQ,GAAGD,WAAW,+BAA5B;;AAEA,UAAI,OAAOqB,SAAP,KAAqB,QAArB,IAAiCnC,SAAS,CAACD,YAAD,CAA1C,IAA4DgB,QAAhE,EAA0E;AACxE,YAAM8E,oBAAoB,GAAG9F,YAAY,CAAC+F,gBAAhB,oBAAG/F,YAAY,CAAC+F,gBAAb,CAAgC/E,QAAhC,EAA0CoB,SAAvE;;AAEA,YAAI0D,oBAAJ,EAA0B;AACxBD,UAAAA,eAAe,GAAGG,UAAU,CAACF,oBAAD,CAA5B;AACD;AACF;;AAED,UAAMG,mBAAmB;AACvB,aAAOJ,eAAP,KAA2B,QAA3B;AACIA,MAAAA,eAAe;AACb,YAAK1C,MAAL,IAAe5C,UAAU,CAAC,MAAK4C,MAAN,CAAV,CAAwB+C,MAAxC,IAAmD,CADrC,CAAf;AAEE,YAAKvC,MAAL,IAAepD,UAAU,CAAC,MAAKoD,MAAN,CAAV,CAAwBuC,MAAxC,IAAmD,CAFpD,CADJ;AAII9D,MAAAA,SALN;;AAOA,YAAK+D,QAAL,CAAc;AACZ/D,QAAAA,SAAS,EAAE6D,mBAAmB,IAAI,MADtB,EAAd;;AAGD,KAlUH;;AAoUUG,IAAAA,kBApUV,GAoU+B,UAACC,eAAD,EAAgD;AAC3E,YAAKA,eAAL,GAAuBA,eAAvB;AACD,KAtUH;;;;;;;;;;;;;AAmVUC,IAAAA,gBAnVV,GAmV6B,YAAM;AAC/B,UAAMC,eAAe,GAAG,MAAKxC,mBAAL,GAA2B,MAAKrB,cAAL,CAAoB6D,eAA/C,GAAiE,MAAKC,WAA9F;AACA,UAAI,MAAKH,eAAL,IAAwBE,eAA5B,EAA6C;AAC3C,YAAMvF,SAAQ,GAAGD,WAAW,CAACwF,eAAD,CAA5B;AACA;AACA,YAAIjF,YAAY,CAACN,SAAD,EAAWhB,YAAY,CAAC6C,WAAxB,CAAhB,EAAsD;AACpD,gBAAKwD,eAAL,CAAqBI,QAArB,CAA8BzF,SAA9B;AACD;AACF;AACF,KA5VH;;AA8VU0F,IAAAA,WA9VV,GA8VwB,YAAM;AAC1B,UAAI,MAAKL,eAAT,EAA0B;AACxB,cAAKA,eAAL,CAAqBK,WAArB;AACD;AACF,KAlWH;;AAoWUC,IAAAA,cApWV,GAoW2B,YAAM;AAC7B,UAAI,MAAKN,eAAT,EAA0B;AACxB,cAAKA,eAAL,CAAqBM,cAArB;AACD;AACF,KAxWH;;AA0WUC,IAAAA,MA1WV,GA0WmB,UAACC,SAAD,EAAuB;AACtC,cAAQA,SAAR;AACE,aAAK,CAAL;AACE,gBAAKH,WAAL,0BAAKA,WAAL;AACA;AACF,aAAK,MAAKhE,cAAL,CAAoBoE,KAApB,CAA0BC,MAA1B,GAAmC,CAAxC;AACE,gBAAKJ,cAAL,0BAAKA,cAAL;AACA;AACF;AACE,gBAAKL,gBAAL,0BAAKA,gBAAL,GARJ;;AAUD,KArXH;;;;;;;;;;;;;;;;;;;;;;;AA4YU/B,IAAAA,SA5YV,GA4YsB,UAACF,KAAD,EAAmB;AACrC,YAAK8B,QAAL,CAAc,EAAEhE,gBAAgB,EAAEkC,KAApB,EAAd;AACD,KA9YH;;AAgZUW,IAAAA,WAhZV,GAgZwB,YAAM;AAC1B,YAAKmB,QAAL,CAAc,EAAEhE,gBAAgB,EAAE,CAAC,CAArB,EAAd;AACD,KAlZH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAycU6E,IAAAA,aAzcV,GAyc0B,UAACC,KAAD,EAAsD;AAC5E,UAAI,OAAO,MAAK5D,KAAL,CAAW6D,SAAlB,KAAgC,UAApC,EAAgD;AAC9C,cAAK7D,KAAL,CAAW6D,SAAX,CAAqBD,KAArB;AACD;;AAED,UAAIA,KAAK,CAACE,gBAAV,EAA4B;AAC1B;AACD;;AAED,UAAIhH,YAAY,CAAC8G,KAAD,CAAhB,EAAyB;AACvBA,QAAAA,KAAK,CAACG,cAAN;AACA,cAAKC,EAAL;AACD,OAHD,MAGO,IAAInH,cAAc,CAAC+G,KAAD,CAAlB,EAA2B;AAChCA,QAAAA,KAAK,CAACG,cAAN;AACA,cAAKhC,IAAL;AACD,OAHM,MAGA,IAAIhF,UAAU,CAAC6G,KAAD,CAAd,EAAuB;AAC5B,YAAI,MAAKlD,mBAAT,EAA8B;AAC5B,gBAAKrB,cAAL,CAAoBmC,MAApB,CAA2BoC,KAA3B;AACD,SAFD,MAEO,IAAI,MAAKT,WAAL,IAAoB,MAAKA,WAAL,CAAiBnD,KAAjB,CAAuBuB,OAA/C,EAAwD;AAC7D,gBAAK4B,WAAL,CAAiBnD,KAAjB,CAAuBuB,OAAvB,CAA+BqC,KAA/B;AACD;AACF;AACF,KA/dH;;AAieUK,IAAAA,QAjeV,GAieqB,UAACjE,KAAD,EAAqC;AACtD,UAAIA,KAAK,CAACkE,KAAN,KAAgB,OAApB,EAA6B;AAC3B,eAAO;AACLC,UAAAA,QAAQ,EAAEnE,KAAK,CAACoE,KADX;AAELC,UAAAA,QAAQ,EAAErE,KAAK,CAACoE,KAFX;AAGLrF,UAAAA,SAAS,EAAE,MAAKF,KAAL,CAAWE,SAHjB,EAAP;;AAKD;;AAED,aAAO;AACLqF,QAAAA,KAAK,EAAEpE,KAAK,CAACoE,KADR;AAELrF,QAAAA,SAAS,EAAE,MAAKF,KAAL,CAAWE,SAFjB,EAAP;;AAID,KA9eH;;AAgfUuF,IAAAA,uBAhfV,GAgfoC,UAACtF,WAAD,EAA6C;AAC7E,UAAI,MAAKH,KAAL,CAAWG,WAAX,KAA2BA,WAA/B,EAA4C;AAC1C,cAAK8D,QAAL,CAAc,EAAE9D,WAAW,EAAXA,WAAF,EAAd;AACD;AACF,KApfH;;AAsfUuF,IAAAA,oBAtfV,GAsfiC,UAACvG,oBAAD,EAAmC;AAChE,OAAC,MAAKW,QAAL,GAAgBiC,kBAAjB,IAAuC,MAAKkC,QAAL,CAAc,EAAE7D,iBAAiB,EAAEjB,oBAArB,EAAd,CAAvC;AACD,KAxfH,kDAmCSwG,oBAnCT,GAmCE,gCAA8B,CAC5B,KAAKtF,SAAL,GAAiB,IAAjB,CACD,CArCH,QAuCSuF,iBAvCT,GAuCE,6BAA2B,CACzB,KAAK7C,mBAAL,GACA,KAAKW,kBAAL,GACD,CA1CH,QA4CSmC,kBA5CT,GA4CE,4BAA0BzC,SAA1B,EAAgD,CAC9C,IAAI,KAAKD,0BAAL,CAAgCC,SAAhC,CAAJ,EAAgD,CAC9C,KAAKM,kBAAL,GACD,CAED,IAAIN,SAAS,CAAClD,SAAV,KAAwB,KAAKJ,QAAL,GAAgBI,SAA5C,EAAuD,CACrD,KAAK+D,QAAL,CAAc,EACZ/D,SAAS,EAAE,KAAKiB,KAAL,CAAWjB,SAAX,IAAwB,MADvB,EAAd,EAGD,CACF,CAtDH,QAwDSU,KAxDT,GAwDE,iBAAe,CACb,KAAKF,kBAAL,GACD,CA1DH,QAmESoF,MAnET,GAmEE,kBAAgB,mBACd,oBACE,oBAAC,0BAAD,CAA4B,QAA5B,QACG,UAACC,KAAD,EAAW,CACV,MAAI,CAAClE,mBAAL,GAA2BxC,0BAA0B,CAAC0G,KAAD,CAA1B,CAAkClE,mBAA7D,CACA,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACR,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAAC2E,UAAL,EAAP,CACD,CAJH,CADF,CAQD,CAXH,CADF,CAeD,CAnFH,CAqFE;AACF;AACA,KAvFA,QAwFSb,EAxFT,GAwFE,cAAY,CACV,KAAKc,IAAL,CAAU,CAAC,CAAX,EACD,CA1FH,CA4FE;AACF;AACA,KA9FA,QA+FS/C,IA/FT,GA+FE,gBAAc,CACZ,KAAK+C,IAAL,CAAU,CAAV,EACD,CAjGH,CAmGE;AACF;AACA,KArGA,QAsGSC,KAtGT,GAsGE,eAAanB,KAAb,EAAuD,CACrD,IAAI,KAAKlD,mBAAT,EAA8B,2BAC5B,8BAAKrB,cAAL,CAAoB6D,eAApB,2CAAqC8B,QAArC,GACA,OAAO,KAAK3F,cAAL,CAAoBmC,MAApB,CAA2BoC,KAA3B,CAAP,CACD,CACD,OAAO,KAAKpC,MAAL,CAAY,KAAK3C,KAAL,CAAWC,gBAAvB,EAAyC,IAAzC,EAA+C8E,KAA/C,CAAP,CACD,CA5GH,CA8GE;AACF;AACA,KAhHA,QAiHSqB,KAjHT,GAiHE,iBAAe,CACb,IAAI,KAAKvE,mBAAT,EAA8B,CAC5B,KAAKrB,cAAL,CAAoB4F,KAApB,GACD,CAFD,MAEO,CACL,KAAKnC,QAAL,CAAc,EAAEhE,gBAAgB,EAAE,CAAC,CAArB,EAAd,EACD,CACF,CAvHH,CAyHE;AACF;AACA,KA3HA,QA4HSoG,kBA5HT,GA4HE,8BAA4B,CAC1B,IAAI,KAAKxE,mBAAT,EAA8B,CAC5B,OAAO,CAAC,CAAC,KAAKrB,cAAL,CAAoB6D,eAA7B,CACD,CACD,OAAO,KAAKrE,KAAL,CAAWC,gBAAX,KAAgC,CAAC,CAAxC,CACD,CAjIH,QAmISqG,aAnIT,GAmIE,uBAAqBnE,KAArB,EAAoC,CAClC,IAAI,KAAKN,mBAAT,EAA8B,CAC5B,KAAKrB,cAAL,CAAoB+F,gBAApB,CAAqCpE,KAArC,EACD,CAFD,MAEO,CACL,KAAKE,SAAL,CAAeF,KAAf,EACD,CACF,CAzIH,QA2IU6D,UA3IV,GA2IE,sBAAqB,gBACnB,IAAI,KAAKQ,OAAL,EAAJ,EAAoB,CAClB,OAAO,IAAP,CACD,CACD,qBAAsD,KAAK1G,QAAL,EAAtD,CAAQ2G,SAAR,kBAAQA,SAAR,CAAmBvG,SAAnB,kBAAmBA,SAAnB,CAA8BwG,mBAA9B,kBAA8BA,mBAA9B,CAEA,IAAMC,OAAO,GAAGzH,WAAW,CAAC,KAAKmC,KAAN,CAAX,GACZ,EACEuF,GAAG,OAAK,KAAKvF,KAAL,CAAWwF,+BADrB,EAEEC,KAAK,EAAE,CAFT,EAGEC,MAAM,OAAK,KAAK1F,KAAL,CAAWwF,+BAHxB,EADY,GAMZ,EANJ,CAQA,IAAMG,QAAQ,GAAG,KAAKC,cAAtB,CACA,oBACE,6BACE,YAAUtH,YAAY,CAACC,IADzB,EAEE,SAAS,EAAEhB,EAAE,CAACsI,kBAAkB,CAAC,KAAK/F,KAAN,CAAnB,mBACV5B,MAAM,CAACK,IAAP,CAAY,KAAKyB,KAAjB,CADU,IACgB,IADhB,OAEV9B,MAAM,CAAC4H,UAAP,CAAkB,KAAK9F,KAAvB,CAFU,IAEsB2F,QAFtB,OAGVzH,MAAM,CAAC6H,MAAP,CAAc,KAAK/F,KAAnB,CAHU,IAGkBoF,SAAS,IAAI,CAACO,QAHhC,QAFf,EAOE,KAAK,EAAE,KAAK5B,QAAL,CAAc,KAAKjE,KAAnB,CAPT,EAQE,EAAE,EAAE,KAAKA,KAAL,CAAWkG,EARjB,EASE,SAAS,EAAE,KAAKvC,aATlB,EAUE,GAAG,EAAE,KAAKwC,WAVZ,EAWE,QAAQ,EAAE,CAXZ,IAaG,KAAKnG,KAAL,CAAWF,MAAX,IAAqB,KAAKJ,YAAL,EAbxB,eAcE,oBAAC,eAAD,IACE,GAAG,EAAE,KAAKqD,kBADZ,EAEE,SAAS,EAAEhE,SAFb,EAGE,mBAAmB,EAAEwG,mBAHvB,EAIE,mBAAmB,EAAE,KAAKjB,uBAJ5B,EAKE,QAAQ,EAAE,KAAKtE,KAAL,CAAWoG,sBALvB,EAME,OAAO,EAAEZ,OANX,iBAQE,6BACE,SAAS,EAAE/H,EAAE,kBACVW,MAAM,CAAC4E,eAAP,CAAuB,KAAK9C,KAA5B,CADU,IAC2B,IAD3B,OAEV9B,MAAM,CAACiI,qBAAP,CAA6B,KAAKnG,KAAlC,CAFU,IAEiC2F,QAFjC,QADf,EAKE,GAAG,EAAE,KAAK1G,UALZ,iBAOE,oBAAC,WAAD,CAAa,QAAb,IACE,KAAK,EAAE,EACLmH,UAAU,EAAE,KAAKjH,cADZ,EAELkH,WAAW,EAAE,KAAKvG,KAAL,CAAWuG,WAFnB,EAGLtH,iBAAiB,EAAE,KAAKJ,KAAL,CAAWI,iBAHzB,EAILsF,oBAAoB,EAAE,KAAKA,oBAJtB,EADT,IAQG,KAAK9D,YAAL,EARH,CAPF,CARF,CAdF,EAyCG,KAAKT,KAAL,CAAWM,MAAX,IAAqB,KAAKF,YAAL,EAzCxB,CADF,CA6CD,CAvMH,QAwUUgB,cAxUV,GAwUE,wBACEoF,WADF,EAEEC,QAFF,EAGE,CACA,KAAKtD,WAAL,GAAmBsD,QAAnB,CAEA,IAAI,OAAOD,WAAP,KAAuB,UAA3B,EAAuC,CACrCA,WAAW,CAACC,QAAD,CAAX,CACD,CACF,CAjVH,QAuXUjF,MAvXV,GAuXE,gBAAeR,KAAf,EAA8B0F,gBAA9B,EAAyD9C,KAAzD,EAA4G,CAC1G,IAAM+C,IAAI,GAAGC,eAAe,CAAC,KAAK5G,KAAL,CAAWW,QAAZ,CAAf,CAAqCK,KAArC,CAAb,CACA,IAAI3C,eAAe,CAACsI,IAAD,CAAf,IAAyB/J,SAAS,CAACD,YAAD,CAAtC,EAAsD,CACpD,IAAI+J,gBAAgB,IAAIC,IAAI,CAAC3G,KAAL,CAAW6G,IAAnC,EAAyC,CACvC,IAAIF,IAAI,CAAC3G,KAAL,CAAW8G,MAAf,EAAuB,CACrBnK,YAAY,CAACoK,IAAb,CAAkBJ,IAAI,CAAC3G,KAAL,CAAW6G,IAA7B,EAAmCF,IAAI,CAAC3G,KAAL,CAAW8G,MAA9C,EACD,CAFD,MAEO,CACLnK,YAAY,CAACqK,QAAb,CAAsBH,IAAtB,GAA6BF,IAAI,CAAC3G,KAAL,CAAW6G,IAAxC,CACD,CACF,CACD,IAAIF,IAAI,CAAC3G,KAAL,CAAWuB,OAAf,EAAwB,CACtBoF,IAAI,CAAC3G,KAAL,CAAWuB,OAAX,CAAmBqC,KAAnB,EACD,CACD,IAAI,KAAK5D,KAAL,CAAWuG,WAAf,EAA4B,CAC1B,KAAKvG,KAAL,CAAWuG,WAAX,CAAuB3C,KAAvB,EACD,CACD,OAAO,IAAP,CACD,CACD,OAAO,KAAP,CACD,CA1YH,QAoZUkB,IApZV,GAoZE,cAAamC,IAAb,EAA2B,mBACzB,IAAI,KAAK/H,SAAT,EAAoB,CAClB;AACA,aACD,CACD,IAAI,KAAKwB,mBAAT,EAA8B,CAC5B,IAAM8C,SAAS,GAAG,KAAKnE,cAAL,CAAoByF,IAApB,CAAyBmC,IAAzB,EAA+B,KAAKtI,QAAL,GAAgBuI,eAA/C,CAAlB,CACA,KAAK3D,MAAL,CAAYC,SAAZ,EACD,CAHD,MAGO,yBACL,IAAM7C,QAAQ,GAAGiG,eAAe,CAAC,MAAI,CAAC5G,KAAL,CAAWW,QAAZ,CAAhC,CACA,IAAMwG,cAAc,GAAGxG,QAAQ,CAACyG,MAAT,CAAgB/I,eAAhB,CAAvB,CACA,IAAI,CAAC8I,cAAc,CAACzD,MAApB,EAA4B,CAC1B,qBACD,CACD,IAAI1C,KAAK,GAAG,MAAI,CAACnC,KAAL,CAAWC,gBAAvB,CANK,8BAQHkC,KAAK,IAAIiG,IAAT,CAEA,IAAI,CAAC,MAAI,CAACtI,QAAL,GAAgBuI,eAAjB,KAAqClG,KAAK,GAAG,CAAR,IAAaA,KAAK,GAAGL,QAAQ,CAAC+C,MAAnE,CAAJ,EAAgF,CAC9E,4BACD,CAED,IAAI1C,KAAK,GAAG,CAAZ,EAAe,CACbA,KAAK,GAAGL,QAAQ,CAAC+C,MAAT,GAAkB,CAA1B,CACD,CAFD,MAEO,IAAI1C,KAAK,GAAGL,QAAQ,CAAC+C,MAArB,EAA6B,CAClC1C,KAAK,GAAG,CAAR,CACD,CAED,IAAMD,KAAK,GAAGJ,QAAQ,CAACK,KAAD,CAAtB,CACA,IAAI3C,eAAe,CAAC0C,KAAD,CAAnB,EAA4B,CAC1B,MAAI,CAAC+B,QAAL,CAAc,EAAEhE,gBAAgB,EAAEkC,KAApB,EAAd,EAA2C,YAAM,CAC/C,QAAQmG,cAAc,CAACE,OAAf,CAAuBtG,KAAvB,CAAR,GACE,KAAK,CAAL,CACE,MAAI,CAACsC,WAAL,GACA,MACF,KAAK8D,cAAc,CAACzD,MAAf,GAAwB,CAA7B,CACE,MAAI,CAACJ,cAAL,GACA,MACF,QACE,MAAI,CAACL,gBAAL,GARJ,CAUD,CAXD,EAYA,4BACD,CAnCE,EAOL,GAAG,mEA6BF,CA7BD,QA6BSjC,KAAK,KAAK,MAAI,CAACnC,KAAL,CAAWC,gBA7B9B,EAPK,gDAqCN,CACF,CAlcH,QAocUuG,OApcV,GAocE,mBAAkB,CAChB,IAAQ1E,QAAR,GAAqB,KAAKX,KAA1B,CAAQW,QAAR,CACA,OAAO,CAACA,QAAD,IAAa,CAACiG,eAAe,CAACjG,QAAD,CAAf,CAA0ByG,MAA1B,CAAiChK,aAAjC,EAAgDsG,MAArE,CACD,CAvcH,eAA0BhH,KAAK,CAAC4K,aAAhC,WACgBC,mBADhB,GACsC,MADtC,UAEgBC,WAFhB,GAE8B,MAF9B,UAIgB5I,YAJhB,GAI6C,EACzCsF,KAAK,EAAE,MADkC,EAEzCE,KAAK,EAAE,MAFkC,EAGzCrF,SAAS,EAAE,GAH8B,EAIzCuG,SAAS,EAAE,IAJ8B,EAKzCC,mBAAmB,EAAE,IALoB,EAMzC2B,eAAe,EAAE,IANwB,EAOzCpF,wBAAwB,EAAE,CAAC,CAPc,EAJ7C,+BA2fA,SAAS8E,eAAT,CAAyBjG,QAAzB,EAAuE,CACrE,IAAM8G,GAAsB,GAAG,EAA/B,CADqE,CAErE;AACA/K,EAAAA,KAAK,CAACmE,QAAN,CAAe6G,OAAf,CAAuB/G,QAAvB,EAAiC,UAACI,KAAD,EAAW,CAC1C0G,GAAG,CAACE,IAAJ,CAAS5G,KAAT,EACD,CAFD,EAGA,OAAO0G,GAAP,CACD,CAED,IAAM1B,kBAAkB,GAAG,SAArBA,kBAAqB,CAAC/F,KAAD,EAAsB;AAC/C,MAAIA,KAAK,CAACkE,KAAN,KAAgB,OAApB,EAA6B;AAC3B,WAAOzG,EAAE;AACNW,IAAAA,MAAM,CAACwJ,UAAP,EADM,IACgB,CAAC/J,MADjB;AAENO,IAAAA,MAAM,CAACyJ,cAAP,EAFM,IAEoBhK,MAFpB;AAGNO,IAAAA,MAAM,CAAC0J,0BAAP,EAHM,IAGgCjK,MAAM,IAAImC,KAAK,CAACoE,KAAN,KAAgB,MAH1D,QAAT;;AAKD;;AAED,SAAO,IAAP;AACD,CAVD","sourcesContent":["import React, { CSSProperties, HTMLAttributes } from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { MenuSeparator } from '../../components/MenuSeparator';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { isNonNullable, isNullable } from '../../lib/utils';\nimport { ScrollContainer, ScrollContainerScrollState } from '../../components/ScrollContainer';\nimport { MenuItem, MenuItemDataTids, MenuItemProps } from '../../components/MenuItem';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { addIconPaddingIfPartOfMenu } from '../InternalMenu/addIconPaddingIfPartOfMenu';\nimport { isIE11 } from '../../lib/client';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { isIconPaddingEnabled } from '../InternalMenu/isIconPaddingEnabled';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\n\nimport { styles } from './Menu.styles';\nimport { isActiveElement } from './isActiveElement';\nimport { MenuNavigation } from './MenuNavigation';\nimport { MenuContext } from './MenuContext';\n\nexport interface MenuProps extends Pick<HTMLAttributes<HTMLDivElement>, 'id'> {\n children: React.ReactNode;\n hasShadow?: boolean;\n /**\n * Максимальная высота применяется только для скролл контейнера\n *\n * Высота `header` и `footer` в нее не включены\n */\n maxHeight?: number | string;\n onItemClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n /**\n * Отключение кастомного скролла контейнера\n */\n disableScrollContainer?: boolean;\n align?: 'left' | 'right';\n /**\n * Предотвращает выравнивание текста всех пунктов меню относительно друг друга.\n * Так, если хотя бы у одного пункта меню есть иконка, текст в остальных пунктах меню будет выровнен относительно пункта меню с иконкой\n */\n preventIconsOffset?: boolean;\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n /**\n * Циклический перебор айтемов меню (по-дефолтну включен)\n */\n cyclicSelection?: boolean;\n initialSelectedItemIndex?: number;\n}\n\nexport interface MenuState {\n highlightedIndex: number;\n maxHeight: number | string;\n scrollState: ScrollContainerScrollState;\n enableIconPadding: boolean;\n}\n\nexport const MenuDataTids = {\n root: 'Menu__root',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n MenuProps,\n | 'align'\n | 'width'\n | 'maxHeight'\n | 'hasShadow'\n | 'preventWindowScroll'\n | 'cyclicSelection'\n | 'initialSelectedItemIndex'\n >\n>;\n\n@responsiveLayout\n@rootNode\nexport class Menu extends React.PureComponent<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'Menu';\n public static displayName = 'Menu';\n\n public static defaultProps: DefaultProps = {\n align: 'left',\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n cyclicSelection: true,\n initialSelectedItemIndex: -1,\n };\n\n private getProps = createPropsGetter(Menu.defaultProps);\n\n public state: MenuState = {\n highlightedIndex: -1,\n maxHeight: this.getProps().maxHeight || 'none',\n scrollState: 'top',\n enableIconPadding: false,\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private isMobileLayout!: boolean;\n private highlighted: Nullable<MenuItem>;\n private unmounted = false;\n private setRootNode!: TSetRootNode;\n private header: Nullable<HTMLDivElement>;\n private footer: Nullable<HTMLDivElement>;\n private contentRef = React.createRef<HTMLDivElement>();\n private menuNavigation: MenuNavigation<MenuItem> = new MenuNavigation(this.contentRef, MenuItemDataTids.content);\n private menuItemsAtAnyLevel?: boolean;\n\n public componentWillUnmount() {\n this.unmounted = true;\n }\n\n public componentDidMount() {\n this.setInitialSelection();\n this.calculateMaxHeight();\n }\n\n public componentDidUpdate(prevProps: MenuProps) {\n if (this.shouldRecalculateMaxHeight(prevProps)) {\n this.calculateMaxHeight();\n }\n\n if (prevProps.maxHeight !== this.getProps().maxHeight) {\n this.setState({\n maxHeight: this.props.maxHeight || 'none',\n });\n }\n }\n\n public focus() {\n this.focusOnRootElement();\n }\n\n private focusOnRootElement = (): void => {\n const rootNode = getRootNode(this);\n if (isInstanceOf(rootNode, globalObject.HTMLElement)) {\n rootNode?.focus();\n }\n };\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.menuItemsAtAnyLevel = getFullReactUIFlagsContext(flags).menuItemsAtAnyLevel;\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public up() {\n this.move(-1);\n }\n\n /**\n * @public\n */\n public down() {\n this.move(1);\n }\n\n /**\n * @public\n */\n public enter(event: React.SyntheticEvent<HTMLElement>) {\n if (this.menuItemsAtAnyLevel) {\n this.menuNavigation.highlightedItem?.navigate();\n return this.menuNavigation.select(event);\n }\n return this.select(this.state.highlightedIndex, true, event);\n }\n\n /**\n * @public\n */\n public reset() {\n if (this.menuItemsAtAnyLevel) {\n this.menuNavigation.reset();\n } else {\n this.setState({ highlightedIndex: -1 });\n }\n }\n\n /**\n * @public\n */\n public hasHighlightedItem() {\n if (this.menuItemsAtAnyLevel) {\n return !!this.menuNavigation.highlightedItem;\n }\n return this.state.highlightedIndex !== -1;\n }\n\n public highlightItem(index: number) {\n if (this.menuItemsAtAnyLevel) {\n this.menuNavigation.highlightByIndex(index);\n } else {\n this.highlight(index);\n }\n }\n\n private renderMain() {\n if (this.isEmpty()) {\n return null;\n }\n const { hasShadow, maxHeight, preventWindowScroll } = this.getProps();\n\n const offsetY = isTheme2022(this.theme)\n ? {\n top: `${this.theme.scrollContainerScrollBarOffsetY}`,\n right: 0,\n bottom: `${this.theme.scrollContainerScrollBarOffsetY}`,\n }\n : {};\n\n const isMobile = this.isMobileLayout;\n return (\n <div\n data-tid={MenuDataTids.root}\n className={cx(getAlignRightClass(this.props), {\n [styles.root(this.theme)]: true,\n [styles.mobileRoot(this.theme)]: isMobile,\n [styles.shadow(this.theme)]: hasShadow && !isMobile,\n })}\n style={this.getStyle(this.props)}\n id={this.props.id}\n onKeyDown={this.handleKeyDown}\n ref={this.setRootNode}\n tabIndex={0}\n >\n {this.props.header && this.renderHeader()}\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={maxHeight}\n preventWindowScroll={preventWindowScroll}\n onScrollStateChange={this.handleScrollStateChange}\n disabled={this.props.disableScrollContainer}\n offsetY={offsetY}\n >\n <div\n className={cx({\n [styles.scrollContainer(this.theme)]: true,\n [styles.scrollContainerMobile(this.theme)]: isMobile,\n })}\n ref={this.contentRef}\n >\n <MenuContext.Provider\n value={{\n navigation: this.menuNavigation,\n onItemClick: this.props.onItemClick,\n enableIconPadding: this.state.enableIconPadding,\n setEnableIconPadding: this.setEnableIconPadding,\n }}\n >\n {this.getChildList()}\n </MenuContext.Provider>\n </div>\n </ScrollContainer>\n {this.props.footer && this.renderFooter()}\n </div>\n );\n }\n\n private renderHeader = () => {\n return (\n <div\n className={cx({\n [styles.wrapper()]: true,\n [styles.headerWrapper()]: true,\n })}\n ref={(el) => (this.header = el)}\n >\n <div className={styles.contentWrapper()}>{this.props.header}</div>\n <div className={styles.menuSeparatorWrapper(this.theme)}>\n {this.state.scrollState !== 'top' && this.renderMenuSeparatorWithNoMargin()}\n </div>\n </div>\n );\n };\n\n private renderFooter = () => {\n return (\n <div\n className={cx({\n [styles.wrapper()]: true,\n [styles.footerWrapper()]: true,\n })}\n ref={(el) => (this.footer = el)}\n >\n <div className={styles.menuSeparatorWrapper(this.theme)}>\n {this.state.scrollState !== 'bottom' && this.renderMenuSeparatorWithNoMargin()}\n </div>\n <div className={styles.contentWrapper()}>{this.props.footer}</div>\n </div>\n );\n };\n\n private renderMenuSeparatorWithNoMargin = () => {\n return (\n <ThemeContext.Provider value={ThemeFactory.create({ menuSeparatorMarginY: '0' }, this.theme)}>\n <MenuSeparator />\n </ThemeContext.Provider>\n );\n };\n\n private getChildList = () => {\n if (this.menuItemsAtAnyLevel) {\n return this.props.children;\n }\n const enableIconPadding = isIconPaddingEnabled(this.props.children, this.props.preventIconsOffset);\n\n return React.Children.map(this.props.children, (child, index) => {\n if (typeof child === 'string' || typeof child === 'number' || isNullable(child)) {\n return child;\n }\n\n const modifiedChild = addIconPaddingIfPartOfMenu(child, enableIconPadding);\n\n if (isActiveElement(modifiedChild)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = modifiedChild.ref;\n if (highlight && typeof modifiedChild.ref !== 'string') {\n ref = this.refHighlighted.bind(this, modifiedChild.ref);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(modifiedChild, {\n ref,\n state: highlight ? 'hover' : modifiedChild.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: this.highlight.bind(this, index),\n onMouseLeave: this.unhighlight,\n });\n }\n\n return modifiedChild;\n });\n };\n\n private setInitialSelection = () => {\n for (let i = this.getProps().initialSelectedItemIndex; i > -1; i--) {\n this.down();\n }\n };\n\n private shouldRecalculateMaxHeight = (prevProps: MenuProps): boolean => {\n const { header, footer, children } = this.props;\n const maxHeight = this.getProps().maxHeight;\n const prevMaxHeight = prevProps.maxHeight;\n const prevHeader = prevProps.header;\n const prevFooter = prevProps.footer;\n const prevChildrenCount = React.Children.count(prevProps.children);\n\n return (\n maxHeight !== prevMaxHeight ||\n footer !== prevFooter ||\n header !== prevHeader ||\n React.Children.count(children) !== prevChildrenCount\n );\n };\n\n private calculateMaxHeight = () => {\n const maxHeight = this.getProps().maxHeight;\n let parsedMaxHeight = maxHeight;\n const rootNode = getRootNode(this);\n\n if (typeof maxHeight === 'string' && isBrowser(globalObject) && rootNode) {\n const rootElementMaxHeight = globalObject.getComputedStyle?.(rootNode).maxHeight;\n\n if (rootElementMaxHeight) {\n parsedMaxHeight = parseFloat(rootElementMaxHeight);\n }\n }\n\n const calculatedMaxHeight =\n typeof parsedMaxHeight === 'number'\n ? parsedMaxHeight +\n ((this.header && getDOMRect(this.header).height) || 0) +\n ((this.footer && getDOMRect(this.footer).height) || 0)\n : maxHeight;\n\n this.setState({\n maxHeight: calculatedMaxHeight || 'none',\n });\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: ((menuItem: MenuItem | null) => any) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n }\n }\n\n private scrollToSelected = () => {\n const highlightedItem = this.menuItemsAtAnyLevel ? this.menuNavigation.highlightedItem : this.highlighted;\n if (this.scrollContainer && highlightedItem) {\n const rootNode = getRootNode(highlightedItem);\n // TODO: Remove this check once IF-647 is resolved\n if (isInstanceOf(rootNode, globalObject.HTMLElement)) {\n this.scrollContainer.scrollTo(rootNode);\n }\n }\n };\n\n private scrollToTop = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToTop();\n }\n };\n\n private scrollToBottom = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToBottom();\n }\n };\n\n private scroll = (nextIndex: number) => {\n switch (nextIndex) {\n case 0:\n this.scrollToTop?.();\n break;\n case this.menuNavigation.items.length - 1:\n this.scrollToBottom?.();\n break;\n default:\n this.scrollToSelected?.();\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n if (isActiveElement(item) && isBrowser(globalObject)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n globalObject.open(item.props.href, item.props.target);\n } else {\n globalObject.location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick(event);\n }\n return true;\n }\n return false;\n }\n\n private highlight = (index: number) => {\n this.setState({ highlightedIndex: index });\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n if (this.unmounted) {\n // NOTE workaround, because `ComboBox` call `process.nextTick` in reducer\n return;\n }\n if (this.menuItemsAtAnyLevel) {\n const nextIndex = this.menuNavigation.move(step, this.getProps().cyclicSelection);\n this.scroll(nextIndex);\n } else {\n const children = childrenToArray(this.props.children);\n const activeElements = children.filter(isActiveElement);\n if (!activeElements.length) {\n return;\n }\n let index = this.state.highlightedIndex;\n do {\n index += step;\n\n if (!this.getProps().cyclicSelection && (index < 0 || index > children.length)) {\n return;\n }\n\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n this.setState({ highlightedIndex: index }, () => {\n switch (activeElements.indexOf(child)) {\n case 0:\n this.scrollToTop();\n break;\n case activeElements.length - 1:\n this.scrollToBottom();\n break;\n default:\n this.scrollToSelected();\n }\n });\n return;\n }\n } while (index !== this.state.highlightedIndex);\n }\n }\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isNonNullable).length;\n }\n\n private handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n if (typeof this.props.onKeyDown === 'function') {\n this.props.onKeyDown(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (isKeyArrowUp(event)) {\n event.preventDefault();\n this.up();\n } else if (isKeyArrowDown(event)) {\n event.preventDefault();\n this.down();\n } else if (isKeyEnter(event)) {\n if (this.menuItemsAtAnyLevel) {\n this.menuNavigation.select(event);\n } else if (this.highlighted && this.highlighted.props.onClick) {\n this.highlighted.props.onClick(event);\n }\n }\n };\n\n private getStyle = (props: MenuProps): CSSProperties => {\n if (props.align === 'right') {\n return {\n maxWidth: props.width,\n minWidth: props.width,\n maxHeight: this.state.maxHeight,\n };\n }\n\n return {\n width: props.width,\n maxHeight: this.state.maxHeight,\n };\n };\n\n private handleScrollStateChange = (scrollState: ScrollContainerScrollState) => {\n if (this.state.scrollState !== scrollState) {\n this.setState({ scrollState });\n }\n };\n\n private setEnableIconPadding = (isIconPaddingEnabled: boolean) => {\n !this.getProps().preventIconsOffset && this.setState({ enableIconPadding: isIconPaddingEnabled });\n };\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n\nconst getAlignRightClass = (props: MenuProps) => {\n if (props.align === 'right') {\n return cx({\n [styles.alignRight()]: !isIE11,\n [styles.alignRightIE11()]: isIE11,\n [styles.alignRightIE11FixAutoWidth()]: isIE11 && props.width === 'auto',\n });\n }\n\n return null;\n};\n"]}
|
package/internal/Menu/Menu.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ export declare const MenuDataTids: {
|
|
|
43
43
|
declare type DefaultProps = Required<Pick<MenuProps, 'align' | 'width' | 'maxHeight' | 'hasShadow' | 'preventWindowScroll' | 'cyclicSelection' | 'initialSelectedItemIndex'>>;
|
|
44
44
|
export declare class Menu extends React.PureComponent<MenuProps, MenuState> {
|
|
45
45
|
static __KONTUR_REACT_UI__: string;
|
|
46
|
+
static displayName: string;
|
|
46
47
|
static defaultProps: DefaultProps;
|
|
47
48
|
private getProps;
|
|
48
49
|
state: MenuState;
|
|
@@ -85,4 +85,5 @@ export var MobilePopup = /*#__PURE__*/function (_React$Component) {
|
|
|
85
85
|
|
|
86
86
|
return MobilePopup;
|
|
87
87
|
}(React.Component);
|
|
88
|
-
MobilePopup.__KONTUR_REACT_UI__ = 'MobileMenuHeader';
|
|
88
|
+
MobilePopup.__KONTUR_REACT_UI__ = 'MobileMenuHeader';
|
|
89
|
+
MobilePopup.displayName = 'MobileMenuHeader';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MobilePopup.tsx"],"names":["React","Transition","ThemeContext","RenderContainer","HideBodyVerticalScroll","ZIndex","RenderLayer","jsStyles","MobilePopupHeader","MobilePopupDataTids","root","container","MobilePopup","close","props","onCloseRequest","render","theme","renderMain","content","id","zIndex","opened","onClose","wrapper","caption","headerChildComponent","children","bottomIndent","bg","withoutRenderContainer","Component","__KONTUR_REACT_UI__"],"mappings":"sEAAA,OAAOA,KAAP,MAAsC,OAAtC;AACA,SAASC,UAAT,QAA2B,wBAA3B;;;AAGA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,eAAT,QAAgC,oBAAhC;AACA,SAASC,sBAAT,QAAuC,2BAAvC;AACA,SAASC,MAAT,QAAuB,WAAvB;AACA,SAASC,WAAT,QAA4B,gBAA5B;;AAEA,SAASC,QAAT,QAAyB,sBAAzB;AACA,SAASC,iBAAT,QAAkC,qBAAlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,OAAO,IAAMC,mBAAmB,GAAG;AACjCC,EAAAA,IAAI,EAAE,mBAD2B;AAEjCC,EAAAA,SAAS,EAAE,wBAFsB,EAA5B;;;AAKP,WAAaC,WAAb
|
|
1
|
+
{"version":3,"sources":["MobilePopup.tsx"],"names":["React","Transition","ThemeContext","RenderContainer","HideBodyVerticalScroll","ZIndex","RenderLayer","jsStyles","MobilePopupHeader","MobilePopupDataTids","root","container","MobilePopup","close","props","onCloseRequest","render","theme","renderMain","content","id","zIndex","opened","onClose","wrapper","caption","headerChildComponent","children","bottomIndent","bg","withoutRenderContainer","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"sEAAA,OAAOA,KAAP,MAAsC,OAAtC;AACA,SAASC,UAAT,QAA2B,wBAA3B;;;AAGA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,eAAT,QAAgC,oBAAhC;AACA,SAASC,sBAAT,QAAuC,2BAAvC;AACA,SAASC,MAAT,QAAuB,WAAvB;AACA,SAASC,WAAT,QAA4B,gBAA5B;;AAEA,SAASC,QAAT,QAAyB,sBAAzB;AACA,SAASC,iBAAT,QAAkC,qBAAlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,OAAO,IAAMC,mBAAmB,GAAG;AACjCC,EAAAA,IAAI,EAAE,mBAD2B;AAEjCC,EAAAA,SAAS,EAAE,wBAFsB,EAA5B;;;AAKP,WAAaC,WAAb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CSC,IAAAA,KA7CT,GA6CiB,YAAM;AACnB,UAAI,MAAKC,KAAL,CAAWC,cAAf,EAA+B;AAC7B,cAAKD,KAAL,CAAWC,cAAX;AACD;AACF,KAjDH,yDAMSC,MANT,GAME,kBAAgB,mBACd,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACC,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAACC,UAAL,EAAP,CACD,CAJH,CADF,CAQD,CAfH,QAiBSA,UAjBT,GAiBE,sBAAoB,CAClB,IAAMC,OAAO,gBACX,oBAAC,MAAD,IAAQ,EAAE,EAAE,KAAKL,KAAL,CAAWM,EAAvB,EAA2B,SAAS,EAAEb,QAAQ,CAACc,MAAT,EAAtC,EAAyD,QAAQ,EAAE,aAAnE,iBACE,oBAAC,UAAD,IAAY,MAAI,KAAKP,KAAL,CAAWQ,MAA3B,EAAmC,QAAQ,EAAE,KAAKR,KAAL,CAAWS,OAAxD,EAAiE,YAAY,MAA7E,EAA8E,aAAa,MAA3F,EAA4F,OAAO,EAAE,CAArG,iBACE,6BAAK,SAAS,EAAEhB,QAAQ,CAACiB,OAAT,EAAhB,iBACE,oBAAC,WAAD,IAAa,cAAc,EAAE,KAAKX,KAAlC,iBACE,6BAAK,YAAUJ,mBAAmB,CAACE,SAAnC,EAA8C,SAAS,EAAEJ,QAAQ,CAACI,SAAT,CAAmB,KAAKM,KAAxB,CAAzD,iBACE,6BAAK,YAAUR,mBAAmB,CAACC,IAAnC,EAAyC,SAAS,EAAEH,QAAQ,CAACG,IAAT,CAAc,KAAKO,KAAnB,CAApD,iBACE,oBAAC,iBAAD,IAAmB,OAAO,EAAE,KAAKH,KAAL,CAAWW,OAAvC,IAAiD,KAAKX,KAAL,CAAWY,oBAA5D,CADF,eAEE,6BAAK,SAAS,EAAEnB,QAAQ,CAACY,OAAT,CAAiB,KAAKF,KAAtB,CAAhB,IAA+C,KAAKH,KAAL,CAAWa,QAA1D,CAFF,CADF,eAKE,6BAAK,OAAO,EAAE,KAAKd,KAAnB,EAA0B,SAAS,EAAEN,QAAQ,CAACqB,YAAT,EAArC,GALF,CADF,CADF,eAUE,6BAAK,SAAS,EAAErB,QAAQ,CAACsB,EAAT,EAAhB,GAVF,eAWE,oBAAC,sBAAD,OAXF,CADF,CADF,CADF,CAoBA,IAAI,KAAKf,KAAL,CAAWgB,sBAAf,EAAuC,CACrC,OAAOX,OAAP,CACD,CAED,oBAAO,oBAAC,eAAD,QAAkBA,OAAlB,CAAP,CACD,CA3CH,sBAAiCnB,KAAK,CAAC+B,SAAvC,EAAanB,W,CACGoB,mB,GAAsB,kB,CADzBpB,W,CAEGqB,W,GAAc,kB","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport { Transition } from 'react-transition-group';\n\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { RenderContainer } from '../RenderContainer';\nimport { HideBodyVerticalScroll } from '../HideBodyVerticalScroll';\nimport { ZIndex } from '../ZIndex';\nimport { RenderLayer } from '../RenderLayer';\n\nimport { jsStyles } from './MobilePopup.styles';\nimport { MobilePopupHeader } from './MobilePopupHeader';\n\ninterface MobilePopupProps extends Pick<HTMLAttributes<HTMLDivElement>, 'id'> {\n /**\n * Функция, вызываемая при закрытии всплывающего окна\n */\n onClose?: () => void;\n /**\n * Заголовок всплывающего окна, располагается в шапке\n */\n caption?: string;\n /**\n * Шапка всплывающего окна\n */\n headerChildComponent?: React.ReactNode;\n /**\n * Позволяет получить контент всплывающего окна без обёртки в виде `RenderContainer`\n */\n withoutRenderContainer?: boolean;\n /**\n * Функция, вызываемая при клике по вуали\n */\n onCloseRequest?: () => void;\n /**\n * Позволяет контролировать текущее состояние всплывающего окна\n */\n opened: boolean;\n}\n\nexport const MobilePopupDataTids = {\n root: 'MobilePopup__root',\n container: 'MobilePopup__container',\n} as const;\n\nexport class MobilePopup extends React.Component<MobilePopupProps> {\n public static __KONTUR_REACT_UI__ = 'MobileMenuHeader';\n public static displayName = 'MobileMenuHeader';\n\n private theme!: Theme;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n const content = (\n <ZIndex id={this.props.id} className={jsStyles.zIndex()} priority={'MobilePopup'}>\n <Transition in={this.props.opened} onExited={this.props.onClose} mountOnEnter unmountOnExit timeout={0}>\n <div className={jsStyles.wrapper()}>\n <RenderLayer onClickOutside={this.close}>\n <div data-tid={MobilePopupDataTids.container} className={jsStyles.container(this.theme)}>\n <div data-tid={MobilePopupDataTids.root} className={jsStyles.root(this.theme)}>\n <MobilePopupHeader caption={this.props.caption}>{this.props.headerChildComponent}</MobilePopupHeader>\n <div className={jsStyles.content(this.theme)}>{this.props.children}</div>\n </div>\n <div onClick={this.close} className={jsStyles.bottomIndent()} />\n </div>\n </RenderLayer>\n <div className={jsStyles.bg()} />\n <HideBodyVerticalScroll />\n </div>\n </Transition>\n </ZIndex>\n );\n\n if (this.props.withoutRenderContainer) {\n return content;\n }\n\n return <RenderContainer>{content}</RenderContainer>;\n }\n\n public close = () => {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n };\n}\n"]}
|
|
@@ -31,6 +31,7 @@ export declare const MobilePopupDataTids: {
|
|
|
31
31
|
};
|
|
32
32
|
export declare class MobilePopup extends React.Component<MobilePopupProps> {
|
|
33
33
|
static __KONTUR_REACT_UI__: string;
|
|
34
|
+
static displayName: string;
|
|
34
35
|
private theme;
|
|
35
36
|
render(): JSX.Element;
|
|
36
37
|
renderMain(): JSX.Element;
|
|
@@ -39,4 +39,5 @@ export var MobilePopupHeader = /*#__PURE__*/function (_React$Component) {
|
|
|
39
39
|
|
|
40
40
|
return MobilePopupHeader;
|
|
41
41
|
}(React.Component);
|
|
42
|
-
MobilePopupHeader.__KONTUR_REACT_UI__ = 'MobileMenuHeader';
|
|
42
|
+
MobilePopupHeader.__KONTUR_REACT_UI__ = 'MobileMenuHeader';
|
|
43
|
+
MobilePopupHeader.displayName = 'MobileMenuHeader';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MobilePopupHeader.tsx"],"names":["React","isNonNullable","cx","ThemeContext","jsStyles","MobilePopupHeader","render","theme","renderMain","props","caption","children","root","rootWithoutContent","container","captionWithChildren","isValidElement","Component","__KONTUR_REACT_UI__"],"mappings":"sEAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,SAASC,aAAT,QAA8B,oBAA9B;;AAEA,SAASC,EAAT,QAAmB,8BAAnB;AACA,SAASC,YAAT,QAA6B,mCAA7B;;AAEA,SAASC,QAAT,QAAyB,4BAAzB;;;;;;;;;AASA,WAAaC,iBAAb
|
|
1
|
+
{"version":3,"sources":["MobilePopupHeader.tsx"],"names":["React","isNonNullable","cx","ThemeContext","jsStyles","MobilePopupHeader","render","theme","renderMain","props","caption","children","root","rootWithoutContent","container","captionWithChildren","isValidElement","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"sEAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,SAASC,aAAT,QAA8B,oBAA9B;;AAEA,SAASC,EAAT,QAAmB,8BAAnB;AACA,SAASC,YAAT,QAA6B,mCAA7B;;AAEA,SAASC,QAAT,QAAyB,4BAAzB;;;;;;;;;AASA,WAAaC,iBAAb;;;;;;AAMSC,EAAAA,MANT,GAME,kBAAgB;AACd;AACE,0BAAC,YAAD,CAAc,QAAd;AACG,gBAACC,KAAD,EAAW;AACV,QAAA,KAAI,CAACA,KAAL,GAAaA,KAAb;AACA,eAAO,KAAI,CAACC,UAAL,EAAP;AACD,OAJH,CADF;;;AAQD,GAfH;;AAiBUA,EAAAA,UAjBV,GAiBE,sBAAqB;AACnB,sBAA8B,KAAKC,KAAnC,CAAQC,OAAR,eAAQA,OAAR,CAAiBC,QAAjB,eAAiBA,QAAjB;;AAEA;AACE;AACE,QAAA,SAAS,EAAET,EAAE;AACVE,QAAAA,QAAQ,CAACQ,IAAT,CAAc,KAAKL,KAAnB,CADU,IACkB,IADlB;AAEVH,QAAAA,QAAQ,CAACS,kBAAT,EAFU,IAEsB,CAACH,OAAD,IAAY,CAACC,QAFnC,OADf;;;AAME,mCAAK,SAAS,EAAEP,QAAQ,CAACU,SAAT,EAAhB;AACGJ,MAAAA,OAAO;AACN;AACE,QAAA,SAAS,EAAER,EAAE;AACVE,QAAAA,QAAQ,CAACM,OAAT,CAAiB,KAAKH,KAAtB,CADU,IACqB,IADrB;AAEVH,QAAAA,QAAQ,CAACW,mBAAT,EAFU,IAEuBd,aAAa,CAACU,QAAD,CAFpC,QADf;;;AAMGD,MAAAA,OANH,CAFJ;;;AAWG,mBAAAV,KAAK,CAACgB,cAAN,CAAqBL,QAArB,kBAAkC,iCAAMA,QAAN,CAXrC,CANF,CADF;;;;AAsBD,GA1CH,4BAAuCX,KAAK,CAACiB,SAA7C,EAAaZ,iB,CACGa,mB,GAAsB,kB,CADzBb,iB,CAEGc,W,GAAc,kB","sourcesContent":["import React from 'react';\n\nimport { isNonNullable } from '../../../lib/utils';\nimport { Theme } from '../../../lib/theming/Theme';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\n\nimport { jsStyles } from './MobilePopupHeader.styles';\n\ninterface MobilePopupHeaderProps {\n /**\n * Заголовок шапки\n */\n caption?: string;\n}\n\nexport class MobilePopupHeader extends React.Component<MobilePopupHeaderProps> {\n public static __KONTUR_REACT_UI__ = 'MobileMenuHeader';\n public static displayName = 'MobileMenuHeader';\n\n private theme!: Theme;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { caption, children } = this.props;\n\n return (\n <div\n className={cx({\n [jsStyles.root(this.theme)]: true,\n [jsStyles.rootWithoutContent()]: !caption && !children,\n })}\n >\n <div className={jsStyles.container()}>\n {caption && (\n <div\n className={cx({\n [jsStyles.caption(this.theme)]: true,\n [jsStyles.captionWithChildren()]: isNonNullable(children),\n })}\n >\n {caption}\n </div>\n )}\n {React.isValidElement(children) && <div>{children}</div>}\n </div>\n </div>\n );\n }\n}\n"]}
|
|
@@ -63,4 +63,5 @@ export var NativeDateInput = /*#__PURE__*/function (_React$Component) {
|
|
|
63
63
|
|
|
64
64
|
return NativeDateInput;
|
|
65
65
|
}(React.Component);
|
|
66
|
-
NativeDateInput.__KONTUR_REACT_UI__ = 'NativeDatePicker';
|
|
66
|
+
NativeDateInput.__KONTUR_REACT_UI__ = 'NativeDatePicker';
|
|
67
|
+
NativeDateInput.displayName = 'NativeDatePicker';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["NativeDateInput.tsx"],"names":["React","getDateForNative","getDateForComponent","jsStyles","DEFAULT_MIN_DATE","DEFAULT_MAX_DATE","NativeDateInput","focus","input","click","refInput","element","render","props","maxDate","minDate","value","e","onValueChange","target","inputTypeDate","disabled","Component","__KONTUR_REACT_UI__"],"mappings":"sEAAA,OAAOA,KAAP,MAAkB,OAAlB;;;;AAIA,SAASC,gBAAT,EAA2BC,mBAA3B,QAAsD,SAAtD;AACA,SAASC,QAAT,QAAyB,0BAAzB;;;;;;;;;;AAUA,IAAMC,gBAAgB,GAAG,YAAzB;AACA,IAAMC,gBAAgB,GAAG,YAAzB;;AAEA,WAAaC,eAAb
|
|
1
|
+
{"version":3,"sources":["NativeDateInput.tsx"],"names":["React","getDateForNative","getDateForComponent","jsStyles","DEFAULT_MIN_DATE","DEFAULT_MAX_DATE","NativeDateInput","focus","input","click","refInput","element","render","props","maxDate","minDate","value","e","onValueChange","target","inputTypeDate","disabled","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"sEAAA,OAAOA,KAAP,MAAkB,OAAlB;;;;AAIA,SAASC,gBAAT,EAA2BC,mBAA3B,QAAsD,SAAtD;AACA,SAASC,QAAT,QAAyB,0BAAzB;;;;;;;;;;AAUA,IAAMC,gBAAgB,GAAG,YAAzB;AACA,IAAMC,gBAAgB,GAAG,YAAzB;;AAEA,WAAaC,eAAb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BSC,IAAAA,KA7BT,GA6BiB,YAAM;AACnB,UAAI,MAAKC,KAAT,EAAgB;AACd,cAAKA,KAAL,CAAWD,KAAX;AACD;AACF,KAjCH;;;;;AAsCSE,IAAAA,KAtCT,GAsCiB,YAAM;AACnB,UAAI,MAAKD,KAAT,EAAgB;AACd,cAAKA,KAAL,CAAWC,KAAX;AACD;AACF,KA1CH;;AA4CUC,IAAAA,QA5CV,GA4CqB,UAACC,OAAD,EAAyC;AAC1D,YAAKH,KAAL,GAAaG,OAAb;AACD,KA9CH,6DAMSC,MANT,GAME,kBAAgB,mBACd,oBACE,+BACE,IAAI,EAAE,MADR,EAEE,GAAG,EAAE,KAAKC,KAAL,CAAWC,OAAX,GAAqBb,gBAAgB,CAAC,KAAKY,KAAL,CAAWC,OAAZ,CAArC,GAA4DT,gBAFnE,EAGE,GAAG,EAAE,KAAKQ,KAAL,CAAWE,OAAX,GAAqBd,gBAAgB,CAAC,KAAKY,KAAL,CAAWE,OAAZ,CAArC,GAA4DX,gBAHnE,EAIE,KAAK,EAAEH,gBAAgB,CAAC,KAAKY,KAAL,CAAWG,KAAZ,CAJzB,EAKE,QAAQ,EAAE,kBAACC,CAAD,EAAO,CACf,IAAI,MAAI,CAACJ,KAAL,CAAWK,aAAf,EAA8B,CAC5B,MAAI,CAACL,KAAL,CAAWK,aAAX,CAAyBhB,mBAAmB,CAACe,CAAC,CAACE,MAAF,CAASH,KAAV,CAA5C,EACD,CACF,CATH,EAUE,SAAS,EAAEb,QAAQ,CAACiB,aAAT,EAVb,EAWE,GAAG,EAAE,KAAKV,QAXZ,EAYE,QAAQ,EAAE,KAAKG,KAAL,CAAWQ,QAZvB,EAaE,QAAQ,EAAE,CAAC,CAbb,GADF,CAiBD,CAxBH,CA0BE;AACF;AACA,KA5BA,0BAAqCrB,KAAK,CAACsB,SAA3C,EAAahB,e,CACGiB,mB,GAAsB,kB,CADzBjB,e,CAEGkB,W,GAAc,kB","sourcesContent":["import React from 'react';\n\nimport { Nullable } from '../../typings/utility-types';\n\nimport { getDateForNative, getDateForComponent } from './utils';\nimport { jsStyles } from './NativeDateInput.styles';\n\nexport interface NativeDateInputProps {\n onValueChange?: (value: string) => void;\n value: Nullable<string>;\n minDate?: Nullable<string>;\n maxDate?: Nullable<string>;\n disabled?: boolean;\n}\n\nconst DEFAULT_MIN_DATE = '1900-01-01';\nconst DEFAULT_MAX_DATE = '2099-12-31';\n\nexport class NativeDateInput extends React.Component<NativeDateInputProps> {\n public static __KONTUR_REACT_UI__ = 'NativeDatePicker';\n public static displayName = 'NativeDatePicker';\n\n private input: Nullable<HTMLInputElement>;\n\n public render() {\n return (\n <input\n type={'date'}\n max={this.props.maxDate ? getDateForNative(this.props.maxDate) : DEFAULT_MAX_DATE}\n min={this.props.minDate ? getDateForNative(this.props.minDate) : DEFAULT_MIN_DATE}\n value={getDateForNative(this.props.value)}\n onChange={(e) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(getDateForComponent(e.target.value));\n }\n }}\n className={jsStyles.inputTypeDate()}\n ref={this.refInput}\n disabled={this.props.disabled}\n tabIndex={-1}\n />\n );\n }\n\n /**\n * @public\n */\n public focus = () => {\n if (this.input) {\n this.input.focus();\n }\n };\n\n /**\n * @public\n */\n public click = () => {\n if (this.input) {\n this.input.click();\n }\n };\n\n private refInput = (element: Nullable<HTMLInputElement>) => {\n this.input = element;\n };\n}\n"]}
|
|
@@ -651,7 +651,7 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
|
|
|
651
651
|
};
|
|
652
652
|
|
|
653
653
|
return Popup;
|
|
654
|
-
}(React.Component), _class2.__KONTUR_REACT_UI__ = 'Popup', _class2.propTypes = {
|
|
654
|
+
}(React.Component), _class2.__KONTUR_REACT_UI__ = 'Popup', _class2.displayName = 'Popup', _class2.propTypes = {
|
|
655
655
|
/**
|
|
656
656
|
* Ссылка (ref) на элемент или React компонент, для которого рисуется попап
|
|
657
657
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Popup.tsx"],"names":["React","PropTypes","Transition","warning","globalObject","getDOMRect","LayoutEvents","ZIndex","RenderContainer","getRandomID","isFunction","isNonNullable","isNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","responsiveLayout","MobilePopup","getRootNode","rootNode","callChildRef","isInstanceWithAnchorElement","createPropsGetter","isInstanceOf","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","PopupDataTids","root","content","contentInner","popupPin","PopupIds","Popup","getProps","defaultProps","state","location","props","opened","locationUpdateId","refForTransition","createRef","hasAnchorElementListeners","rootId","anchorElement","updateAnchorElement","instance","childDomNode","getAnchorElement","removeEventListeners","addEventListeners","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","anchorWidth","Math","floor","parseFloat","children","backgroundColor","theme","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","lastPopupElement","handleLayoutEvent","updateLocation","popupElement","getLocation","onPositionChange","locationEquals","componentDidMount","layoutEventsToken","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","isMobileLayout","onOpen","onClose","delayUpdateLocation","componentWillUnmount","remove","render","renderMain","renderMobile","renderChildren","mobileOnCloseRequest","useWrapper","anchor","Element","isValidElement","anchorWithRef","cloneElement","ref","originalRef","canGetAnchorNode","withoutMobile","renderContent","addEventListener","removeEventListener","maxWidth","hasShadow","disableAnimations","ignoreHover","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","setRootNode","id","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","requestAnimationFrame","cancelAnimationFrame","x","y","abs","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultRootNode"],"mappings":"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","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport warning from 'warning';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { getRandomID, isFunction, isNonNullable, isNullable, isRefableElement } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { MobilePopup } from '../MobilePopup';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { isInstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupPositions = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n] as const;\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\n\nexport const DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps\n extends Omit<CommonProps, 'children'>,\n PopupHandlerProps,\n Pick<HTMLAttributes<HTMLDivElement>, 'id'> {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin?: boolean;\n hasShadow?: boolean;\n disableAnimations?: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset?: number;\n positions: Readonly<PopupPositionsType[]>;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n ignoreHover?: boolean;\n width?: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n withoutMobile?: boolean;\n mobileOnCloseRequest?: () => void;\n /**\n * Возвращает текущую позицию попапа\n */\n onPositionChange?: (pos: PopupPositionsType) => void;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport const PopupDataTids = {\n root: 'Popup__root',\n content: 'PopupContent',\n contentInner: 'PopupContentInner',\n popupPin: 'PopupPin__root',\n} as const;\n\nexport const PopupIds = {\n root: PopupDataTids.root,\n};\n\ntype DefaultProps = Required<\n Pick<\n PopupProps,\n 'popupOffset' | 'hasPin' | 'hasShadow' | 'disableAnimations' | 'useWrapper' | 'ignoreHover' | 'width'\n >\n>;\n\n@responsiveLayout\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(globalObject.HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps: DefaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n private getProps = createPropsGetter(Popup.defaultProps);\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<Element>;\n private isMobileLayout!: boolean;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n private hasAnchorElementListeners = false;\n private rootId = PopupIds.root + getRandomID();\n\n public anchorElement: Nullable<Element> = null;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n\n if (!this.hasAnchorElementListeners) {\n this.addEventListeners(this.anchorElement);\n }\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n const wasClosed = prevProps.opened && !this.props.opened;\n\n if (this.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\n\n if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n if (this.hasAnchorElementListeners) {\n this.removeEventListeners(this.anchorElement);\n }\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMobile() {\n const { opened } = this.props;\n const children = this.renderChildren();\n\n return children ? (\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(children)}\n </MobilePopup>\n ) : null;\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement } = this.props;\n const useWrapper = this.getProps().useWrapper;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isInstanceOf(anchorElement, globalObject.Element)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called within updateAnchorElement\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isInstanceOf(anchorElement, globalObject.Element);\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={canGetAnchorNode ? null : this.updateAnchorElement}>\n {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\n : location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private updateAnchorElement = (instance: Nullable<React.ReactInstance>) => {\n const childDomNode = isInstanceWithAnchorElement(instance) ? instance.getAnchorElement() : getRootNode(instance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n }\n };\n\n private addEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.addEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.addEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = true;\n }\n }\n\n private removeEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = false;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n const anchorWidth = Math.floor(getDOMRect(this.anchorElement).width);\n return this.anchorElement ? (anchorWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private content = (children: React.ReactNode) => {\n const { backgroundColor } = this.props;\n const width = this.getProps().width;\n\n return (\n <div className={styles.content(this.theme)} data-tid={PopupDataTids.content} ref={this.refForTransition}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={PopupDataTids.contentInner}\n >\n {children}\n </div>\n </div>\n );\n };\n\n private renderContent(location: PopupLocation) {\n const { maxWidth, opened } = this.props;\n const { hasShadow, disableAnimations, ignoreHover } = this.getProps();\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props} rootNodeRef={this.setRootNode}>\n <ZIndex\n id={this.props.id ?? this.rootId}\n data-tid={PopupDataTids.root}\n wrapperRef={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n {this.content(children)}\n {(!this.isMobileLayout || this.props.withoutMobile) && this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (element: Nullable<Element>) => {\n this.lastPopupElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, backgroundColor, borderColor } = this.props;\n const { hasShadow, hasPin } = this.getProps();\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = globalObject.requestAnimationFrame?.(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n globalObject.cancelAnimationFrame?.(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (location) {\n this.props.onPositionChange?.(location?.position);\n }\n\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (isNullable(x) || isNullable(y)) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private getLocation(popupElement: Element, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isInstanceOf(anchorElement, globalObject.Element),\n 'Anchor element is not defined or not instance of Element',\n );\n\n if (!(anchorElement && isInstanceOf(anchorElement, globalObject.Element))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.getProps().hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.getProps().popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Popup.tsx"],"names":["React","PropTypes","Transition","warning","globalObject","getDOMRect","LayoutEvents","ZIndex","RenderContainer","getRandomID","isFunction","isNonNullable","isNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","responsiveLayout","MobilePopup","getRootNode","rootNode","callChildRef","isInstanceWithAnchorElement","createPropsGetter","isInstanceOf","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","PopupDataTids","root","content","contentInner","popupPin","PopupIds","Popup","getProps","defaultProps","state","location","props","opened","locationUpdateId","refForTransition","createRef","hasAnchorElementListeners","rootId","anchorElement","updateAnchorElement","instance","childDomNode","getAnchorElement","removeEventListeners","addEventListeners","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","anchorWidth","Math","floor","parseFloat","children","backgroundColor","theme","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","lastPopupElement","handleLayoutEvent","updateLocation","popupElement","getLocation","onPositionChange","locationEquals","componentDidMount","layoutEventsToken","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","isMobileLayout","onOpen","onClose","delayUpdateLocation","componentWillUnmount","remove","render","renderMain","renderMobile","renderChildren","mobileOnCloseRequest","useWrapper","anchor","Element","isValidElement","anchorWithRef","cloneElement","ref","originalRef","canGetAnchorNode","withoutMobile","renderContent","addEventListener","removeEventListener","maxWidth","hasShadow","disableAnimations","ignoreHover","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","setRootNode","id","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","requestAnimationFrame","cancelAnimationFrame","x","y","abs","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","displayName","propTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultRootNode"],"mappings":"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","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport warning from 'warning';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { getRandomID, isFunction, isNonNullable, isNullable, isRefableElement } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { MobilePopup } from '../MobilePopup';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { isInstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupPositions = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n] as const;\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\n\nexport const DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps\n extends Omit<CommonProps, 'children'>,\n PopupHandlerProps,\n Pick<HTMLAttributes<HTMLDivElement>, 'id'> {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin?: boolean;\n hasShadow?: boolean;\n disableAnimations?: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset?: number;\n positions: Readonly<PopupPositionsType[]>;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n ignoreHover?: boolean;\n width?: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n withoutMobile?: boolean;\n mobileOnCloseRequest?: () => void;\n /**\n * Возвращает текущую позицию попапа\n */\n onPositionChange?: (pos: PopupPositionsType) => void;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport const PopupDataTids = {\n root: 'Popup__root',\n content: 'PopupContent',\n contentInner: 'PopupContentInner',\n popupPin: 'PopupPin__root',\n} as const;\n\nexport const PopupIds = {\n root: PopupDataTids.root,\n};\n\ntype DefaultProps = Required<\n Pick<\n PopupProps,\n 'popupOffset' | 'hasPin' | 'hasShadow' | 'disableAnimations' | 'useWrapper' | 'ignoreHover' | 'width'\n >\n>;\n\n@responsiveLayout\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n public static displayName = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(globalObject.HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps: DefaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n private getProps = createPropsGetter(Popup.defaultProps);\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<Element>;\n private isMobileLayout!: boolean;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n private hasAnchorElementListeners = false;\n private rootId = PopupIds.root + getRandomID();\n\n public anchorElement: Nullable<Element> = null;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n\n if (!this.hasAnchorElementListeners) {\n this.addEventListeners(this.anchorElement);\n }\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n const wasClosed = prevProps.opened && !this.props.opened;\n\n if (this.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\n\n if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n if (this.hasAnchorElementListeners) {\n this.removeEventListeners(this.anchorElement);\n }\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMobile() {\n const { opened } = this.props;\n const children = this.renderChildren();\n\n return children ? (\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(children)}\n </MobilePopup>\n ) : null;\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement } = this.props;\n const useWrapper = this.getProps().useWrapper;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isInstanceOf(anchorElement, globalObject.Element)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called within updateAnchorElement\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isInstanceOf(anchorElement, globalObject.Element);\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={canGetAnchorNode ? null : this.updateAnchorElement}>\n {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\n : location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private updateAnchorElement = (instance: Nullable<React.ReactInstance>) => {\n const childDomNode = isInstanceWithAnchorElement(instance) ? instance.getAnchorElement() : getRootNode(instance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n }\n };\n\n private addEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.addEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.addEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = true;\n }\n }\n\n private removeEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = false;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n const anchorWidth = Math.floor(getDOMRect(this.anchorElement).width);\n return this.anchorElement ? (anchorWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private content = (children: React.ReactNode) => {\n const { backgroundColor } = this.props;\n const width = this.getProps().width;\n\n return (\n <div className={styles.content(this.theme)} data-tid={PopupDataTids.content} ref={this.refForTransition}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={PopupDataTids.contentInner}\n >\n {children}\n </div>\n </div>\n );\n };\n\n private renderContent(location: PopupLocation) {\n const { maxWidth, opened } = this.props;\n const { hasShadow, disableAnimations, ignoreHover } = this.getProps();\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props} rootNodeRef={this.setRootNode}>\n <ZIndex\n id={this.props.id ?? this.rootId}\n data-tid={PopupDataTids.root}\n wrapperRef={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n {this.content(children)}\n {(!this.isMobileLayout || this.props.withoutMobile) && this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (element: Nullable<Element>) => {\n this.lastPopupElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, backgroundColor, borderColor } = this.props;\n const { hasShadow, hasPin } = this.getProps();\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = globalObject.requestAnimationFrame?.(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n globalObject.cancelAnimationFrame?.(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (location) {\n this.props.onPositionChange?.(location?.position);\n }\n\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (isNullable(x) || isNullable(y)) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private getLocation(popupElement: Element, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isInstanceOf(anchorElement, globalObject.Element),\n 'Anchor element is not defined or not instance of Element',\n );\n\n if (!(anchorElement && isInstanceOf(anchorElement, globalObject.Element))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.getProps().hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.getProps().popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|