@skbkontur/react-ui 0.0.0-7feb61cdde → 0.0.0-80c5917afc
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 +94 -0
- package/cjs/components/Autocomplete/Autocomplete.d.ts +5 -0
- package/cjs/components/Autocomplete/Autocomplete.js +18 -4
- package/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
- package/cjs/components/Button/Button.d.ts +1 -1
- package/cjs/components/Button/Button.js +7 -2
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Button/Button.styles.js +6 -4
- package/cjs/components/Button/Button.styles.js.map +1 -1
- package/cjs/components/Button/getInnerLinkTheme.js +2 -3
- package/cjs/components/Button/getInnerLinkTheme.js.map +1 -1
- package/cjs/components/Calendar/Calendar.styles.js +1 -2
- package/cjs/components/Calendar/Calendar.styles.js.map +1 -1
- package/cjs/components/Calendar/DayCellView.js +1 -1
- package/cjs/components/Calendar/DayCellView.js.map +1 -1
- package/cjs/components/Calendar/DayCellView.styles.d.ts +1 -1
- package/cjs/components/Calendar/DayCellView.styles.js +4 -4
- package/cjs/components/Calendar/DayCellView.styles.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.d.ts +10 -0
- package/cjs/components/Checkbox/Checkbox.js +70 -15
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.md +18 -0
- package/cjs/components/Checkbox/Checkbox.mixins.d.ts +2 -0
- package/cjs/components/Checkbox/Checkbox.mixins.js +35 -0
- package/cjs/components/Checkbox/Checkbox.mixins.js.map +1 -0
- package/cjs/components/Checkbox/Checkbox.styles.d.ts +6 -0
- package/cjs/components/Checkbox/Checkbox.styles.js +95 -34
- package/cjs/components/Checkbox/Checkbox.styles.js.map +1 -1
- package/cjs/components/ComboBox/ComboBox.md +5 -3
- package/cjs/components/CurrencyInput/CurrencyHelper.d.ts +2 -0
- package/cjs/components/CurrencyInput/CurrencyHelper.js +21 -6
- package/cjs/components/CurrencyInput/CurrencyHelper.js.map +1 -1
- package/cjs/components/DateInput/DateInput.d.ts +3 -0
- package/cjs/components/DateInput/DateInput.js +11 -3
- package/cjs/components/DateInput/DateInput.js.map +1 -1
- package/cjs/components/Dropdown/getDropdownTheme.js +3 -1
- package/cjs/components/Dropdown/getDropdownTheme.js.map +1 -1
- package/cjs/components/DropdownMenu/DropdownMenu.d.ts +1 -1
- package/cjs/components/DropdownMenu/DropdownMenu.js +4 -1
- package/cjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/cjs/components/DropdownMenu/DropdownMenu.md +28 -0
- package/cjs/components/DropdownMenu/getDropdownMenuTheme.js +5 -1
- package/cjs/components/DropdownMenu/getDropdownMenuTheme.js.map +1 -1
- package/cjs/components/FileUploader/FileUploader.styles.js +3 -2
- package/cjs/components/FileUploader/FileUploader.styles.js.map +1 -1
- package/cjs/components/GlobalLoader/GlobalLoader.js +6 -2
- package/cjs/components/GlobalLoader/GlobalLoader.js.map +1 -1
- package/cjs/components/GlobalLoader/GlobalLoaderView.d.ts +2 -1
- package/cjs/components/GlobalLoader/GlobalLoaderView.js +6 -4
- package/cjs/components/GlobalLoader/GlobalLoaderView.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +1 -5
- package/cjs/components/Input/Input.js +4 -5
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Input/Input.styles.js +3 -2
- package/cjs/components/Input/Input.styles.js.map +1 -1
- package/cjs/components/Kebab/Kebab.d.ts +1 -1
- package/cjs/components/Kebab/Kebab.js +6 -1
- package/cjs/components/Kebab/Kebab.js.map +1 -1
- package/cjs/components/Kebab/Kebab.md +28 -0
- package/cjs/components/Link/Link.js +4 -2
- package/cjs/components/Link/Link.js.map +1 -1
- package/cjs/components/Link/Link.mixins.d.ts +1 -2
- package/cjs/components/Link/Link.mixins.js +5 -16
- package/cjs/components/Link/Link.mixins.js.map +1 -1
- package/cjs/components/Link/Link.styles.d.ts +2 -0
- package/cjs/components/Link/Link.styles.js +58 -38
- package/cjs/components/Link/Link.styles.js.map +1 -1
- package/cjs/components/Modal/ModalFooter.js +1 -1
- package/cjs/components/Modal/ModalFooter.js.map +1 -1
- package/cjs/components/Modal/ModalHeader.js +1 -1
- package/cjs/components/Modal/ModalHeader.js.map +1 -1
- package/cjs/components/Radio/Radio.styles.js +6 -2
- package/cjs/components/Radio/Radio.styles.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.d.ts +3 -2
- package/cjs/components/ScrollContainer/ScrollContainer.js +2 -1
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +7 -5
- package/cjs/components/Select/Select.js +15 -6
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/Select/Select.styles.js +3 -2
- package/cjs/components/Select/Select.styles.js.map +1 -1
- package/cjs/components/Select/selectTheme.js +4 -1
- package/cjs/components/Select/selectTheme.js.map +1 -1
- package/cjs/components/Tabs/Tab.d.ts +1 -0
- package/cjs/components/Tabs/Tab.js +15 -1
- package/cjs/components/Tabs/Tab.js.map +1 -1
- package/cjs/components/Tabs/Tab.styles.d.ts +9 -3
- package/cjs/components/Tabs/Tab.styles.js +106 -68
- package/cjs/components/Tabs/Tab.styles.js.map +1 -1
- package/cjs/components/Tabs/Tabs.d.ts +8 -2
- package/cjs/components/Tabs/Tabs.js +15 -1
- package/cjs/components/Tabs/Tabs.js.map +1 -1
- package/cjs/components/Tabs/Tabs.md +32 -0
- package/cjs/components/Tabs/Tabs.styles.d.ts +3 -1
- package/cjs/components/Tabs/Tabs.styles.js +23 -7
- package/cjs/components/Tabs/Tabs.styles.js.map +1 -1
- package/cjs/components/Tabs/TabsContext.d.ts +2 -1
- package/cjs/components/Tabs/TabsContext.js +2 -0
- package/cjs/components/Tabs/TabsContext.js.map +1 -1
- package/cjs/components/Tabs/helpers.d.ts +6 -0
- package/cjs/components/Tabs/helpers.js +30 -0
- package/cjs/components/Tabs/helpers.js.map +1 -0
- package/cjs/components/Textarea/Textarea.styles.js +2 -2
- package/cjs/components/Textarea/Textarea.styles.js.map +1 -1
- package/cjs/components/Toast/ToastView.styles.js +2 -2
- package/cjs/components/Toast/ToastView.styles.js.map +1 -1
- package/cjs/components/Toggle/Toggle.d.ts +11 -1
- package/cjs/components/Toggle/Toggle.js +102 -2
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/components/Toggle/Toggle.md +16 -2
- package/cjs/components/Toggle/Toggle.mixins.d.ts +7 -0
- package/cjs/components/Toggle/Toggle.mixins.js +90 -0
- package/cjs/components/Toggle/Toggle.mixins.js.map +1 -0
- package/cjs/components/Toggle/Toggle.styles.d.ts +21 -1
- package/cjs/components/Toggle/Toggle.styles.js +172 -56
- package/cjs/components/Toggle/Toggle.styles.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +2 -0
- package/cjs/components/TokenInput/TokenInput.js +8 -2
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.md +26 -35
- package/cjs/components/TokenInput/TokenInput.styles.js +2 -1
- package/cjs/components/TokenInput/TokenInput.styles.js.map +1 -1
- package/cjs/components/TokenInput/TokenInputMenu.d.ts +7 -0
- package/cjs/components/TokenInput/TokenInputMenu.js +9 -1
- package/cjs/components/TokenInput/TokenInputMenu.js.map +1 -1
- package/cjs/components/TooltipMenu/TooltipMenu.d.ts +1 -1
- package/cjs/components/TooltipMenu/TooltipMenu.js +8 -2
- package/cjs/components/TooltipMenu/TooltipMenu.js.map +1 -1
- package/cjs/components/TooltipMenu/TooltipMenu.md +28 -0
- package/cjs/internal/CloseButtonIcon/CloseButtonIcon.styles.js +2 -1
- package/cjs/internal/CloseButtonIcon/CloseButtonIcon.styles.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js +10 -1
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +4 -0
- package/cjs/internal/CustomComboBox/ComboBoxView.js +11 -3
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.js +13 -11
- package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/cjs/internal/DateSelect/DateSelect.js +1 -1
- package/cjs/internal/DateSelect/DateSelect.js.map +1 -1
- package/cjs/internal/DateSelect/DateSelect.styles.d.ts +3 -0
- package/cjs/internal/DateSelect/DateSelect.styles.js +15 -3
- package/cjs/internal/DateSelect/DateSelect.styles.js.map +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +3 -2
- package/cjs/internal/DropdownContainer/DropdownContainer.js +6 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +1 -4
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js +7 -5
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js.map +1 -1
- package/cjs/internal/InputLikeText/InputLikeText.d.ts +1 -0
- package/cjs/internal/InputLikeText/InputLikeText.js +16 -4
- package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
- package/cjs/internal/InternalMenu/InternalMenu.d.ts +13 -4
- package/cjs/internal/InternalMenu/InternalMenu.js +15 -5
- package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
- package/cjs/internal/InternalMenu/InternalMenu.styles.d.ts +1 -0
- package/cjs/internal/InternalMenu/InternalMenu.styles.js +13 -7
- package/cjs/internal/InternalMenu/InternalMenu.styles.js.map +1 -1
- package/cjs/internal/InternalMenu/isIconPaddingEnabled.d.ts +2 -0
- package/cjs/internal/InternalMenu/isIconPaddingEnabled.js +9 -0
- package/cjs/internal/InternalMenu/isIconPaddingEnabled.js.map +1 -0
- package/cjs/internal/Menu/Menu.d.ts +42 -8
- package/cjs/internal/Menu/Menu.js +272 -78
- package/cjs/internal/Menu/Menu.js.map +1 -1
- package/cjs/internal/Menu/Menu.styles.d.ts +6 -1
- package/cjs/internal/Menu/Menu.styles.js +42 -8
- package/cjs/internal/Menu/Menu.styles.js.map +1 -1
- package/cjs/internal/MobilePopup/MobilePopup.d.ts +2 -2
- package/cjs/internal/MobilePopup/MobilePopup.js +1 -1
- package/cjs/internal/MobilePopup/MobilePopup.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +7 -2
- package/cjs/internal/Popup/Popup.js +13 -3
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/PopupMenu/PopupMenu.d.ts +4 -1
- package/cjs/internal/PopupMenu/PopupMenu.js +29 -4
- package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
- package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/cjs/internal/themes/DefaultTheme.d.ts +114 -17
- package/cjs/internal/themes/DefaultTheme.js +244 -68
- package/cjs/internal/themes/DefaultTheme.js.map +1 -1
- package/cjs/internal/themes/Theme2022.d.ts +19 -3
- package/cjs/internal/themes/Theme2022.js +33 -13
- package/cjs/internal/themes/Theme2022.js.map +1 -1
- package/cjs/internal/themes/Theme2022Dark.d.ts +0 -4
- package/cjs/internal/themes/Theme2022Dark.js +3 -14
- package/cjs/internal/themes/Theme2022Dark.js.map +1 -1
- package/cjs/typings/html.d.ts +0 -1
- package/components/Autocomplete/Autocomplete/Autocomplete.js +13 -3
- package/components/Autocomplete/Autocomplete/Autocomplete.js.map +1 -1
- package/components/Autocomplete/Autocomplete.d.ts +5 -0
- package/components/Button/Button/Button.js +2 -0
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +1 -1
- package/components/Button/Button.styles/Button.styles.js +2 -2
- package/components/Button/Button.styles/Button.styles.js.map +1 -1
- package/components/Button/getInnerLinkTheme/getInnerLinkTheme.js +2 -3
- package/components/Button/getInnerLinkTheme/getInnerLinkTheme.js.map +1 -1
- package/components/Calendar/Calendar.styles/Calendar.styles.js +1 -1
- package/components/Calendar/Calendar.styles/Calendar.styles.js.map +1 -1
- package/components/Calendar/DayCellView/DayCellView.js +1 -1
- package/components/Calendar/DayCellView/DayCellView.js.map +1 -1
- package/components/Calendar/DayCellView.styles/DayCellView.styles.js +2 -2
- package/components/Calendar/DayCellView.styles/DayCellView.styles.js.map +1 -1
- package/components/Calendar/DayCellView.styles.d.ts +1 -1
- package/components/Checkbox/Checkbox/Checkbox.js +56 -8
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +10 -0
- package/components/Checkbox/Checkbox.md +18 -0
- package/components/Checkbox/Checkbox.mixins/Checkbox.mixins.js +17 -0
- package/components/Checkbox/Checkbox.mixins/Checkbox.mixins.js.map +1 -0
- package/components/Checkbox/Checkbox.mixins/package.json +6 -0
- package/components/Checkbox/Checkbox.mixins.d.ts +2 -0
- package/components/Checkbox/Checkbox.styles/Checkbox.styles.js +39 -25
- package/components/Checkbox/Checkbox.styles/Checkbox.styles.js.map +1 -1
- package/components/Checkbox/Checkbox.styles.d.ts +6 -0
- package/components/ComboBox/ComboBox.md +5 -3
- package/components/CurrencyInput/CurrencyHelper/CurrencyHelper.js +32 -4
- package/components/CurrencyInput/CurrencyHelper/CurrencyHelper.js.map +1 -1
- package/components/CurrencyInput/CurrencyHelper.d.ts +2 -0
- package/components/DateInput/DateInput/DateInput.js +5 -1
- package/components/DateInput/DateInput/DateInput.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +3 -0
- package/components/Dropdown/getDropdownTheme/getDropdownTheme.js +3 -1
- package/components/Dropdown/getDropdownTheme/getDropdownTheme.js.map +1 -1
- package/components/DropdownMenu/DropdownMenu/DropdownMenu.js +1 -0
- package/components/DropdownMenu/DropdownMenu/DropdownMenu.js.map +1 -1
- package/components/DropdownMenu/DropdownMenu.d.ts +1 -1
- package/components/DropdownMenu/DropdownMenu.md +28 -0
- package/components/DropdownMenu/getDropdownMenuTheme/getDropdownMenuTheme.js +5 -1
- package/components/DropdownMenu/getDropdownMenuTheme/getDropdownMenuTheme.js.map +1 -1
- package/components/FileUploader/FileUploader.styles/FileUploader.styles.js +1 -1
- package/components/FileUploader/FileUploader.styles/FileUploader.styles.js.map +1 -1
- package/components/GlobalLoader/GlobalLoader/GlobalLoader.js +5 -1
- package/components/GlobalLoader/GlobalLoader/GlobalLoader.js.map +1 -1
- package/components/GlobalLoader/GlobalLoaderView/GlobalLoaderView.js +6 -2
- package/components/GlobalLoader/GlobalLoaderView/GlobalLoaderView.js.map +1 -1
- package/components/GlobalLoader/GlobalLoaderView.d.ts +2 -1
- package/components/Input/Input/Input.js +3 -1
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +1 -5
- package/components/Input/Input.styles/Input.styles.js +2 -2
- package/components/Input/Input.styles/Input.styles.js.map +1 -1
- package/components/Kebab/Kebab/Kebab.js +4 -1
- package/components/Kebab/Kebab/Kebab.js.map +1 -1
- package/components/Kebab/Kebab.d.ts +1 -1
- package/components/Kebab/Kebab.md +28 -0
- package/components/Link/Link/Link.js +4 -4
- package/components/Link/Link/Link.js.map +1 -1
- package/components/Link/Link.mixins/Link.mixins.js +2 -5
- package/components/Link/Link.mixins/Link.mixins.js.map +1 -1
- package/components/Link/Link.mixins.d.ts +1 -2
- package/components/Link/Link.styles/Link.styles.js +29 -21
- package/components/Link/Link.styles/Link.styles.js.map +1 -1
- package/components/Link/Link.styles.d.ts +2 -0
- package/components/Modal/ModalFooter/ModalFooter.js +1 -1
- package/components/Modal/ModalFooter/ModalFooter.js.map +1 -1
- package/components/Modal/ModalHeader/ModalHeader.js +1 -1
- package/components/Modal/ModalHeader/ModalHeader.js.map +1 -1
- package/components/Radio/Radio.styles/Radio.styles.js +2 -2
- package/components/Radio/Radio.styles/Radio.styles.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +3 -2
- package/components/Select/Select/Select.js +15 -7
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +7 -5
- package/components/Select/Select.styles/Select.styles.js +1 -1
- package/components/Select/Select.styles/Select.styles.js.map +1 -1
- package/components/Select/selectTheme/selectTheme.js +3 -1
- package/components/Select/selectTheme/selectTheme.js.map +1 -1
- package/components/Tabs/Tab/Tab.js +3 -3
- package/components/Tabs/Tab/Tab.js.map +1 -1
- package/components/Tabs/Tab.d.ts +1 -0
- package/components/Tabs/Tab.styles/Tab.styles.js +52 -23
- package/components/Tabs/Tab.styles/Tab.styles.js.map +1 -1
- package/components/Tabs/Tab.styles.d.ts +9 -3
- package/components/Tabs/Tabs/Tabs.js +11 -3
- package/components/Tabs/Tabs/Tabs.js.map +1 -1
- package/components/Tabs/Tabs.d.ts +8 -2
- package/components/Tabs/Tabs.md +32 -0
- package/components/Tabs/Tabs.styles/Tabs.styles.js +15 -4
- package/components/Tabs/Tabs.styles/Tabs.styles.js.map +1 -1
- package/components/Tabs/Tabs.styles.d.ts +3 -1
- package/components/Tabs/TabsContext/TabsContext.js +1 -0
- package/components/Tabs/TabsContext/TabsContext.js.map +1 -1
- package/components/Tabs/TabsContext.d.ts +2 -1
- package/components/Tabs/helpers/helpers.js +25 -0
- package/components/Tabs/helpers/helpers.js.map +1 -0
- package/components/Tabs/helpers/package.json +6 -0
- package/components/Tabs/helpers.d.ts +6 -0
- package/components/Textarea/Textarea.styles/Textarea.styles.js +1 -1
- package/components/Textarea/Textarea.styles/Textarea.styles.js.map +1 -1
- package/components/Toast/ToastView.styles/ToastView.styles.js +1 -1
- package/components/Toast/ToastView.styles/ToastView.styles.js.map +1 -1
- package/components/Toggle/Toggle/Toggle.js +112 -9
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +11 -1
- package/components/Toggle/Toggle.md +16 -2
- package/components/Toggle/Toggle.mixins/Toggle.mixins.js +35 -0
- package/components/Toggle/Toggle.mixins/Toggle.mixins.js.map +1 -0
- package/components/Toggle/Toggle.mixins/package.json +6 -0
- package/components/Toggle/Toggle.mixins.d.ts +7 -0
- package/components/Toggle/Toggle.styles/Toggle.styles.js +85 -31
- package/components/Toggle/Toggle.styles/Toggle.styles.js.map +1 -1
- package/components/Toggle/Toggle.styles.d.ts +21 -1
- package/components/TokenInput/TokenInput/TokenInput.js +9 -3
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +2 -0
- package/components/TokenInput/TokenInput.md +26 -35
- package/components/TokenInput/TokenInput.styles/TokenInput.styles.js +1 -1
- package/components/TokenInput/TokenInput.styles/TokenInput.styles.js.map +1 -1
- package/components/TokenInput/TokenInputMenu/TokenInputMenu.js +1 -0
- package/components/TokenInput/TokenInputMenu/TokenInputMenu.js.map +1 -1
- package/components/TokenInput/TokenInputMenu.d.ts +7 -0
- package/components/TooltipMenu/TooltipMenu/TooltipMenu.js +7 -2
- package/components/TooltipMenu/TooltipMenu/TooltipMenu.js.map +1 -1
- package/components/TooltipMenu/TooltipMenu.d.ts +1 -1
- package/components/TooltipMenu/TooltipMenu.md +28 -0
- package/internal/CloseButtonIcon/CloseButtonIcon.styles/CloseButtonIcon.styles.js +1 -1
- package/internal/CloseButtonIcon/CloseButtonIcon.styles/CloseButtonIcon.styles.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +5 -0
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +10 -3
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.d.ts +4 -0
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +23 -20
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/DateSelect/DateSelect/DateSelect.js +2 -1
- package/internal/DateSelect/DateSelect/DateSelect.js.map +1 -1
- package/internal/DateSelect/DateSelect.styles/DateSelect.styles.js +5 -2
- package/internal/DateSelect/DateSelect.styles/DateSelect.styles.js.map +1 -1
- package/internal/DateSelect/DateSelect.styles.d.ts +3 -0
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +2 -0
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
- package/internal/DropdownContainer/DropdownContainer.d.ts +3 -2
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js +5 -4
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +1 -4
- package/internal/InputLikeText/InputLikeText/InputLikeText.js +20 -8
- package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
- package/internal/InputLikeText/InputLikeText.d.ts +1 -0
- package/internal/InternalMenu/InternalMenu/InternalMenu.js +11 -6
- package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
- package/internal/InternalMenu/InternalMenu.d.ts +13 -4
- package/internal/InternalMenu/InternalMenu.styles/InternalMenu.styles.js +10 -7
- package/internal/InternalMenu/InternalMenu.styles/InternalMenu.styles.js.map +1 -1
- package/internal/InternalMenu/InternalMenu.styles.d.ts +1 -0
- package/internal/InternalMenu/isIconPaddingEnabled/isIconPaddingEnabled.js +6 -0
- package/internal/InternalMenu/isIconPaddingEnabled/isIconPaddingEnabled.js.map +1 -0
- package/internal/InternalMenu/isIconPaddingEnabled/package.json +6 -0
- package/internal/InternalMenu/isIconPaddingEnabled.d.ts +2 -0
- package/internal/Menu/Menu/Menu.js +197 -42
- package/internal/Menu/Menu/Menu.js.map +1 -1
- package/internal/Menu/Menu.d.ts +42 -8
- package/internal/Menu/Menu.styles/Menu.styles.js +20 -5
- package/internal/Menu/Menu.styles/Menu.styles.js.map +1 -1
- package/internal/Menu/Menu.styles.d.ts +6 -1
- package/internal/MobilePopup/MobilePopup/MobilePopup.js +1 -0
- package/internal/MobilePopup/MobilePopup/MobilePopup.js.map +1 -1
- package/internal/MobilePopup/MobilePopup.d.ts +2 -2
- package/internal/Popup/Popup/Popup.js +9 -3
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +7 -2
- package/internal/PopupMenu/PopupMenu/PopupMenu.js +27 -5
- package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
- package/internal/PopupMenu/PopupMenu.d.ts +4 -1
- package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/internal/themes/DefaultTheme/DefaultTheme.js +320 -88
- package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
- package/internal/themes/DefaultTheme.d.ts +114 -17
- package/internal/themes/Theme2022/Theme2022.js +59 -44
- package/internal/themes/Theme2022/Theme2022.js.map +1 -1
- package/internal/themes/Theme2022.d.ts +19 -3
- package/internal/themes/Theme2022Dark/Theme2022Dark.js +1 -18
- package/internal/themes/Theme2022Dark/Theme2022Dark.js.map +1 -1
- package/internal/themes/Theme2022Dark.d.ts +0 -4
- package/package.json +3 -3
- package/typings/html.d.ts +0 -1
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { Theme } from '../../lib/theming/Theme';
|
|
2
2
|
export declare const styles: {
|
|
3
3
|
root(t: Theme): string;
|
|
4
|
-
|
|
4
|
+
mobileRoot(t: Theme): string;
|
|
5
5
|
alignRight(): string;
|
|
6
6
|
alignRightIE11(): string;
|
|
7
7
|
alignRightIE11FixAutoWidth(): string;
|
|
8
8
|
scrollContainer(t: Theme): string;
|
|
9
9
|
scrollContainerMobile(t: Theme): string;
|
|
10
10
|
shadow(t: Theme): string;
|
|
11
|
+
wrapper(): string;
|
|
12
|
+
headerWrapper(): string;
|
|
13
|
+
footerWrapper(): string;
|
|
14
|
+
contentWrapper(): string;
|
|
15
|
+
menuSeparatorWrapper(t: Theme): string;
|
|
11
16
|
};
|
|
@@ -46,6 +46,7 @@ export var MobilePopup = /*#__PURE__*/function (_React$Component) {
|
|
|
46
46
|
|
|
47
47
|
_proto.renderMain = function renderMain() {
|
|
48
48
|
var content = /*#__PURE__*/React.createElement(ZIndex, {
|
|
49
|
+
id: this.props.id,
|
|
49
50
|
className: jsStyles.zIndex(),
|
|
50
51
|
priority: 'MobilePopup'
|
|
51
52
|
}, /*#__PURE__*/React.createElement(Transition, {
|
|
@@ -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","zIndex","opened","onClose","wrapper","caption","headerChildComponent","children","bottomIndent","bg","withoutRenderContainer","Component","__KONTUR_REACT_UI__"],"mappings":"sEAAA,OAAOA,KAAP,
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CSC,IAAAA,KA5CT,GA4CiB,YAAM;AACnB,UAAI,MAAKC,KAAL,CAAWC,cAAf,EAA+B;AAC7B,cAAKD,KAAL,CAAWC,cAAX;AACD;AACF,KAhDH,yDAKSC,MALT,GAKE,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,CAdH,QAgBSA,UAhBT,GAgBE,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,CA1CH,sBAAiCnB,KAAK,CAAC+B,SAAvC,EAAanB,W,CACGoB,mB,GAAsB,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\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"]}
|
|
@@ -52,7 +52,7 @@ import { getDOMRect } from "../../../lib/dom/getDOMRect";
|
|
|
52
52
|
import * as LayoutEvents from "../../../lib/LayoutEvents";
|
|
53
53
|
import { ZIndex } from "../../ZIndex";
|
|
54
54
|
import { RenderContainer } from "../../RenderContainer";
|
|
55
|
-
import { isFunction, isNonNullable, isNullable, isRefableElement } from "../../../lib/utils";
|
|
55
|
+
import { getRandomID, isFunction, isNonNullable, isNullable, isRefableElement } from "../../../lib/utils";
|
|
56
56
|
import { isIE11, isEdge, isSafari } from "../../../lib/client";
|
|
57
57
|
import { ThemeContext } from "../../../lib/theming/ThemeContext";
|
|
58
58
|
import { isElement, safePropTypesInstanceOf } from "../../../lib/SSRSafe";
|
|
@@ -83,10 +83,14 @@ export var DUMMY_LOCATION = {
|
|
|
83
83
|
}
|
|
84
84
|
};
|
|
85
85
|
export var PopupDataTids = {
|
|
86
|
+
root: 'Popup__root',
|
|
86
87
|
content: 'PopupContent',
|
|
87
88
|
contentInner: 'PopupContentInner',
|
|
88
89
|
popupPin: 'PopupPin__root'
|
|
89
90
|
};
|
|
91
|
+
export var PopupIds = {
|
|
92
|
+
root: PopupDataTids.root
|
|
93
|
+
};
|
|
90
94
|
export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {
|
|
91
95
|
_inheritsLoose(Popup, _React$Component);
|
|
92
96
|
|
|
@@ -105,6 +109,7 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
|
|
|
105
109
|
_this.locationUpdateId = null;
|
|
106
110
|
_this.refForTransition = /*#__PURE__*/React.createRef();
|
|
107
111
|
_this.hasAnchorElementListeners = false;
|
|
112
|
+
_this.rootId = PopupIds.root + getRandomID();
|
|
108
113
|
_this.anchorElement = null;
|
|
109
114
|
|
|
110
115
|
_this.updateAnchorElement = function (instance) {
|
|
@@ -410,12 +415,13 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
|
|
|
410
415
|
onExited: this.resetLocation,
|
|
411
416
|
nodeRef: this.refForTransition
|
|
412
417
|
}, function (state) {
|
|
413
|
-
var _extends2, _ref;
|
|
418
|
+
var _this4$props$id, _extends2, _ref;
|
|
414
419
|
|
|
415
420
|
return /*#__PURE__*/React.createElement(CommonWrapper, _extends({}, _this4.props, {
|
|
416
421
|
rootNodeRef: _this4.setRootNode
|
|
417
422
|
}), /*#__PURE__*/React.createElement(ZIndex, {
|
|
418
|
-
|
|
423
|
+
id: (_this4$props$id = _this4.props.id) != null ? _this4$props$id : _this4.rootId,
|
|
424
|
+
"data-tid": PopupDataTids.root,
|
|
419
425
|
wrapperRef: _this4.refPopupElement,
|
|
420
426
|
priority: 'Popup',
|
|
421
427
|
className: cx(_extends((_extends2 = {}, _extends2[styles.popup(_this4.theme)] = true, _extends2[styles.shadow(_this4.theme)] = hasShadow && !shouldFallbackShadow, _extends2[styles.shadowFallback(_this4.theme)] = hasShadow && shouldFallbackShadow, _extends2[styles.popupIgnoreHover()] = ignoreHover, _extends2), disableAnimations ? {} : (_ref = {}, _ref[styles["transition-enter-" + direction](_this4.theme)] = true, _ref[styles.transitionEnter()] = state === 'entering', _ref[styles.transitionEnterActive()] = state === 'entered', _ref[styles.transitionExit()] = state === 'exiting', _ref))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Popup.tsx"],"names":["React","PropTypes","Transition","raf","warning","getDOMRect","LayoutEvents","ZIndex","RenderContainer","isFunction","isNonNullable","isNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","isElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","responsiveLayout","MobilePopup","getRootNode","rootNode","callChildRef","isInstanceWithAnchorElement","createPropsGetter","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","PopupDataTids","content","contentInner","popupPin","Popup","getProps","defaultProps","state","location","props","opened","locationUpdateId","refForTransition","createRef","hasAnchorElementListeners","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","isValidElement","anchorWithRef","cloneElement","ref","originalRef","canGetAnchorNode","withoutMobile","renderContent","addEventListener","removeEventListener","maxWidth","hasShadow","disableAnimations","ignoreHover","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","setRootNode","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","cancel","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 from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\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 { 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 { isElement, 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';\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 extends Omit<CommonProps, 'children'>, PopupHandlerProps {\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 content: 'PopupContent',\n contentInner: 'PopupContentInner',\n popupPin: 'PopupPin__root',\n} as const;\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(() => 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\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 (isElement(anchorElement)) {\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 || isElement(anchorElement);\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 && isElement(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 && isElement(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 data-tid={'Popup__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 = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(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(anchorElement && isElement(anchorElement), 'Anchor element is not defined or not instance of Element');\n\n if (!(anchorElement && isElement(anchorElement))) {\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","raf","warning","getDOMRect","LayoutEvents","ZIndex","RenderContainer","getRandomID","isFunction","isNonNullable","isNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","isElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","responsiveLayout","MobilePopup","getRootNode","rootNode","callChildRef","isInstanceWithAnchorElement","createPropsGetter","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","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","cancel","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":"qzCAAA,OAAOA,KAAP,MAAsC,OAAtC;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,UAAT,QAA2B,wBAA3B;AACA,OAAOC,GAAP,MAAgB,KAAhB;AACA,OAAOC,OAAP,MAAoB,SAApB;;AAEA,SAASC,UAAT,QAA2B,0BAA3B;;AAEA,OAAO,KAAKC,YAAZ,MAA8B,wBAA9B;AACA,SAASC,MAAT,QAAuB,WAAvB;AACA,SAASC,eAAT,QAAgC,oBAAhC;;AAEA,SAASC,WAAT,EAAsBC,UAAtB,EAAkCC,aAAlC,EAAiDC,UAAjD,EAA6DC,gBAA7D,QAAqF,iBAArF;AACA,SAASC,MAAT,EAAiBC,MAAjB,EAAyBC,QAAzB,QAAyC,kBAAzC;AACA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAASC,SAAT,EAAoBC,uBAApB,QAAmD,mBAAnD;AACA,SAASC,SAAT,QAA0B,8BAA1B;AACA,SAAsBC,aAAtB,QAA2C,kBAA3C;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,gBAAT,QAAiC,6CAAjC;AACA,SAASC,WAAT,QAA4B,gBAA5B;AACA,SAASC,WAAT,EAAsBC,QAAtB,QAAoD,oBAApD;AACA,SAASC,YAAT,QAA6B,qCAA7B;AACA,SAASC,2BAAT,QAA4C,qCAA5C;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;AAEA,SAASC,QAAT,QAAyB,YAAzB;AACA,SAAiBC,WAAjB,QAA0D,eAA1D;AACA,SAASC,MAAT,QAAuB,gBAAvB;;AAEA,IAAMC,0BAA0B,GAAG,aAAnC;AACA,IAAMC,kBAAkB,GAAG,EAAEC,KAAK,EAAE,CAAT,EAAYC,IAAI,EAAE,GAAlB,EAA3B;;AAEA,OAAO,IAAMC,cAAc,GAAG;AAC5B,UAD4B;AAE5B,YAF4B;AAG5B,WAH4B;AAI5B,WAJ4B;AAK5B,cAL4B;AAM5B,cAN4B;AAO5B,cAP4B;AAQ5B,eAR4B;AAS5B,aAT4B;AAU5B,aAV4B;AAW5B,aAX4B;AAY5B,UAZ4B,CAAvB;;AAcP,OAAO,IAAMC,eAAe,GAAGD,cAAc,CAAC,CAAD,CAAtC;;;;AAIP,OAAO,IAAME,cAA6B,GAAG;AAC3CC,EAAAA,QAAQ,EAAEF,eADiC;AAE3CG,EAAAA,WAAW,EAAE;AACXC,IAAAA,GAAG,EAAE,CAAC,IADK;AAEXC,IAAAA,IAAI,EAAE,CAAC,IAFI,EAF8B,EAAtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwEP,OAAO,IAAMC,aAAa,GAAG;AAC3BC,EAAAA,IAAI,EAAE,aADqB;AAE3BC,EAAAA,OAAO,EAAE,cAFkB;AAG3BC,EAAAA,YAAY,EAAE,mBAHa;AAI3BC,EAAAA,QAAQ,EAAE,gBAJiB,EAAtB;;;AAOP,OAAO,IAAMC,QAAQ,GAAG;AACtBJ,EAAAA,IAAI,EAAED,aAAa,CAACC,IADE,EAAjB;;;;;;;;;;;;AAaP,WAAaK,KAAb,GAFC3B,gBAED,UADCG,QACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2EUyB,IAAAA,QA3EV,GA2EqBtB,iBAAiB,CAACqB,KAAK,CAACE,YAAP,CA3EtC;;;;;AAgFSC,IAAAA,KAhFT,GAgF6B,EAAEC,QAAQ,EAAE,MAAKC,KAAL,CAAWC,MAAX,GAAoBjB,cAApB,GAAqC,IAAjD,EAhF7B;;;AAmFUkB,IAAAA,gBAnFV,GAmF+C,IAnF/C;;;;AAuFUC,IAAAA,gBAvFV,gBAuF6B1D,KAAK,CAAC2D,SAAN,EAvF7B;AAwFUC,IAAAA,yBAxFV,GAwFsC,KAxFtC;AAyFUC,IAAAA,MAzFV,GAyFmBZ,QAAQ,CAACJ,IAAT,GAAgBpC,WAAW,EAzF9C;;AA2FSqD,IAAAA,aA3FT,GA2F4C,IA3F5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsNUC,IAAAA,mBAtNV,GAsNgC,UAACC,QAAD,EAA6C;AACzE,UAAMC,YAAY,GAAGrC,2BAA2B,CAACoC,QAAD,CAA3B,GAAwCA,QAAQ,CAACE,gBAAT,EAAxC,GAAsEzC,WAAW,CAACuC,QAAD,CAAtG;AACA,UAAMF,aAAa,GAAG,MAAKA,aAA3B;;AAEA,UAAIG,YAAY,KAAKH,aAArB,EAAoC;AAClC,cAAKK,oBAAL,CAA0BL,aAA1B;AACA,cAAKA,aAAL,GAAqBG,YAArB;AACA,cAAKG,iBAAL,CAAuBH,YAAvB;AACD;AACF,KA/NH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+PUI,IAAAA,gBA/PV,GA+P6B,UAACC,KAAD,EAA2B;AACpD,UAAI,MAAKf,KAAL,CAAWgB,YAAf,EAA6B;AAC3B,cAAKhB,KAAL,CAAWgB,YAAX,CAAwBD,KAAxB;AACD;AACF,KAnQH;;AAqQUE,IAAAA,gBArQV,GAqQ6B,UAACF,KAAD,EAA2B;AACpD,UAAI,MAAKf,KAAL,CAAWkB,YAAf,EAA6B;AAC3B,cAAKlB,KAAL,CAAWkB,YAAX,CAAwBH,KAAxB;AACD;AACF,KAzQH;;AA2QUI,IAAAA,WA3QV,GA2QwB,UAACJ,KAAD,EAA2B;AAC/C,UAAI,MAAKf,KAAL,CAAWoB,OAAf,EAAwB;AACtB,cAAKpB,KAAL,CAAWoB,OAAX,CAAmBL,KAAnB;AACD;AACF,KA/QH;;AAiRUM,IAAAA,WAjRV,GAiRwB,UAACN,KAAD,EAA2B;AAC/C,UAAI,MAAKf,KAAL,CAAWsB,OAAf,EAAwB;AACtB,cAAKtB,KAAL,CAAWsB,OAAX,CAAmBP,KAAnB;AACD;AACF,KArRH;;AAuRUQ,IAAAA,UAvRV,GAuRuB,UAACR,KAAD,EAA2B;AAC9C,UAAI,MAAKf,KAAL,CAAWwB,MAAf,EAAuB;AACrB,cAAKxB,KAAL,CAAWwB,MAAX,CAAkBT,KAAlB;AACD;AACF,KA3RH;;AA6RUU,IAAAA,cA7RV,GA6R2B,UAACC,KAAD,EAAgC;AACvD,UAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAACC,QAAN,CAAe,GAAf,CAAjC,EAAsD;AACpD,YAAMC,WAAW,GAAGC,IAAI,CAACC,KAAL,CAAWhF,UAAU,CAAC,MAAKyD,aAAN,CAAV,CAA+BmB,KAA1C,CAApB;AACA,eAAO,MAAKnB,aAAL,GAAsBqB,WAAW,GAAGG,UAAU,CAACL,KAAD,CAAzB,GAAoC,GAAzD,GAA+D,CAAtE;AACD;AACD,aAAOA,KAAP;AACD,KAnSH;;AAqSUnC,IAAAA,OArSV,GAqSoB,UAACyC,QAAD,EAA+B;AAC/C,UAAQC,eAAR,GAA4B,MAAKjC,KAAjC,CAAQiC,eAAR;AACA,UAAMP,KAAK,GAAG,MAAK9B,QAAL,GAAgB8B,KAA9B;;AAEA;AACE,qCAAK,SAAS,EAAEjD,MAAM,CAACc,OAAP,CAAe,MAAK2C,KAApB,CAAhB,EAA4C,YAAU7C,aAAa,CAACE,OAApE,EAA6E,GAAG,EAAE,MAAKY,gBAAvF;AACE;AACE,UAAA,SAAS,EAAE1B,MAAM,CAACe,YAAP,CAAoB,MAAK0C,KAAzB,CADb;AAEE,UAAA,KAAK,EAAE,EAAED,eAAe,EAAfA,eAAF,EAAmBP,KAAK,EAAE,MAAKD,cAAL,CAAoBC,KAApB,CAA1B,EAFT;AAGE,sBAAUrC,aAAa,CAACG,YAH1B;;AAKGwC,QAAAA,QALH,CADF,CADF;;;;AAWD,KApTH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8WUG,IAAAA,aA9WV,GA8W0B,YAAM;AAC5B,YAAKC,2BAAL;AACA,YAAKtC,KAAL,CAAWC,QAAX,KAAwB,IAAxB,IAAgC,MAAKsC,QAAL,CAAc,EAAEtC,QAAQ,EAAE,IAAZ,EAAd,CAAhC;AACD,KAjXH;;;;;;AAuXUuC,IAAAA,eAvXV,GAuX4B,UAACC,OAAD,EAAgC;AACxD,YAAKC,gBAAL,GAAwBD,OAAxB;AACD,KAzXH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuZUE,IAAAA,iBAvZV,GAuZ8B,YAAM;AAChC,UAAI,CAAC,MAAK3C,KAAL,CAAWC,QAAhB,EAA0B;AACxB;AACD;AACD,YAAK2C,cAAL;AACD,KA5ZH;;;;;;;;;;;;;;AA0aUA,IAAAA,cA1aV,GA0a2B,YAAM;AAC7B,UAAMC,YAAY,GAAG,MAAKH,gBAA1B;;AAEA,UAAI,CAACG,YAAL,EAAmB;AACjB;AACD;;AAED,UAAM5C,QAAQ,GAAG,MAAK6C,WAAL,CAAiBD,YAAjB,EAA+B,MAAK7C,KAAL,CAAWC,QAA1C,CAAjB;AACA,UAAIA,QAAJ,EAAc;AACZ,cAAKC,KAAL,CAAW6C,gBAAX,0BAAK7C,KAAL,CAAW6C,gBAAX,CAA8B9C,QAA9B,oBAA8BA,QAAQ,CAAEd,QAAxC;AACD;;AAED,UAAI,CAAC,MAAK6D,cAAL,CAAoB,MAAKhD,KAAL,CAAWC,QAA/B,EAAyCA,QAAzC,CAAL,EAAyD;AACvD,cAAKsC,QAAL,CAAc,EAAEtC,QAAQ,EAARA,QAAF,EAAd;AACD;AACF,KAzbH,mDA6FSgD,iBA7FT,GA6FE,6BAA2B,CACzB,KAAKL,cAAL,GACA,KAAKM,iBAAL,GAAyBjG,YAAY,CAACkG,WAAb,CAAyB,KAAKR,iBAA9B,CAAzB,CAEA,IAAI,CAAC,KAAKpC,yBAAV,EAAqC,CACnC,KAAKQ,iBAAL,CAAuB,KAAKN,aAA5B,EACD,CACF,CApGH,OAsGgB2C,wBAtGhB,GAsGE,kCAAuClD,KAAvC,EAAoEF,KAApE,EAAuF,CACrF;AACJ;AACA,OACI,IAAIE,KAAK,CAACC,MAAV,EAAkB,CAChB,IAAI,CAACH,KAAK,CAACC,QAAX,EAAqB,CACnB,OAAO,EAAEA,QAAQ,EAAEf,cAAZ,EAAP,CACD,CACF,CAJD,MAIO,IAAIc,KAAK,CAACC,QAAV,EAAoB,CACzB,OAAO,EAAEA,QAAQ,EAAEf,cAAZ,EAAP,CACD,CACD,OAAOc,KAAP,CACD,CAlHH,QAoHSqD,kBApHT,GAoHE,4BAA0BC,SAA1B,EAAiDC,SAAjD,EAAwE,CACtE,IAAMC,aAAa,GAAGD,SAAS,CAACtD,QAAV,KAAuBf,cAA7C,CACA,IAAMuE,WAAW,GAAG,KAAKzD,KAAL,CAAWC,QAAX,KAAwBf,cAA5C,CACA,IAAMwE,SAAS,GAAGJ,SAAS,CAACnD,MAAV,IAAoB,CAAC,KAAKD,KAAL,CAAWC,MAAlD,CAEA,IAAI,KAAKwD,cAAL,IAAuBJ,SAAS,CAACtD,QAAV,KAAuB,IAA9C,IAAsD,KAAKD,KAAL,CAAWC,QAAX,KAAwB,IAAlF,EAAwF,CACtF,KAAKsC,QAAL,CAAc,EAAEtC,QAAQ,EAAEf,cAAZ,EAAd,EACD,CAED,IAAI,KAAKgB,KAAL,CAAWC,MAAX,IAAqBqD,aAArB,IAAsCC,WAAtC,IAAqD,KAAKvD,KAAL,CAAW0D,MAApE,EAA4E,CAC1E,KAAK1D,KAAL,CAAW0D,MAAX,GACD,CACD,IAAIF,SAAS,IAAI,CAACD,WAAd,IAA6B,KAAKvD,KAAL,CAAW2D,OAA5C,EAAqD,CACnD,KAAK3D,KAAL,CAAW2D,OAAX,GACD,CACD,IAAI,KAAK3D,KAAL,CAAWC,MAAf,EAAuB,CACrB,KAAK2D,mBAAL,GACD,CACF,CAtIH,QAwISC,oBAxIT,GAwIE,gCAA8B,CAC5B,KAAKzB,2BAAL,GACA,IAAI,KAAK/B,yBAAT,EAAoC,CAClC,KAAKO,oBAAL,CAA0B,KAAKL,aAA/B,EACD,CACD,IAAI,KAAKyC,iBAAT,EAA4B,CAC1B,KAAKA,iBAAL,CAAuBc,MAAvB,GACA,KAAKd,iBAAL,GAAyB,IAAzB,CACD,CACD,IAAI,KAAKlD,KAAL,CAAWC,QAAX,IAAuB,KAAKC,KAAL,CAAW2D,OAAtC,EAA+C,CAC7C,KAAK3D,KAAL,CAAW2D,OAAX,GACD,CACF,CApJH,QAsJSI,MAtJT,GAsJE,kBAAgB,mBACd,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAAC7B,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAAC8B,UAAL,EAAP,CACD,CAJH,CADF,CAQD,CA/JH,QAiKUC,YAjKV,GAiKE,wBAAuB,CACrB,IAAQhE,MAAR,GAAmB,KAAKD,KAAxB,CAAQC,MAAR,CACA,IAAM+B,QAAQ,GAAG,KAAKkC,cAAL,EAAjB,CAEA,OAAOlC,QAAQ,gBACb,oBAAC,WAAD,IAAa,MAAM,EAAE/B,MAArB,EAA6B,sBAAsB,MAAnD,EAAoD,cAAc,EAAE,KAAKD,KAAL,CAAWmE,oBAA/E,IACG,KAAK5E,OAAL,CAAayC,QAAb,CADH,CADa,GAIX,IAJJ,CAKD,CA1KH,QA4KUgC,UA5KV,GA4KE,sBAAqB,mBACnB,IAAQjE,QAAR,GAAqB,KAAKD,KAA1B,CAAQC,QAAR,CACA,IAAQQ,aAAR,GAA0B,KAAKP,KAA/B,CAAQO,aAAR,CACA,IAAM6D,UAAU,GAAG,KAAKxE,QAAL,GAAgBwE,UAAnC,CAEA,IAAIC,MAAiC,GAAG,IAAxC,CACA,IAAI1G,SAAS,CAAC4C,aAAD,CAAb,EAA8B,CAC5B,KAAKC,mBAAL,CAAyBD,aAAzB,EACD,CAFD,MAEO,kBAAI9D,KAAK,CAAC6H,cAAN,CAAqB/D,aAArB,CAAJ,EAAyC,CAC9C8D,MAAM,GAAGD,UAAU,gBAAG,kCAAO7D,aAAP,CAAH,GAAkCA,aAArD,CACD,CAFM,MAEA,CACL8D,MAAM,gBAAG,kCAAO9D,aAAP,CAAT,CACD,CAED,IAAMgE,aAAa,GACjBF,MAAM,iBAAI5H,KAAK,CAAC6H,cAAN,CAAqBD,MAArB,CAAV,IAA0C/G,gBAAgB,CAAC+G,MAAD,CAA1D,gBACI5H,KAAK,CAAC+H,YAAN,CAAmBH,MAAnB,EAA2B,EACzBI,GAAG,EAAE,aAAChE,QAAD,EAA6C,aAChD,MAAI,CAACD,mBAAL,CAAyBC,QAAzB,EACA,IAAMiE,WAAW,cAAIL,MAAJ,qBAAG,QAAsCI,GAA1D,CACAC,WAAW,IAAItG,YAAY,CAACsG,WAAD,EAAcjE,QAAd,CAA3B,CACD,CALwB,EAA3B,CADJ,GAQI,IATN,CAdmB,CAyBnB;AACA;AACA;AACA;AACA;AAEA,QAAMkE,gBAAgB,GAAG,CAAC,CAACJ,aAAF,IAAmB5G,SAAS,CAAC4C,aAAD,CAArD,CAEA,oBACE,oBAAC,eAAD,IAAiB,MAAM,EAAEgE,aAAa,IAAIF,MAA1C,EAAkD,GAAG,EAAEM,gBAAgB,GAAG,IAAH,GAAU,KAAKnE,mBAAtF,IACG,KAAKiD,cAAL,IAAuB,CAAC,KAAKzD,KAAL,CAAW4E,aAAnC,GACG,KAAKX,YAAL,EADH,GAEGlE,QAAQ,IAAI,KAAK8E,aAAL,CAAmB9E,QAAnB,CAHlB,CADF,CAOD,CApNH,QAiOUc,iBAjOV,GAiOE,2BAA0B0B,OAA1B,EAAsD,CACpD,IAAIA,OAAO,IAAI5E,SAAS,CAAC4E,OAAD,CAAxB,EAAmC,CACjC;AACAA,MAAAA,OAAO,CAACuC,gBAAR,CAAyB,YAAzB,EAAuC,KAAKhE,gBAA5C,EAFiC,CAGjC;AACAyB,MAAAA,OAAO,CAACuC,gBAAR,CAAyB,YAAzB,EAAuC,KAAK7D,gBAA5C,EAJiC,CAKjC;AACAsB,MAAAA,OAAO,CAACuC,gBAAR,CAAyB,OAAzB,EAAkC,KAAK3D,WAAvC,EACAoB,OAAO,CAACuC,gBAAR,CAAyB,SAAzB,EAAoC,KAAKzD,WAAzC,EACAkB,OAAO,CAACuC,gBAAR,CAAyB,UAAzB,EAAqC,KAAKvD,UAA1C,EAEA,KAAKlB,yBAAL,GAAiC,IAAjC,CACD,CACF,CA9OH,QAgPUO,oBAhPV,GAgPE,8BAA6B2B,OAA7B,EAAyD,CACvD,IAAIA,OAAO,IAAI5E,SAAS,CAAC4E,OAAD,CAAxB,EAAmC,CACjC;AACAA,MAAAA,OAAO,CAACwC,mBAAR,CAA4B,YAA5B,EAA0C,KAAKjE,gBAA/C,EAFiC,CAGjC;AACAyB,MAAAA,OAAO,CAACwC,mBAAR,CAA4B,YAA5B,EAA0C,KAAK9D,gBAA/C,EAJiC,CAKjC;AACAsB,MAAAA,OAAO,CAACwC,mBAAR,CAA4B,OAA5B,EAAqC,KAAK5D,WAA1C,EACAoB,OAAO,CAACwC,mBAAR,CAA4B,SAA5B,EAAuC,KAAK1D,WAA5C,EACAkB,OAAO,CAACwC,mBAAR,CAA4B,UAA5B,EAAwC,KAAKxD,UAA7C,EAEA,KAAKlB,yBAAL,GAAiC,KAAjC,CACD,CACF,CA7PH,QAsTUwE,aAtTV,GAsTE,uBAAsB9E,QAAtB,EAA+C,mBAC7C,kBAA6B,KAAKC,KAAlC,CAAQgF,QAAR,eAAQA,QAAR,CAAkB/E,MAAlB,eAAkBA,MAAlB,CACA,qBAAsD,KAAKL,QAAL,EAAtD,CAAQqF,SAAR,kBAAQA,SAAR,CAAmBC,iBAAnB,kBAAmBA,iBAAnB,CAAsCC,WAAtC,kBAAsCA,WAAtC,CACA,IAAMnD,QAAQ,GAAG,KAAKkC,cAAL,EAAjB,CAEA,4BAAsB1F,WAAW,CAAC4G,iBAAZ,CAA8BrF,QAAQ,CAACd,QAAvC,CAAtB,CAAQoG,SAAR,yBAAQA,SAAR,CACA,IAAMC,SAA8B,gBAAQvF,QAAQ,CAACb,WAAjB,IAA8B8F,QAAQ,EAARA,QAA9B,GAApC,CAEA,IAAMO,oBAAoB,GAAGhI,MAAM,IAAIC,MAAV,IAAoBC,QAAjD,CAEA,oBACE,oBAAC,UAAD,IACE,OAAO,EAAEkB,kBADX,EAEE,MAAM,EAAE,CAACuG,iBAFX,EAGE,MAAIM,OAAO,CAACvF,MAAM,IAAI+B,QAAX,CAHb,EAIE,YAAY,MAJd,EAKE,aAAa,MALf,EAME,KAAK,EAAE,CAACkD,iBANV,EAOE,IAAI,EAAE,CAACA,iBAPT,EAQE,QAAQ,EAAE,KAAK/C,aARjB,EASE,OAAO,EAAE,KAAKhC,gBAThB,IAWG,UAACL,KAAD,4DACC,oBAAC,aAAD,eAAmB,MAAI,CAACE,KAAxB,IAA+B,WAAW,EAAE,MAAI,CAACyF,WAAjD,kBACE,oBAAC,MAAD,IACE,EAAE,qBAAE,MAAI,CAACzF,KAAL,CAAW0F,EAAb,8BAAmB,MAAI,CAACpF,MAD5B,EAEE,YAAUjB,aAAa,CAACC,IAF1B,EAGE,UAAU,EAAE,MAAI,CAACgD,eAHnB,EAIE,QAAQ,EAAE,OAJZ,EAKE,SAAS,EAAEvE,EAAE,qCACVU,MAAM,CAACkH,KAAP,CAAa,MAAI,CAACzD,KAAlB,CADU,IACiB,IADjB,YAEVzD,MAAM,CAACmH,MAAP,CAAc,MAAI,CAAC1D,KAAnB,CAFU,IAEkB+C,SAAS,IAAI,CAACM,oBAFhC,YAGV9G,MAAM,CAACoH,cAAP,CAAsB,MAAI,CAAC3D,KAA3B,CAHU,IAG0B+C,SAAS,IAAIM,oBAHvC,YAIV9G,MAAM,CAACqH,gBAAP,EAJU,IAIkBX,WAJlB,cAKPD,iBAAiB,GACjB,EADiB,oBAGdzG,MAAM,uBAAqB4G,SAArB,CAAN,CAA+D,MAAI,CAACnD,KAApE,CAHc,IAG+D,IAH/D,OAIdzD,MAAM,CAACsH,eAAP,EAJc,IAIajG,KAAK,KAAK,UAJvB,OAKdrB,MAAM,CAACuH,qBAAP,EALc,IAKmBlG,KAAK,KAAK,SAL7B,OAMdrB,MAAM,CAACwH,cAAP,EANc,IAMYnG,KAAK,KAAK,SANtB,OALV,EALf,EAmBE,KAAK,EAAEwF,SAnBT,EAoBE,YAAY,EAAE,MAAI,CAACxE,gBApBrB,EAqBE,YAAY,EAAE,MAAI,CAACG,gBArBrB,IAuBG,MAAI,CAAC1B,OAAL,CAAayC,QAAb,CAvBH,EAwBG,CAAC,CAAC,MAAI,CAACyB,cAAN,IAAwB,MAAI,CAACzD,KAAL,CAAW4E,aAApC,KAAsD,MAAI,CAACsB,SAAL,CAAenG,QAAQ,CAACd,QAAxB,CAxBzD,CADF,CADD,EAXH,CADF,CA4CD,CA5WH,QAmXUiF,cAnXV,GAmXE,0BAAyB,CACvB,OAAO/G,UAAU,CAAC,KAAK6C,KAAL,CAAWgC,QAAZ,CAAV,GAAkC,KAAKhC,KAAL,CAAWgC,QAAX,EAAlC,GAA0D,KAAKhC,KAAL,CAAWgC,QAA5E,CACD,CArXH,QA2XUkE,SA3XV,GA2XE,mBAAkBC,YAAlB,EAAyD,CACvD;AACJ;AACA;AACA;AACA,OACI,IAAMC,oBAAoB,GAAG,KAAKlE,KAAL,CAAWmE,gBAAX,KAAgC3H,0BAA7D,CACA,IAAM4H,SAAS,GAAG/I,MAAM,IAAI6I,oBAAV,GAAiC,qBAAjC,GAAyD,KAAKlE,KAAL,CAAWmE,gBAAtF,CAEA,mBAAkD,KAAKrG,KAAvD,CAAQuG,OAAR,gBAAQA,OAAR,CAAiBtE,eAAjB,gBAAiBA,eAAjB,CAAkCuE,WAAlC,gBAAkCA,WAAlC,CACA,sBAA8B,KAAK5G,QAAL,EAA9B,CAAQqF,SAAR,mBAAQA,SAAR,CAAmBwB,MAAnB,mBAAmBA,MAAnB,CACA,IAAMxH,QAAQ,GAAGT,WAAW,CAAC4G,iBAAZ,CAA8Be,YAA9B,CAAjB,CAEA,OACEM,MAAM,iBACJ,oBAAC,QAAD,IACE,YAAY,EAAE,KAAKjE,gBADrB,EAEE,aAAa,EAAE2D,YAFjB,EAGE,IAAI,EAAEI,OAAO,IAAIG,QAAQ,CAAC,KAAKxE,KAAL,CAAWyE,YAAZ,CAH3B,EAIE,MAAM,EAAE,KAAKC,YAAL,CAAkB3H,QAAQ,CAAC4H,KAA3B,CAJV,EAKE,WAAW,EAAE5B,SAAS,GAAG,CAAH,GAAO,CAL/B,EAME,eAAe,EAAEhD,eAAe,IAAI,KAAKC,KAAL,CAAW4E,eANjD,EAOE,WAAW,EAAEN,WAAW,IAAIF,SAP9B,GAFJ,CAaD,CArZH,QA8ZU1C,mBA9ZV,GA8ZE,+BAA8B,CAC5B,KAAKxB,2BAAL,GACA,KAAKlC,gBAAL,GAAwBtD,GAAG,CAAC,KAAK8F,cAAN,CAA3B,CACD,CAjaH,QAmaUN,2BAnaV,GAmaE,uCAAsC,CACpC,IAAI,KAAKlC,gBAAT,EAA2B,CACzBtD,GAAG,CAACmK,MAAJ,CAAW,KAAK7G,gBAAhB,EACA,KAAKA,gBAAL,GAAwB,IAAxB,CACD,CACF,CAxaH,QA2bU4C,cA3bV,GA2bE,wBAAuBkE,CAAvB,EAAmDC,CAAnD,EAA+E,CAC7E,IAAID,CAAC,KAAKC,CAAV,EAAa,CACX,OAAO,IAAP,CACD,CAED,IAAI5J,UAAU,CAAC2J,CAAD,CAAV,IAAiB3J,UAAU,CAAC4J,CAAD,CAA/B,EAAoC,CAClC,OAAO,KAAP,CACD,CAED,IAAI,CAAC1J,MAAD,IAAW,CAACC,MAAhB,EAAwB,CACtB,OACEwJ,CAAC,CAAC9H,WAAF,CAAcE,IAAd,KAAuB6H,CAAC,CAAC/H,WAAF,CAAcE,IAArC,IACA4H,CAAC,CAAC9H,WAAF,CAAcC,GAAd,KAAsB8H,CAAC,CAAC/H,WAAF,CAAcC,GADpC,IAEA6H,CAAC,CAAC/H,QAAF,KAAegI,CAAC,CAAChI,QAHnB,CAKD;;AAED;AACA;;AAEA;AACE+H,MAAAA,CAAC,CAAC/H,QAAF,KAAegI,CAAC,CAAChI,QAAjB;AACA4C,MAAAA,IAAI,CAACqF,GAAL,CAASF,CAAC,CAAC9H,WAAF,CAAcC,GAAd,GAAoB8H,CAAC,CAAC/H,WAAF,CAAcC,GAA3C,KAAmD,CADnD;AAEA0C,MAAAA,IAAI,CAACqF,GAAL,CAASF,CAAC,CAAC9H,WAAF,CAAcE,IAAd,GAAqB6H,CAAC,CAAC/H,WAAF,CAAcE,IAA5C,KAAqD,CAHvD;;AAKD,GApdH;;AAsdUwD,EAAAA,WAtdV,GAsdE,qBAAoBD,YAApB,EAA2C5C,QAA3C,EAA+E;AAC7E,uBAAwD,KAAKC,KAA7D,CAAQmH,SAAR,gBAAQA,SAAR,CAAmBC,gCAAnB,gBAAmBA,gCAAnB;AACA,QAAM7G,aAAa,GAAG,KAAKA,aAA3B;;AAEA1D,IAAAA,OAAO,CAAC0D,aAAa,IAAI5C,SAAS,CAAC4C,aAAD,CAA3B,EAA4C,0DAA5C,CAAP;;AAEA,QAAI,EAAEA,aAAa,IAAI5C,SAAS,CAAC4C,aAAD,CAA5B,CAAJ,EAAkD;AAChD,aAAOR,QAAP;AACD;;AAED,QAAMsH,UAAU,GAAG7I,WAAW,CAAC8I,sBAAZ,CAAmC/G,aAAnC,CAAnB;AACA,QAAMgH,SAAS,GAAG/I,WAAW,CAAC8I,sBAAZ,CAAmC3E,YAAnC,CAAlB;;AAEA,QAAI1D,QAAJ;AACA,QAAIC,WAAJ;;AAEA,QAAIa,QAAQ,IAAIA,QAAQ,KAAKf,cAAzB,IAA2Ce,QAAQ,CAACd,QAAxD,EAAkE;AAChEA,MAAAA,QAAQ,GAAGc,QAAQ,CAACd,QAApB;AACAC,MAAAA,WAAW,GAAG,KAAKsI,cAAL,CAAoBH,UAApB,EAAgCE,SAAhC,EAA2CtI,QAA3C,CAAd;;AAEA,UAAMwI,cAAc,GAAGjJ,WAAW,CAACiJ,cAAZ,CAA2BvI,WAA3B,EAAwCqI,SAAxC,CAAvB;AACA,UAAMG,gBAAgB,GAAG,CAACD,cAAD,IAAmBjJ,WAAW,CAACmJ,qBAAZ,CAAkC1I,QAAlC,EAA4CC,WAA5C,CAA5C;;AAEA;AACE;AACA;AACCkI,MAAAA,gCAAgC,KAAKK,cAAc,IAAIC,gBAAvB,CAAjC;AACA;AACA;AACCD,MAAAA,cAAc,IAAIxI,QAAQ,KAAKkI,SAAS,CAAC,CAAD,CAN3C;AAOE;AACA;AACA,eAAO,EAAEjI,WAAW,EAAXA,WAAF,EAAeD,QAAQ,EAARA,QAAf,EAAP;AACD;AACF;;AAED,yDAAiBkI,SAAjB,wCAA4B,CAAvBlI,QAAuB;AAC1BC,MAAAA,WAAW,GAAG,KAAKsI,cAAL,CAAoBH,UAApB,EAAgCE,SAAhC,EAA2CtI,QAA3C,CAAd;AACA,UAAIT,WAAW,CAACiJ,cAAZ,CAA2BvI,WAA3B,EAAwCqI,SAAxC,CAAJ,EAAwD;AACtD,eAAO,EAAErI,WAAW,EAAXA,WAAF,EAAeD,QAAQ,EAARA,QAAf,EAAP;AACD;AACF;;AAEDA,IAAAA,QAAQ,GAAGkI,SAAS,CAAC,CAAD,CAApB;AACAjI,IAAAA,WAAW,GAAG,KAAKsI,cAAL,CAAoBH,UAApB,EAAgCE,SAAhC,EAA2CtI,QAA3C,CAAd;AACA,WAAO,EAAEC,WAAW,EAAXA,WAAF,EAAeD,QAAQ,EAARA,QAAf,EAAP;AACD,GApgBH;;AAsgBU2I,EAAAA,oBAtgBV,GAsgBE,8BAA6BP,UAA7B,EAA+CpI,QAA/C,EAAyE;AACvE,QAAI,CAAC,KAAKW,QAAL,GAAgB6G,MAAjB,IAA2B,gBAAgBoB,IAAhB,CAAqB5I,QAAQ,CAAC4H,KAA9B,CAA/B,EAAqE;AACnE,aAAO,CAAP;AACD;;AAED,QAAMiB,UAAU,GAAG,aAAaD,IAAb,CAAkB5I,QAAQ,CAACoG,SAA3B,IAAwCgC,UAAU,CAAC3F,KAAnD,GAA2D2F,UAAU,CAACU,MAAzF;;AAEA,QAAQxB,OAAR,GAAoB,KAAKvG,KAAzB,CAAQuG,OAAR;;AAEA,WAAO1E,IAAI,CAACmG,GAAL;AACL,KADK;AAEL,SAAKpB,YAAL,CAAkB3H,QAAQ,CAAC4H,KAA3B,KAAqCN,OAAO,IAAIG,QAAQ,CAAC,KAAKxE,KAAL,CAAWyE,YAAZ,CAAxD,IAAqFmB,UAAU,GAAG,CAF7F,CAAP;;AAID,GAnhBH;;AAqhBUN,EAAAA,cArhBV,GAqhBE,wBAAuBH,UAAvB,EAAyCE,SAAzC,EAA0DpB,YAA1D,EAAgF;AAC9E,QAAgB8B,eAAhB,GAAoC,KAAKjI,KAAzC,CAAQkI,MAAR;AACA,QAAMA,MAAM;AACV9K,IAAAA,aAAa,CAAC6K,eAAD,CAAb,IAAkC,CAACE,KAAK,CAACF,eAAD,CAAxC;AACIA,IAAAA,eADJ;AAEIvB,IAAAA,QAAQ,CAAC,KAAKxE,KAAL,CAAWkG,WAAZ,CAAR,IAAoC,CAH1C;AAIA,QAAMnJ,QAAQ,GAAGT,WAAW,CAAC4G,iBAAZ,CAA8Be,YAA9B,CAAjB;AACA,QAAMkC,WAAW,GAAG,KAAKzI,QAAL,GAAgByI,WAAhB,GAA8B,KAAKT,oBAAL,CAA0BP,UAA1B,EAAsCpI,QAAtC,CAAlD;;AAEA,YAAQA,QAAQ,CAACoG,SAAjB;AACE,WAAK,KAAL;AACE,eAAO;AACLlG,UAAAA,GAAG,EAAEkI,UAAU,CAAClI,GAAX,GAAiBoI,SAAS,CAACQ,MAA3B,GAAoCG,MADpC;AAEL9I,UAAAA,IAAI,EAAE,KAAKkJ,qBAAL,CAA2BjB,UAA3B,EAAuCE,SAAvC,EAAkDtI,QAAQ,CAAC4H,KAA3D,EAAkEwB,WAAlE,CAFD,EAAP;;AAIF,WAAK,QAAL;AACE,eAAO;AACLlJ,UAAAA,GAAG,EAAEkI,UAAU,CAAClI,GAAX,GAAiBkI,UAAU,CAACU,MAA5B,GAAqCG,MADrC;AAEL9I,UAAAA,IAAI,EAAE,KAAKkJ,qBAAL,CAA2BjB,UAA3B,EAAuCE,SAAvC,EAAkDtI,QAAQ,CAAC4H,KAA3D,EAAkEwB,WAAlE,CAFD,EAAP;;AAIF,WAAK,MAAL;AACE,eAAO;AACLlJ,UAAAA,GAAG,EAAE,KAAKoJ,mBAAL,CAAyBlB,UAAzB,EAAqCE,SAArC,EAAgDtI,QAAQ,CAAC4H,KAAzD,EAAgEwB,WAAhE,CADA;AAELjJ,UAAAA,IAAI,EAAEiI,UAAU,CAACjI,IAAX,GAAkBmI,SAAS,CAAC7F,KAA5B,GAAoCwG,MAFrC,EAAP;;AAIF,WAAK,OAAL;AACE,eAAO;AACL/I,UAAAA,GAAG,EAAE,KAAKoJ,mBAAL,CAAyBlB,UAAzB,EAAqCE,SAArC,EAAgDtI,QAAQ,CAAC4H,KAAzD,EAAgEwB,WAAhE,CADA;AAELjJ,UAAAA,IAAI,EAAEiI,UAAU,CAACjI,IAAX,GAAkBiI,UAAU,CAAC3F,KAA7B,GAAqCwG,MAFtC,EAAP;;AAIF;AACE,cAAM,IAAIM,KAAJ,4BAAmCvJ,QAAQ,CAACoG,SAA5C,OAAN,CAtBJ;;AAwBD,GAtjBH;;AAwjBUuB,EAAAA,YAxjBV,GAwjBE,sBAAqBC,KAArB,EAAoC;AAClC,QAAQ4B,SAAR,GAAsB,KAAKzI,KAA3B,CAAQyI,SAAR;;AAEA,YAAQ5B,KAAR;AACE,WAAK,KAAL;AACA,WAAK,QAAL;AACE,eAAO4B,SAAS,IAAI/B,QAAQ,CAAC,KAAKxE,KAAL,CAAWwG,cAAZ,CAArB,IAAoDhC,QAAQ,CAAC,KAAKxE,KAAL,CAAWyG,eAAZ,CAAnE;AACF,WAAK,MAAL;AACA,WAAK,OAAL;AACE,eAAOF,SAAS,IAAI/B,QAAQ,CAAC,KAAKxE,KAAL,CAAWwG,cAAZ,CAArB,IAAoDhC,QAAQ,CAAC,KAAKxE,KAAL,CAAW0G,eAAZ,CAAnE;AACF,WAAK,QAAL;AACA,WAAK,QAAL;AACE,eAAO,CAAP;AACF;AACE,cAAM,IAAIJ,KAAJ,wBAA+B3B,KAA/B,OAAN,CAXJ;;AAaD,GAxkBH;;AA0kBUyB,EAAAA,qBA1kBV,GA0kBE,+BAA8BjB,UAA9B,EAAgDE,SAAhD,EAAiEV,KAAjE,EAAgFwB,WAAhF,EAAqG;AACnG,YAAQxB,KAAR;AACE,WAAK,MAAL;AACE,eAAOQ,UAAU,CAACjI,IAAX,GAAkBiJ,WAAzB;AACF,WAAK,QAAL;AACE,eAAOhB,UAAU,CAACjI,IAAX,GAAkB,CAACmI,SAAS,CAAC7F,KAAV,GAAkB2F,UAAU,CAAC3F,KAA9B,IAAuC,CAAhE;AACF,WAAK,OAAL;AACE,eAAO2F,UAAU,CAACjI,IAAX,IAAmBmI,SAAS,CAAC7F,KAAV,GAAkB2F,UAAU,CAAC3F,KAAhD,IAAyD2G,WAAhE;AACF;AACE,cAAM,IAAIG,KAAJ,wBAA+B3B,KAA/B,OAAN,CARJ;;AAUD,GArlBH;;AAulBU0B,EAAAA,mBAvlBV,GAulBE,6BAA4BlB,UAA5B,EAA8CE,SAA9C,EAA+DV,KAA/D,EAA8EwB,WAA9E,EAAmG;AACjG,YAAQxB,KAAR;AACE,WAAK,KAAL;AACE,eAAOQ,UAAU,CAAClI,GAAX,GAAiBkJ,WAAxB;AACF,WAAK,QAAL;AACE,eAAOhB,UAAU,CAAClI,GAAX,GAAiB,CAACoI,SAAS,CAACQ,MAAV,GAAmBV,UAAU,CAACU,MAA/B,IAAyC,CAAjE;AACF,WAAK,QAAL;AACE,eAAOV,UAAU,CAAClI,GAAX,IAAkBoI,SAAS,CAACQ,MAAV,GAAmBV,UAAU,CAACU,MAAhD,IAA0DM,WAAjE;AACF;AACE,cAAM,IAAIG,KAAJ,wBAA+B3B,KAA/B,OAAN,CARJ;;AAUD,GAlmBH,gBAA2BpK,KAAK,CAACoM,SAAjC,WACgBC,mBADhB,GACsC,OADtC,UAGgBC,SAHhB,GAG4B,EACxB;AACJ;AACA,KACIxI,aAAa,EAAE7D,SAAS,CAACsM,SAAV,CAAoB,CAACpL,uBAAuB,CAAC,oBAAMqL,WAAN,EAAD,CAAxB,EAA6CvM,SAAS,CAACwM,IAAvD,CAApB,EAAkFC,UAJzE,EAMxB;AACJ;AACA,KACIlH,eAAe,EAAEvF,SAAS,CAAC0M,MATH,EAWxBpH,QAAQ,EAAEtF,SAAS,CAACsM,SAAV,CAAoB,CAACtM,SAAS,CAACwM,IAAX,EAAiBxM,SAAS,CAAC2M,IAA3B,CAApB,CAXc,EAaxB;AACJ;AACA,KACI5C,MAAM,EAAE/J,SAAS,CAAC4M,IAhBM,EAkBxB;AACJ;AACA,KACIrE,SAAS,EAAEvI,SAAS,CAAC4M,IArBG,EAuBxB;AACJ;AACA,KACIpB,MAAM,EAAExL,SAAS,CAAC6M,MA1BM,EA4BxB;AACJ;AACA,KACItJ,MAAM,EAAEvD,SAAS,CAAC4M,IA/BM,EAiCxB;AACJ;AACA,KACIb,SAAS,EAAE/L,SAAS,CAAC6M,MApCG,EAsCxB;AACJ;AACA;AACA;AACA,KACIhD,OAAO,EAAE7J,SAAS,CAAC6M,MA3CK,EA6CxB;AACJ;AACA,KACIlB,WAAW,EAAE3L,SAAS,CAAC6M,MAhDC,EAkDxB;AACJ;AACA;AACA,KACIpC,SAAS,EAAEzK,SAAS,CAAC8M,KAtDG,EAwDxB;AACJ;AACA,KACIrE,WAAW,EAAEzI,SAAS,CAAC4M,IA3DC,EAH5B,UAiEgBzJ,YAjEhB,GAiE6C,EACzCwI,WAAW,EAAE,CAD4B,EAEzC5B,MAAM,EAAE,KAFiC,EAGzCxB,SAAS,EAAE,KAH8B,EAIzCC,iBAAiB,EAAErH,SAJsB,EAKzCuG,UAAU,EAAE,KAL6B,EAMzCe,WAAW,EAAE,KAN4B,EAOzCzD,KAAK,EAAE,MAPkC,EAjE7C,UA8EyB+H,eA9EzB,GA8E2C,IA9E3C","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\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 { isElement, 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';\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(() => 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 (isElement(anchorElement)) {\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 || isElement(anchorElement);\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 && isElement(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 && isElement(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 = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(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(anchorElement && isElement(anchorElement), 'Anchor element is not defined or not instance of Element');\n\n if (!(anchorElement && isElement(anchorElement))) {\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,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { HTMLAttributes } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { Nullable } from '../../typings/utility-types';
|
|
4
4
|
import { FocusEventType, MouseEventType } from '../../typings/event-types';
|
|
@@ -16,7 +16,7 @@ export interface PopupHandlerProps {
|
|
|
16
16
|
onOpen?: () => void;
|
|
17
17
|
onClose?: () => void;
|
|
18
18
|
}
|
|
19
|
-
export interface PopupProps extends Omit<CommonProps, 'children'>, PopupHandlerProps {
|
|
19
|
+
export interface PopupProps extends Omit<CommonProps, 'children'>, PopupHandlerProps, Pick<HTMLAttributes<HTMLDivElement>, 'id'> {
|
|
20
20
|
anchorElement: React.ReactNode | HTMLElement;
|
|
21
21
|
backgroundColor?: React.CSSProperties['backgroundColor'];
|
|
22
22
|
borderColor?: React.CSSProperties['borderColor'];
|
|
@@ -65,10 +65,14 @@ export interface PopupState {
|
|
|
65
65
|
location: Nullable<PopupLocation>;
|
|
66
66
|
}
|
|
67
67
|
export declare const PopupDataTids: {
|
|
68
|
+
readonly root: "Popup__root";
|
|
68
69
|
readonly content: "PopupContent";
|
|
69
70
|
readonly contentInner: "PopupContentInner";
|
|
70
71
|
readonly popupPin: "PopupPin__root";
|
|
71
72
|
};
|
|
73
|
+
export declare const PopupIds: {
|
|
74
|
+
root: "Popup__root";
|
|
75
|
+
};
|
|
72
76
|
declare type DefaultProps = Required<Pick<PopupProps, 'popupOffset' | 'hasPin' | 'hasShadow' | 'disableAnimations' | 'useWrapper' | 'ignoreHover' | 'width'>>;
|
|
73
77
|
export declare class Popup extends React.Component<PopupProps, PopupState> {
|
|
74
78
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -134,6 +138,7 @@ export declare class Popup extends React.Component<PopupProps, PopupState> {
|
|
|
134
138
|
private setRootNode;
|
|
135
139
|
private refForTransition;
|
|
136
140
|
private hasAnchorElementListeners;
|
|
141
|
+
private rootId;
|
|
137
142
|
anchorElement: Nullable<Element>;
|
|
138
143
|
componentDidMount(): void;
|
|
139
144
|
static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState): PopupState;
|
|
@@ -4,14 +4,17 @@ import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
|
4
4
|
var _class, _class2, _temp;
|
|
5
5
|
|
|
6
6
|
import React from 'react';
|
|
7
|
+
import { getRandomID } from "../../../lib/utils";
|
|
7
8
|
import { isKeyArrowVertical, isKeyEnter, isKeyEscape, isKeySpace, someKeys } from "../../../lib/events/keyboard/identifiers";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
9
|
+
import { ThemeContext } from "../../../lib/theming/ThemeContext";
|
|
10
|
+
import { ThemeFactory } from "../../../lib/theming/ThemeFactory";
|
|
11
|
+
import { Popup, PopupIds } from "../../Popup";
|
|
10
12
|
import { RenderLayer } from "../../RenderLayer";
|
|
11
13
|
import { CommonWrapper } from "../../../internal/CommonWrapper";
|
|
12
14
|
import { responsiveLayout } from "../../../components/ResponsiveLayout/decorator";
|
|
13
15
|
import { rootNode } from "../../../lib/rootNode";
|
|
14
16
|
import { createPropsGetter } from "../../../lib/createPropsGetter";
|
|
17
|
+
import { Menu } from "../../Menu";
|
|
15
18
|
import { isValidPositions } from "../validatePositions";
|
|
16
19
|
import { styles } from "../PopupMenu.styles";
|
|
17
20
|
export var PopupMenuType = {
|
|
@@ -34,6 +37,7 @@ export var PopupMenu = rootNode(_class = responsiveLayout(_class = (_temp = _cla
|
|
|
34
37
|
}
|
|
35
38
|
|
|
36
39
|
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
|
|
40
|
+
_this.rootId = PopupIds.root + getRandomID();
|
|
37
41
|
_this.getProps = createPropsGetter(PopupMenu.defaultProps);
|
|
38
42
|
_this.state = {
|
|
39
43
|
menuVisible: false,
|
|
@@ -62,12 +66,15 @@ export var PopupMenu = rootNode(_class = responsiveLayout(_class = (_temp = _cla
|
|
|
62
66
|
};
|
|
63
67
|
|
|
64
68
|
_this.passPropsToCaption = function (caption) {
|
|
69
|
+
var _this$props$popupMenu;
|
|
70
|
+
|
|
65
71
|
if (typeof caption === 'string' || typeof caption === 'number') {
|
|
66
72
|
return caption;
|
|
67
73
|
}
|
|
68
74
|
|
|
69
75
|
return /*#__PURE__*/React.cloneElement(caption, {
|
|
70
|
-
'aria-
|
|
76
|
+
'aria-controls': (_this$props$popupMenu = _this.props.popupMenuId) != null ? _this$props$popupMenu : _this.rootId,
|
|
77
|
+
'aria-expanded': _this.state.menuVisible ? 'true' : 'false'
|
|
71
78
|
});
|
|
72
79
|
};
|
|
73
80
|
|
|
@@ -200,6 +207,20 @@ export var PopupMenu = rootNode(_class = responsiveLayout(_class = (_temp = _cla
|
|
|
200
207
|
var _proto = PopupMenu.prototype;
|
|
201
208
|
|
|
202
209
|
_proto.render = function render() {
|
|
210
|
+
var _this2 = this;
|
|
211
|
+
|
|
212
|
+
return /*#__PURE__*/React.createElement(ThemeContext.Consumer, null, function (theme) {
|
|
213
|
+
return /*#__PURE__*/React.createElement(ThemeContext.Provider, {
|
|
214
|
+
value: ThemeFactory.create({
|
|
215
|
+
menuOffsetY: theme.popupMenuMenuOffsetY
|
|
216
|
+
}, theme)
|
|
217
|
+
}, _this2.renderMain());
|
|
218
|
+
});
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
_proto.renderMain = function renderMain() {
|
|
222
|
+
var _this$props$popupMenu2;
|
|
223
|
+
|
|
203
224
|
var _this$getProps = this.getProps(),
|
|
204
225
|
popupHasPin = _this$getProps.popupHasPin,
|
|
205
226
|
disableAnimations = _this$getProps.disableAnimations;
|
|
@@ -211,13 +232,13 @@ export var PopupMenu = rootNode(_class = responsiveLayout(_class = (_temp = _cla
|
|
|
211
232
|
onFocusOutside: this.hideMenuWithoutFocusing,
|
|
212
233
|
active: this.state.menuVisible
|
|
213
234
|
}, /*#__PURE__*/React.createElement("div", {
|
|
214
|
-
id: this.props.popupMenuId,
|
|
215
235
|
"data-tid": PopupMenuDataTids.root,
|
|
216
236
|
className: styles.container(),
|
|
217
237
|
style: {
|
|
218
238
|
width: this.props.width
|
|
219
239
|
}
|
|
220
240
|
}, this.renderCaption(), this.captionWrapper && this.props.children && /*#__PURE__*/React.createElement(Popup, {
|
|
241
|
+
id: (_this$props$popupMenu2 = this.props.popupMenuId) != null ? _this$props$popupMenu2 : this.rootId,
|
|
221
242
|
anchorElement: this.captionWrapper,
|
|
222
243
|
opened: this.state.menuVisible,
|
|
223
244
|
hasShadow: true,
|
|
@@ -229,11 +250,12 @@ export var PopupMenu = rootNode(_class = responsiveLayout(_class = (_temp = _cla
|
|
|
229
250
|
onOpen: this.handleOpen,
|
|
230
251
|
mobileOnCloseRequest: this.hideMenu,
|
|
231
252
|
width: this.isMobileLayout ? 'auto' : this.props.menuWidth || 'auto'
|
|
232
|
-
}, /*#__PURE__*/React.createElement(
|
|
253
|
+
}, /*#__PURE__*/React.createElement(Menu, {
|
|
233
254
|
hasShadow: false,
|
|
234
255
|
maxHeight: this.isMobileLayout ? 'none' : this.props.menuMaxHeight || 'none',
|
|
235
256
|
onKeyDown: this.handleKeyDown,
|
|
236
257
|
onItemClick: this.handleItemSelection,
|
|
258
|
+
preventIconsOffset: this.props.preventIconsOffset,
|
|
237
259
|
cyclicSelection: false,
|
|
238
260
|
ref: this.refInternalMenu,
|
|
239
261
|
initialSelectedItemIndex: this.state.firstItemShouldBeSelected ? 0 : -1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["PopupMenu.tsx"],"names":["React","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","someKeys","InternalMenu","Popup","RenderLayer","CommonWrapper","responsiveLayout","rootNode","createPropsGetter","isValidPositions","styles","PopupMenuType","Dropdown","Tooltip","PopupMenuDataTids","root","caption","Positions","PopupMenu","getProps","defaultProps","state","menuVisible","firstItemShouldBeSelected","captionWrapper","savedFocusableElement","menu","open","showMenu","close","hideMenu","refInternalMenu","element","handleOpen","focus","passPropsToCaption","cloneElement","renderCaption","props","opened","openMenu","closeMenu","toggleMenu","handleCaptionClick","handleCaptionKeyDown","hideMenuWithoutFocusing","saveFocus","setState","handleChangeMenuVisible","restoreFocus","e","preventDefault","handleKeyDown","document","activeElement","focusShouldBeRestored","onOpen","onClose","onChangeMenuState","handleItemSelection","event","isDefaultPrevented","type","render","popupHasPin","disableAnimations","setRootNode","popupMenuId","container","width","children","popupMargin","popupPinOffset","getPositions","isMobileLayout","menuWidth","menuMaxHeight","header","footer","positions","Component","__KONTUR_REACT_UI__","Type"],"mappings":"2JAAA,OAAOA,KAAP,MAAkB,OAAlB;;;AAGA;AACEC,kBADF;AAEEC,UAFF;AAGEC,WAHF;AAIEC,UAJF;AAKEC,QALF;AAMO,uCANP;AAOA,SAASC,YAAT,QAA6B,iBAA7B;AACA,SAASC,KAAT,QAA0C,UAA1C;AACA,SAASC,WAAT,QAA4B,gBAA5B;;AAEA,SAAsBC,aAAtB,QAA2C,8BAA3C;AACA,SAASC,gBAAT,QAAiC,6CAAjC;AACA,SAASC,QAAT,QAAuC,oBAAvC;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;AAEA,SAASC,gBAAT,QAAiC,qBAAjC;AACA,SAASC,MAAT,QAAuB,oBAAvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,OAAO,IAAMC,aAAa,GAAG;AAC3BC,EAAAA,QAAQ,EAAE,UADiB;AAE3BC,EAAAA,OAAO,EAAE,SAFkB,EAAtB;;;AAKP,OAAO,IAAMC,iBAAiB,GAAG;AAC/BC,EAAAA,IAAI,EAAE,iBADyB;AAE/BC,EAAAA,OAAO,EAAE,oBAFsB,EAA1B;;;AAKP,IAAMC,SAA+B,GAAG;AACtC,UADsC;AAEtC,YAFsC;AAGtC,WAHsC;AAItC,WAJsC;AAKtC,cALsC;AAMtC,cANsC;AAOtC,aAPsC;AAQtC,eARsC;AAStC,cATsC;AAUtC,UAVsC;AAWtC,aAXsC;AAYtC,aAZsC,CAAxC;;;;;;;AAmBA,WAAaC,SAAb,GAFCX,QAED,UADCD,gBACD;;;;;;;;;;;;AAYUa,IAAAA,QAZV,GAYqBX,iBAAiB,CAACU,SAAS,CAACE,YAAX,CAZtC;;;;AAgBSC,IAAAA,KAhBT,GAgBiB;AACbC,MAAAA,WAAW,EAAE,KADA;AAEbC,MAAAA,yBAAyB,EAAE,KAFd,EAhBjB;;;AAqBUC,IAAAA,cArBV,GAqBmD,IArBnD;AAsBUC,IAAAA,qBAtBV,GAsBsD,IAtBtD;AAuBUC,IAAAA,IAvBV,GAuByC,IAvBzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6ESC,IAAAA,IA7ET,GA6EgB,oBAAY,MAAKC,QAAL,EAAZ,EA7EhB;AA8ESC,IAAAA,KA9ET,GA8EiB,oBAAY,MAAKC,QAAL,EAAZ,EA9EjB;;AAgFUC,IAAAA,eAhFV,GAgF4B,UAACC,OAAD,UAAsC,MAAKN,IAAL,GAAYM,OAAlD,EAhF5B;;AAkFUC,IAAAA,UAlFV,GAkFuB,YAAM;AACzB,UAAI,MAAKP,IAAT,EAAe;AACb,cAAKA,IAAL,CAAUQ,KAAV;AACD;AACF,KAtFH;;AAwFUC,IAAAA,kBAxFV,GAwF+B,UAACnB,OAAD,EAA8B;AACzD,UAAI,OAAOA,OAAP,KAAmB,QAAnB,IAA+B,OAAOA,OAAP,KAAmB,QAAtD,EAAgE;AAC9D,eAAOA,OAAP;AACD;;AAED,0BAAOpB,KAAK,CAACwC,YAAN,CAAmBpB,OAAnB,EAAkD,EAAE,iBAAiB,IAAnB,EAAlD,CAAP;AACD,KA9FH;;AAgGUqB,IAAAA,aAhGV,GAgG0B,YAAM;AAC5B,UAAI,OAAO,MAAKC,KAAL,CAAWtB,OAAlB,KAA8B,UAAlC,EAA8C;AAC5C,YAAMA,OAAO,GAAG,MAAKsB,KAAL,CAAWtB,OAAX,CAAmB;AACjCuB,UAAAA,MAAM,EAAE,MAAKlB,KAAL,CAAWC,WADc;AAEjCkB,UAAAA,QAAQ,EAAE,MAAKZ,QAFkB;AAGjCa,UAAAA,SAAS,EAAE,MAAKX,QAHiB;AAIjCY,UAAAA,UAAU,EAAE,MAAKA,UAJgB,EAAnB,CAAhB;;;AAOA;AACE;AACE,wBAAU5B,iBAAiB,CAACE,OAD9B;AAEE,YAAA,SAAS,EAAEN,MAAM,CAACM,OAAP,EAFb;AAGE,YAAA,GAAG,EAAE,aAACgB,OAAD,UAAc,MAAKR,cAAL,GAAsBQ,OAApC,EAHP;;AAKG,gBAAKG,kBAAL,CAAwBnB,OAAxB,CALH,CADF;;;AASD;;AAED;AACE;AACE,sBAAUF,iBAAiB,CAACE,OAD9B;AAEE,UAAA,OAAO,EAAE,MAAK2B,kBAFhB;AAGE,UAAA,SAAS,EAAE,MAAKC,oBAHlB;AAIE,UAAA,GAAG,EAAE,aAACZ,OAAD,UAAc,MAAKR,cAAL,GAAsBQ,OAApC,EAJP;AAKE,UAAA,SAAS,EAAEtB,MAAM,CAACM,OAAP,EALb;;AAOG,cAAKmB,kBAAL,CAAwB,MAAKG,KAAL,CAAWtB,OAAnC,CAPH,CADF;;;AAWD,KA/HH;;AAiIU6B,IAAAA,uBAjIV,GAiIoC,oBAAM,MAAKf,QAAL,EAAN,EAjIpC;;;;;;;;;;;AA4IUF,IAAAA,QA5IV,GA4IqB,UAACL,yBAAD,EAA+C;AAChE,YAAKuB,SAAL;AACA,YAAKC,QAAL;AACE;AACEzB,QAAAA,WAAW,EAAE,IADf;AAEEC,QAAAA,yBAAyB,EAAzBA,yBAFF,EADF;;AAKE,kBAAM;AACJ,cAAKyB,uBAAL,CAA6B,KAA7B;AACD,OAPH;;AASD,KAvJH;;AAyJUlB,IAAAA,QAzJV,GAyJqB,UAACmB,YAAD,EAAkC;AACnD,YAAKF,QAAL;AACE;AACEzB,QAAAA,WAAW,EAAE,KADf;AAEEC,QAAAA,yBAAyB,EAAE,KAF7B,EADF;;AAKE,kBAAM;AACJ,cAAKyB,uBAAL,CAA6B,CAAC,CAACC,YAA/B;AACD,OAPH;;AASD,KAnKH;;AAqKUP,IAAAA,UArKV,GAqKuB,YAAY;AAC/B,YAAKrB,KAAL,CAAWC,WAAX,GAAyB,MAAKQ,QAAL,EAAzB,GAA2C,MAAKF,QAAL,EAA3C;AACD,KAvKH;;AAyKUe,IAAAA,kBAzKV,GAyK+B,YAAY;AACvC,YAAKD,UAAL;AACD,KA3KH;;AA6KUE,IAAAA,oBA7KV,GA6KiC,UAACM,CAAD,EAA+C;AAC5E,UAAIjD,QAAQ,CAACH,UAAD,EAAaE,UAAb,EAAyBH,kBAAzB,CAAR,CAAqDqD,CAArD,CAAJ,EAA6D;AAC3DA,QAAAA,CAAC,CAACC,cAAF;AACA,cAAKvB,QAAL,CAAc,IAAd;AACD;AACF,KAlLH;;AAoLUwB,IAAAA,aApLV,GAoL0B,UAACF,CAAD,EAAyC;AAC/D,UAAInD,WAAW,CAACmD,CAAD,CAAf,EAAoB;AAClB,YAAMD,aAAY,GAAG,IAArB;AACA,cAAKnB,QAAL,CAAcmB,aAAd;AACD;AACF,KAzLH;;AA2LUH,IAAAA,SA3LV,GA2LsB,YAAY;AAC9B,UAAIO,QAAJ,EAAc;AACZ,cAAK5B,qBAAL,GAA6B4B,QAAQ,CAACC,aAAtC;AACD;AACF,KA/LH;;AAiMUL,IAAAA,YAjMV,GAiMyB,YAAY;AACjC,UAAI,MAAKxB,qBAAT,EAAgC;AAC9B,cAAKA,qBAAL,CAA2BS,KAA3B;AACA,cAAKT,qBAAL,GAA6B,IAA7B;AACD;AACF,KAtMH;;AAwMUuB,IAAAA,uBAxMV,GAwMoC,UAACO,qBAAD,EAA0C;AAC1E,UAAIA,qBAAJ,EAA2B;AACzB,cAAKN,YAAL;AACD;;AAED,UAAI,MAAK5B,KAAL,CAAWC,WAAX,IAA0B,MAAKgB,KAAL,CAAWkB,MAAzC,EAAiD;AAC/C,cAAKlB,KAAL,CAAWkB,MAAX;AACD;;AAED,UAAI,CAAC,MAAKnC,KAAL,CAAWC,WAAZ,IAA2B,MAAKgB,KAAL,CAAWmB,OAA1C,EAAmD;AACjD,cAAKnB,KAAL,CAAWmB,OAAX;AACD;;AAED,UAAI,OAAO,MAAKnB,KAAL,CAAWoB,iBAAlB,KAAwC,UAA5C,EAAwD;AACtD,cAAKpB,KAAL,CAAWoB,iBAAX,CAA6B,MAAKrC,KAAL,CAAWC,WAAxC,EAAqDiC,qBAArD;AACD;AACF,KAxNH;;AA0NUI,IAAAA,mBA1NV,GA0NgC,UAACC,KAAD,EAAoD;AAChF,UAAIA,KAAK,CAACC,kBAAN,EAAJ,EAAgC;AAC9B;AACD;;AAED,UAAID,KAAK,CAACE,IAAN,KAAe,SAAnB,EAA8B;AAC5BF,QAAAA,KAAK,CAACT,cAAN;AACD;;AAED,UAAMF,YAAY,GAAGW,KAAK,CAACE,IAAN,KAAe,SAApC;AACA,YAAKhC,QAAL,CAAcmB,YAAd;AACD,KArOH,uDA0BSc,MA1BT,GA0BE,kBAAgB,CACd,qBAA2C,KAAK5C,QAAL,EAA3C,CAAQ6C,WAAR,kBAAQA,WAAR,CAAqBC,iBAArB,kBAAqBA,iBAArB,CACA,oBACE,oBAAC,aAAD,aAAe,WAAW,EAAE,KAAKC,WAAjC,IAAkD,KAAK5B,KAAvD,gBACE,oBAAC,WAAD,IACE,cAAc,EAAE,KAAKO,uBADvB,EAEE,cAAc,EAAE,KAAKA,uBAFvB,EAGE,MAAM,EAAE,KAAKxB,KAAL,CAAWC,WAHrB,iBAKE,6BACE,EAAE,EAAE,KAAKgB,KAAL,CAAW6B,WADjB,EAEE,YAAUrD,iBAAiB,CAACC,IAF9B,EAGE,SAAS,EAAEL,MAAM,CAAC0D,SAAP,EAHb,EAIE,KAAK,EAAE,EAAEC,KAAK,EAAE,KAAK/B,KAAL,CAAW+B,KAApB,EAJT,IAMG,KAAKhC,aAAL,EANH,EAOG,KAAKb,cAAL,IAAuB,KAAKc,KAAL,CAAWgC,QAAlC,iBACC,oBAAC,KAAD,IACE,aAAa,EAAE,KAAK9C,cADtB,EAEE,MAAM,EAAE,KAAKH,KAAL,CAAWC,WAFrB,EAGE,SAAS,MAHX,EAIE,MAAM,EAAE,KAAKgB,KAAL,CAAWiC,WAJrB,EAKE,MAAM,EAAEP,WALV,EAME,SAAS,EAAE,KAAK1B,KAAL,CAAWkC,cANxB,EAOE,SAAS,EAAE,KAAKC,YAAL,EAPb,EAQE,iBAAiB,EAAER,iBARrB,EASE,MAAM,EAAE,KAAKhC,UATf,EAUE,oBAAoB,EAAE,KAAKH,QAV7B,EAWE,KAAK,EAAE,KAAK4C,cAAL,GAAsB,MAAtB,GAA+B,KAAKpC,KAAL,CAAWqC,SAAX,IAAwB,MAXhE,iBAaE,oBAAC,YAAD,IACE,SAAS,EAAE,KADb,EAEE,SAAS,EAAE,KAAKD,cAAL,GAAsB,MAAtB,GAA+B,KAAKpC,KAAL,CAAWsC,aAAX,IAA4B,MAFxE,EAGE,SAAS,EAAE,KAAKxB,aAHlB,EAIE,WAAW,EAAE,KAAKO,mBAJpB,EAKE,eAAe,EAAE,KALnB,EAME,GAAG,EAAE,KAAK5B,eANZ,EAOE,wBAAwB,EAAE,KAAKV,KAAL,CAAWE,yBAAX,GAAuC,CAAvC,GAA2C,CAAC,CAPxE,EAQE,MAAM,EAAE,KAAKe,KAAL,CAAWuC,MARrB,EASE,MAAM,EAAE,KAAKvC,KAAL,CAAWwC,MATrB,IAWG,KAAKxC,KAAL,CAAWgC,QAXd,CAbF,CARJ,CALF,CADF,CADF,CA+CD,CA3EH,QAmIUG,YAnIV,GAmIE,wBAAuD,CACrD,IAAMM,SAAS,GAAG,KAAK5D,QAAL,GAAgB4D,SAAlC,CACA,IAAIA,SAAS,IAAItE,gBAAgB,CAACsE,SAAD,CAAjC,EAA8C,CAC5C,OAAOA,SAAP,CACD,CAED,OAAO9D,SAAP,CACD,CA1IH,oBAA+BrB,KAAK,CAACoF,SAArC,WACgBC,mBADhB,GACsC,WADtC,UAKgB7D,YALhB,GAK6C,EACzC2D,SAAS,EAAE9D,SAD8B,EAEzC6C,IAAI,EAAEnD,aAAa,CAACE,OAFqB,EAGzCmD,WAAW,EAAE,IAH4B,EAIzCC,iBAAiB,EAAE,KAJsB,EAL7C,UAcgBiB,IAdhB,GAcuBvE,aAdvB","sourcesContent":["import React from 'react';\n\nimport { HTMLProps } from '../../typings/html';\nimport {\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n someKeys,\n} from '../../lib/events/keyboard/identifiers';\nimport { InternalMenu } from '../InternalMenu';\nimport { Popup, PopupPositionsType } from '../Popup';\nimport { RenderLayer } from '../RenderLayer';\nimport { Nullable } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { isValidPositions } from './validatePositions';\nimport { styles } from './PopupMenu.styles';\n\nexport interface PopupMenuCaptionProps {\n opened: boolean;\n openMenu: (firstItemShouldBeSelected?: boolean) => void;\n closeMenu: (restoreFocus?: boolean) => void;\n toggleMenu: () => void;\n}\n\nexport interface PopupMenuProps extends CommonProps {\n children?: React.ReactNode;\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Ширина контейнера и caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо ```caption```,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: React.ReactNode | ((props: PopupMenuCaptionProps) => React.ReactNode);\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n /** Массив разрешенных положений меню относительно caption'а. */\n positions?: PopupPositionsType[];\n /** Колбэк, вызываемый после открытия/закрытия меню */\n onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;\n /** Пропсы, передающиеся в Popup */\n popupHasPin?: boolean;\n popupMargin?: number;\n popupPinOffset?: number;\n type?: 'dropdown' | 'tooltip';\n disableAnimations?: boolean;\n /** Действие при открытии меню */\n onOpen?: () => void;\n /** Действие при закрытии меню */\n onClose?: () => void;\n /**\n * Позволяет задать `id` выпадающему меню.\n *\n * Это может пригодиться при реализации a11y. Например, для того, чтобы связать `aria-controls` с выпадающим меню.\n */\n popupMenuId?: HTMLProps['id'];\n}\n\ninterface PopupMenuState {\n menuVisible: boolean;\n firstItemShouldBeSelected?: boolean;\n}\n\nexport const PopupMenuType = {\n Dropdown: 'dropdown',\n Tooltip: 'tooltip',\n} as const;\n\nexport const PopupMenuDataTids = {\n root: 'PopupMenu__root',\n caption: 'PopupMenu__caption',\n} as const;\n\nconst Positions: PopupPositionsType[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n 'left top',\n 'left middle',\n 'left bottom',\n];\n\ntype DefaultProps = Required<Pick<PopupMenuProps, 'positions' | 'type' | 'popupHasPin' | 'disableAnimations'>>;\n\n@rootNode\n@responsiveLayout\nexport class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {\n public static __KONTUR_REACT_UI__ = 'PopupMenu';\n\n private isMobileLayout!: boolean;\n\n public static defaultProps: DefaultProps = {\n positions: Positions,\n type: PopupMenuType.Tooltip,\n popupHasPin: true,\n disableAnimations: false,\n };\n\n private getProps = createPropsGetter(PopupMenu.defaultProps);\n\n public static Type = PopupMenuType;\n\n public state = {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n };\n\n private captionWrapper: HTMLSpanElement | null = null;\n private savedFocusableElement: HTMLElement | null = null;\n private menu: Nullable<InternalMenu> = null;\n private setRootNode!: TSetRootNode;\n\n public render() {\n const { popupHasPin, disableAnimations } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.hideMenuWithoutFocusing}\n onFocusOutside={this.hideMenuWithoutFocusing}\n active={this.state.menuVisible}\n >\n <div\n id={this.props.popupMenuId}\n data-tid={PopupMenuDataTids.root}\n className={styles.container()}\n style={{ width: this.props.width }}\n >\n {this.renderCaption()}\n {this.captionWrapper && this.props.children && (\n <Popup\n anchorElement={this.captionWrapper}\n opened={this.state.menuVisible}\n hasShadow\n margin={this.props.popupMargin}\n hasPin={popupHasPin}\n pinOffset={this.props.popupPinOffset}\n positions={this.getPositions()}\n disableAnimations={disableAnimations}\n onOpen={this.handleOpen}\n mobileOnCloseRequest={this.hideMenu}\n width={this.isMobileLayout ? 'auto' : this.props.menuWidth || 'auto'}\n >\n <InternalMenu\n hasShadow={false}\n maxHeight={this.isMobileLayout ? 'none' : this.props.menuMaxHeight || 'none'}\n onKeyDown={this.handleKeyDown}\n onItemClick={this.handleItemSelection}\n cyclicSelection={false}\n ref={this.refInternalMenu}\n initialSelectedItemIndex={this.state.firstItemShouldBeSelected ? 0 : -1}\n header={this.props.header}\n footer={this.props.footer}\n >\n {this.props.children}\n </InternalMenu>\n </Popup>\n )}\n </div>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n public open = (): void => this.showMenu();\n public close = (): void => this.hideMenu();\n\n private refInternalMenu = (element: Nullable<InternalMenu>) => (this.menu = element);\n\n private handleOpen = () => {\n if (this.menu) {\n this.menu.focus();\n }\n };\n\n private passPropsToCaption = (caption: React.ReactNode) => {\n if (typeof caption === 'string' || typeof caption === 'number') {\n return caption;\n }\n\n return React.cloneElement(caption as React.ReactElement, { 'aria-haspopup': true });\n };\n\n private renderCaption = () => {\n if (typeof this.props.caption === 'function') {\n const caption = this.props.caption({\n opened: this.state.menuVisible,\n openMenu: this.showMenu,\n closeMenu: this.hideMenu,\n toggleMenu: this.toggleMenu,\n });\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n className={styles.caption()}\n ref={(element) => (this.captionWrapper = element)}\n >\n {this.passPropsToCaption(caption)}\n </span>\n );\n }\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n onClick={this.handleCaptionClick}\n onKeyDown={this.handleCaptionKeyDown}\n ref={(element) => (this.captionWrapper = element)}\n className={styles.caption()}\n >\n {this.passPropsToCaption(this.props.caption)}\n </span>\n );\n };\n\n private hideMenuWithoutFocusing = () => this.hideMenu();\n\n private getPositions(): Readonly<PopupPositionsType[]> {\n const positions = this.getProps().positions;\n if (positions && isValidPositions(positions)) {\n return positions;\n }\n\n return Positions;\n }\n\n private showMenu = (firstItemShouldBeSelected?: boolean): void => {\n this.saveFocus();\n this.setState(\n {\n menuVisible: true,\n firstItemShouldBeSelected,\n },\n () => {\n this.handleChangeMenuVisible(false);\n },\n );\n };\n\n private hideMenu = (restoreFocus?: boolean): void => {\n this.setState(\n {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n },\n () => {\n this.handleChangeMenuVisible(!!restoreFocus);\n },\n );\n };\n\n private toggleMenu = (): void => {\n this.state.menuVisible ? this.hideMenu() : this.showMenu();\n };\n\n private handleCaptionClick = (): void => {\n this.toggleMenu();\n };\n\n private handleCaptionKeyDown = (e: React.KeyboardEvent<HTMLElement>): void => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n this.showMenu(true);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEscape(e)) {\n const restoreFocus = true;\n this.hideMenu(restoreFocus);\n }\n };\n\n private saveFocus = (): void => {\n if (document) {\n this.savedFocusableElement = document.activeElement as HTMLElement;\n }\n };\n\n private restoreFocus = (): void => {\n if (this.savedFocusableElement) {\n this.savedFocusableElement.focus();\n this.savedFocusableElement = null;\n }\n };\n\n private handleChangeMenuVisible = (focusShouldBeRestored: boolean): void => {\n if (focusShouldBeRestored) {\n this.restoreFocus();\n }\n\n if (this.state.menuVisible && this.props.onOpen) {\n this.props.onOpen();\n }\n\n if (!this.state.menuVisible && this.props.onClose) {\n this.props.onClose();\n }\n\n if (typeof this.props.onChangeMenuState === 'function') {\n this.props.onChangeMenuState(this.state.menuVisible, focusShouldBeRestored);\n }\n };\n\n private handleItemSelection = (event: React.SyntheticEvent<HTMLElement>): void => {\n if (event.isDefaultPrevented()) {\n return;\n }\n\n if (event.type === 'keydown') {\n event.preventDefault();\n }\n\n const restoreFocus = event.type === 'keydown';\n this.hideMenu(restoreFocus);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["PopupMenu.tsx"],"names":["React","getRandomID","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","someKeys","ThemeContext","ThemeFactory","Popup","PopupIds","RenderLayer","CommonWrapper","responsiveLayout","rootNode","createPropsGetter","Menu","isValidPositions","styles","PopupMenuType","Dropdown","Tooltip","PopupMenuDataTids","root","caption","Positions","PopupMenu","rootId","getProps","defaultProps","state","menuVisible","firstItemShouldBeSelected","captionWrapper","savedFocusableElement","menu","open","showMenu","close","hideMenu","refInternalMenu","element","handleOpen","focus","passPropsToCaption","cloneElement","props","popupMenuId","renderCaption","opened","openMenu","closeMenu","toggleMenu","handleCaptionClick","handleCaptionKeyDown","hideMenuWithoutFocusing","saveFocus","setState","handleChangeMenuVisible","restoreFocus","e","preventDefault","handleKeyDown","document","activeElement","focusShouldBeRestored","onOpen","onClose","onChangeMenuState","handleItemSelection","event","isDefaultPrevented","type","render","theme","create","menuOffsetY","popupMenuMenuOffsetY","renderMain","popupHasPin","disableAnimations","setRootNode","container","width","children","popupMargin","popupPinOffset","getPositions","isMobileLayout","menuWidth","menuMaxHeight","preventIconsOffset","header","footer","positions","Component","__KONTUR_REACT_UI__","Type"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { getRandomID } from '../../lib/utils';\nimport { HTMLProps } from '../../typings/html';\nimport {\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n someKeys,\n} from '../../lib/events/keyboard/identifiers';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Popup, PopupIds, PopupPositionsType } from '../Popup';\nimport { RenderLayer } from '../RenderLayer';\nimport { Nullable } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Menu, MenuProps } from '../Menu';\n\nimport { isValidPositions } from './validatePositions';\nimport { styles } from './PopupMenu.styles';\n\nexport interface PopupMenuCaptionProps {\n opened: boolean;\n openMenu: (firstItemShouldBeSelected?: boolean) => void;\n closeMenu: (restoreFocus?: boolean) => void;\n toggleMenu: () => void;\n}\n\nexport interface PopupMenuProps extends CommonProps, Pick<MenuProps, 'preventIconsOffset'> {\n children?: React.ReactNode;\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Ширина контейнера и caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо ```caption```,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: React.ReactNode | ((props: PopupMenuCaptionProps) => React.ReactNode);\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n /** Массив разрешенных положений меню относительно caption'а. */\n positions?: PopupPositionsType[];\n /** Колбэк, вызываемый после открытия/закрытия меню */\n onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;\n /** Пропсы, передающиеся в Popup */\n popupHasPin?: boolean;\n popupMargin?: number;\n popupPinOffset?: number;\n type?: 'dropdown' | 'tooltip';\n disableAnimations?: boolean;\n /** Действие при открытии меню */\n onOpen?: () => void;\n /** Действие при закрытии меню */\n onClose?: () => void;\n /**\n * Позволяет задать `id` выпадающему меню.\n *\n * Это может пригодиться при реализации a11y. Например, для того, чтобы связать `aria-controls` с выпадающим меню.\n */\n popupMenuId?: HTMLProps['id'];\n}\n\ninterface PopupMenuState {\n menuVisible: boolean;\n firstItemShouldBeSelected?: boolean;\n}\n\nexport const PopupMenuType = {\n Dropdown: 'dropdown',\n Tooltip: 'tooltip',\n} as const;\n\nexport const PopupMenuDataTids = {\n root: 'PopupMenu__root',\n caption: 'PopupMenu__caption',\n} as const;\n\nconst Positions: PopupPositionsType[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n 'left top',\n 'left middle',\n 'left bottom',\n];\n\ntype DefaultProps = Required<Pick<PopupMenuProps, 'positions' | 'type' | 'popupHasPin' | 'disableAnimations'>>;\n\n@rootNode\n@responsiveLayout\nexport class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {\n public static __KONTUR_REACT_UI__ = 'PopupMenu';\n\n private isMobileLayout!: boolean;\n private rootId = PopupIds.root + getRandomID();\n\n public static defaultProps: DefaultProps = {\n positions: Positions,\n type: PopupMenuType.Tooltip,\n popupHasPin: true,\n disableAnimations: false,\n };\n\n private getProps = createPropsGetter(PopupMenu.defaultProps);\n\n public static Type = PopupMenuType;\n\n public state = {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n };\n\n private captionWrapper: HTMLSpanElement | null = null;\n private savedFocusableElement: HTMLElement | null = null;\n private menu: Nullable<Menu> = null;\n private setRootNode!: TSetRootNode;\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n menuOffsetY: theme.popupMenuMenuOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { popupHasPin, disableAnimations } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.hideMenuWithoutFocusing}\n onFocusOutside={this.hideMenuWithoutFocusing}\n active={this.state.menuVisible}\n >\n <div data-tid={PopupMenuDataTids.root} className={styles.container()} style={{ width: this.props.width }}>\n {this.renderCaption()}\n {this.captionWrapper && this.props.children && (\n <Popup\n id={this.props.popupMenuId ?? this.rootId}\n anchorElement={this.captionWrapper}\n opened={this.state.menuVisible}\n hasShadow\n margin={this.props.popupMargin}\n hasPin={popupHasPin}\n pinOffset={this.props.popupPinOffset}\n positions={this.getPositions()}\n disableAnimations={disableAnimations}\n onOpen={this.handleOpen}\n mobileOnCloseRequest={this.hideMenu}\n width={this.isMobileLayout ? 'auto' : this.props.menuWidth || 'auto'}\n >\n <Menu\n hasShadow={false}\n maxHeight={this.isMobileLayout ? 'none' : this.props.menuMaxHeight || 'none'}\n onKeyDown={this.handleKeyDown}\n onItemClick={this.handleItemSelection}\n preventIconsOffset={this.props.preventIconsOffset}\n cyclicSelection={false}\n ref={this.refInternalMenu}\n initialSelectedItemIndex={this.state.firstItemShouldBeSelected ? 0 : -1}\n header={this.props.header}\n footer={this.props.footer}\n >\n {this.props.children}\n </Menu>\n </Popup>\n )}\n </div>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n public open = (): void => this.showMenu();\n public close = (): void => this.hideMenu();\n\n private refInternalMenu = (element: Nullable<Menu>) => (this.menu = element);\n\n private handleOpen = () => {\n if (this.menu) {\n this.menu.focus();\n }\n };\n\n private passPropsToCaption = (caption: React.ReactNode) => {\n if (typeof caption === 'string' || typeof caption === 'number') {\n return caption;\n }\n\n return React.cloneElement(caption as React.ReactElement, {\n 'aria-controls': this.props.popupMenuId ?? this.rootId,\n 'aria-expanded': this.state.menuVisible ? 'true' : 'false',\n });\n };\n\n private renderCaption = () => {\n if (typeof this.props.caption === 'function') {\n const caption = this.props.caption({\n opened: this.state.menuVisible,\n openMenu: this.showMenu,\n closeMenu: this.hideMenu,\n toggleMenu: this.toggleMenu,\n });\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n className={styles.caption()}\n ref={(element) => (this.captionWrapper = element)}\n >\n {this.passPropsToCaption(caption)}\n </span>\n );\n }\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n onClick={this.handleCaptionClick}\n onKeyDown={this.handleCaptionKeyDown}\n ref={(element) => (this.captionWrapper = element)}\n className={styles.caption()}\n >\n {this.passPropsToCaption(this.props.caption)}\n </span>\n );\n };\n\n private hideMenuWithoutFocusing = () => this.hideMenu();\n\n private getPositions(): Readonly<PopupPositionsType[]> {\n const positions = this.getProps().positions;\n if (positions && isValidPositions(positions)) {\n return positions;\n }\n\n return Positions;\n }\n\n private showMenu = (firstItemShouldBeSelected?: boolean): void => {\n this.saveFocus();\n this.setState(\n {\n menuVisible: true,\n firstItemShouldBeSelected,\n },\n () => {\n this.handleChangeMenuVisible(false);\n },\n );\n };\n\n private hideMenu = (restoreFocus?: boolean): void => {\n this.setState(\n {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n },\n () => {\n this.handleChangeMenuVisible(!!restoreFocus);\n },\n );\n };\n\n private toggleMenu = (): void => {\n this.state.menuVisible ? this.hideMenu() : this.showMenu();\n };\n\n private handleCaptionClick = (): void => {\n this.toggleMenu();\n };\n\n private handleCaptionKeyDown = (e: React.KeyboardEvent<HTMLElement>): void => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n this.showMenu(true);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEscape(e)) {\n const restoreFocus = true;\n this.hideMenu(restoreFocus);\n }\n };\n\n private saveFocus = (): void => {\n if (document) {\n this.savedFocusableElement = document.activeElement as HTMLElement;\n }\n };\n\n private restoreFocus = (): void => {\n if (this.savedFocusableElement) {\n this.savedFocusableElement.focus();\n this.savedFocusableElement = null;\n }\n };\n\n private handleChangeMenuVisible = (focusShouldBeRestored: boolean): void => {\n if (focusShouldBeRestored) {\n this.restoreFocus();\n }\n\n if (this.state.menuVisible && this.props.onOpen) {\n this.props.onOpen();\n }\n\n if (!this.state.menuVisible && this.props.onClose) {\n this.props.onClose();\n }\n\n if (typeof this.props.onChangeMenuState === 'function') {\n this.props.onChangeMenuState(this.state.menuVisible, focusShouldBeRestored);\n }\n };\n\n private handleItemSelection = (event: React.SyntheticEvent<HTMLElement>): void => {\n if (event.isDefaultPrevented()) {\n return;\n }\n\n if (event.type === 'keydown') {\n event.preventDefault();\n }\n\n const restoreFocus = event.type === 'keydown';\n this.hideMenu(restoreFocus);\n };\n}\n"]}
|