@skbkontur/react-ui 3.9.4 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +57 -0
- package/cjs/components/Autocomplete/Autocomplete.d.ts +1 -0
- package/cjs/components/Autocomplete/Autocomplete.js +11 -5
- package/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
- package/cjs/components/Button/Button.d.ts +1 -0
- package/cjs/components/Button/Button.js +7 -3
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Center/Center.d.ts +1 -0
- package/cjs/components/Center/Center.js +10 -3
- package/cjs/components/Center/Center.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.d.ts +3 -2
- package/cjs/components/Checkbox/Checkbox.js +10 -4
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/ComboBox/ComboBox.d.ts +2 -0
- package/cjs/components/ComboBox/ComboBox.js +100 -70
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/CurrencyInput/CurrencyInput.d.ts +3 -3
- package/cjs/components/CurrencyInput/CurrencyInput.js +7 -4
- package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
- package/cjs/components/DateInput/DateInput.d.ts +1 -0
- package/cjs/components/DateInput/DateInput.js +6 -3
- package/cjs/components/DateInput/DateInput.js.map +1 -1
- package/cjs/components/DatePicker/DatePicker.d.ts +4 -2
- package/cjs/components/DatePicker/DatePicker.js +17 -7
- package/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/cjs/components/Dropdown/Dropdown.d.ts +1 -0
- package/cjs/components/Dropdown/Dropdown.js +11 -4
- package/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/cjs/components/DropdownMenu/DropdownMenu.d.ts +1 -0
- package/cjs/components/DropdownMenu/DropdownMenu.js +7 -4
- package/cjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/cjs/components/FxInput/FxInput.d.ts +1 -0
- package/cjs/components/FxInput/FxInput.js +9 -2
- package/cjs/components/FxInput/FxInput.js.map +1 -1
- package/cjs/components/Gapped/Gapped.d.ts +1 -0
- package/cjs/components/Gapped/Gapped.js +8 -5
- package/cjs/components/Gapped/Gapped.js.map +1 -1
- package/cjs/components/Group/Group.d.ts +1 -0
- package/cjs/components/Group/Group.js +10 -7
- package/cjs/components/Group/Group.js.map +1 -1
- package/cjs/components/Hint/Hint.d.ts +3 -2
- package/cjs/components/Hint/Hint.js +7 -4
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +4 -1
- package/cjs/components/Input/Input.js +13 -5
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Kebab/Kebab.d.ts +1 -0
- package/cjs/components/Kebab/Kebab.js +8 -5
- package/cjs/components/Kebab/Kebab.js.map +1 -1
- package/cjs/components/Link/Link.d.ts +1 -0
- package/cjs/components/Link/Link.js +11 -3
- package/cjs/components/Link/Link.js.map +1 -1
- package/cjs/components/Loader/Loader.d.ts +1 -0
- package/cjs/components/Loader/Loader.js +9 -6
- package/cjs/components/Loader/Loader.js.map +1 -1
- package/cjs/components/MenuItem/MenuItem.d.ts +1 -0
- package/cjs/components/MenuItem/MenuItem.js +13 -7
- package/cjs/components/MenuItem/MenuItem.js.map +1 -1
- package/cjs/components/Modal/Modal.js +1 -1
- package/cjs/components/Modal/Modal.js.map +1 -1
- package/cjs/components/Modal/ModalBody.d.ts +1 -0
- package/cjs/components/Modal/ModalBody.js +9 -6
- package/cjs/components/Modal/ModalBody.js.map +1 -1
- package/cjs/components/Paging/Paging.d.ts +2 -2
- package/cjs/components/Paging/Paging.js +6 -5
- package/cjs/components/Paging/Paging.js.map +1 -1
- package/cjs/components/PasswordInput/PasswordInput.d.ts +3 -2
- package/cjs/components/PasswordInput/PasswordInput.js +13 -6
- package/cjs/components/PasswordInput/PasswordInput.js.map +1 -1
- package/cjs/components/Radio/Radio.d.ts +5 -10
- package/cjs/components/Radio/Radio.js +11 -10
- package/cjs/components/Radio/Radio.js.map +1 -1
- package/cjs/components/RadioGroup/RadioGroup.d.ts +2 -16
- package/cjs/components/RadioGroup/RadioGroup.js +16 -19
- package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
- package/cjs/components/RadioGroup/RadioGroupContext.d.ts +10 -0
- package/cjs/components/RadioGroup/RadioGroupContext.js +21 -0
- package/cjs/components/RadioGroup/RadioGroupContext.js.map +1 -0
- package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -0
- package/cjs/components/ScrollContainer/ScrollContainer.js +8 -5
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +1 -0
- package/cjs/components/Select/Select.js +6 -4
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePage.d.ts +1 -0
- package/cjs/components/SidePage/SidePage.js +4 -1
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/components/SidePage/SidePageBody.d.ts +1 -0
- package/cjs/components/SidePage/SidePageBody.js +9 -6
- package/cjs/components/SidePage/SidePageBody.js.map +1 -1
- package/cjs/components/SidePage/SidePageContainer.d.ts +1 -0
- package/cjs/components/SidePage/SidePageContainer.js +9 -6
- package/cjs/components/SidePage/SidePageContainer.js.map +1 -1
- package/cjs/components/SidePage/SidePageFooter.d.ts +1 -2
- package/cjs/components/SidePage/SidePageFooter.js +11 -12
- package/cjs/components/SidePage/SidePageFooter.js.map +1 -1
- package/cjs/components/SidePage/SidePageHeader.d.ts +1 -0
- package/cjs/components/SidePage/SidePageHeader.js +6 -3
- package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
- package/cjs/components/Spinner/Spinner.d.ts +1 -0
- package/cjs/components/Spinner/Spinner.js +8 -5
- package/cjs/components/Spinner/Spinner.js.map +1 -1
- package/cjs/components/Sticky/Sticky.d.ts +1 -0
- package/cjs/components/Sticky/Sticky.js +8 -5
- package/cjs/components/Sticky/Sticky.js.map +1 -1
- package/cjs/components/Switcher/Switcher.d.ts +1 -0
- package/cjs/components/Switcher/Switcher.js +6 -3
- package/cjs/components/Switcher/Switcher.js.map +1 -1
- package/cjs/components/Tabs/Indicator.d.ts +1 -0
- package/cjs/components/Tabs/Indicator.js +16 -15
- package/cjs/components/Tabs/Indicator.js.map +1 -1
- package/cjs/components/Tabs/Tab.d.ts +2 -1
- package/cjs/components/Tabs/Tab.js +13 -9
- package/cjs/components/Tabs/Tab.js.map +1 -1
- package/cjs/components/Tabs/Tabs.d.ts +1 -0
- package/cjs/components/Tabs/Tabs.js +9 -9
- package/cjs/components/Tabs/Tabs.js.map +1 -1
- package/cjs/components/Textarea/Textarea.d.ts +1 -0
- package/cjs/components/Textarea/Textarea.js +12 -5
- package/cjs/components/Textarea/Textarea.js.map +1 -1
- package/cjs/components/Toast/Toast.d.ts +3 -0
- package/cjs/components/Toast/Toast.js +15 -4
- package/cjs/components/Toast/Toast.js.map +1 -1
- package/cjs/components/Toast/ToastView.d.ts +1 -0
- package/cjs/components/Toast/ToastView.js +8 -5
- package/cjs/components/Toast/ToastView.js.map +1 -1
- package/cjs/components/Toggle/Toggle.d.ts +1 -0
- package/cjs/components/Toggle/Toggle.js +9 -6
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/components/Token/Token.d.ts +1 -0
- package/cjs/components/Token/Token.js +7 -4
- package/cjs/components/Token/Token.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +1 -0
- package/cjs/components/TokenInput/TokenInput.js +11 -8
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.d.ts +3 -1
- package/cjs/components/Tooltip/Tooltip.js +16 -5
- package/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/cjs/components/TooltipMenu/TooltipMenu.d.ts +1 -0
- package/cjs/components/TooltipMenu/TooltipMenu.js +8 -5
- package/cjs/components/TooltipMenu/TooltipMenu.js.map +1 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.d.ts +9 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.js +38 -15
- package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js +3 -2
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +4 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js +15 -5
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
- package/cjs/internal/CustomComboBox/CustomComboBox.js +8 -5
- package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/cjs/internal/DateSelect/DateSelect.d.ts +2 -2
- package/cjs/internal/DateSelect/DateSelect.js +3 -3
- package/cjs/internal/DateSelect/DateSelect.js.map +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +4 -7
- package/cjs/internal/DropdownContainer/DropdownContainer.js +8 -13
- package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
- package/cjs/internal/FocusTrap/FocusTrap.d.ts +1 -0
- package/cjs/internal/FocusTrap/FocusTrap.js +12 -9
- package/cjs/internal/FocusTrap/FocusTrap.js.map +1 -1
- package/cjs/internal/IgnoreLayerClick/IgnoreLayerClick.js +12 -4
- package/cjs/internal/IgnoreLayerClick/IgnoreLayerClick.js.map +1 -1
- package/cjs/internal/InputLikeText/InputLikeText.d.ts +1 -0
- package/cjs/internal/InputLikeText/InputLikeText.js +10 -3
- package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
- package/cjs/internal/InternalMenu/InternalMenu.d.ts +2 -3
- package/cjs/internal/InternalMenu/InternalMenu.js +16 -22
- package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
- package/cjs/internal/MaskedInput/MaskedInput.d.ts +2 -2
- package/cjs/internal/MaskedInput/MaskedInput.js +3 -3
- package/cjs/internal/MaskedInput/MaskedInput.js.map +1 -1
- package/cjs/internal/Menu/Menu.d.ts +1 -0
- package/cjs/internal/Menu/Menu.js +9 -6
- package/cjs/internal/Menu/Menu.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +4 -4
- package/cjs/internal/Popup/Popup.js +50 -27
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/PopupMenu/PopupMenu.d.ts +1 -0
- package/cjs/internal/PopupMenu/PopupMenu.js +7 -4
- package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainer.d.ts +1 -1
- package/cjs/internal/RenderContainer/RenderContainer.js +2 -1
- package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderInnerContainer.js +2 -3
- package/cjs/internal/RenderContainer/RenderInnerContainer.js.map +1 -1
- package/cjs/internal/RenderLayer/RenderLayer.d.ts +3 -1
- package/cjs/internal/RenderLayer/RenderLayer.js +13 -7
- package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
- package/cjs/internal/ThemeShowcase/ThemeShowcase.d.ts +1 -1
- package/cjs/internal/ThemeShowcase/ThemeShowcase.js +20 -19
- package/cjs/internal/ThemeShowcase/ThemeShowcase.js.map +1 -1
- package/cjs/internal/ZIndex/ZIndex.d.ts +2 -0
- package/cjs/internal/ZIndex/ZIndex.js +45 -34
- package/cjs/internal/ZIndex/ZIndex.js.map +1 -1
- package/cjs/internal/icons/16px/index.d.ts +17 -16
- package/cjs/internal/icons/16px/index.js +108 -51
- package/cjs/internal/icons/16px/index.js.map +1 -1
- package/cjs/lib/callChildRef/callChildRef.d.ts +3 -0
- package/cjs/lib/callChildRef/callChildRef.js +19 -0
- package/cjs/lib/callChildRef/callChildRef.js.map +1 -0
- package/cjs/lib/rootNode/getRootNode.d.ts +3 -0
- package/cjs/lib/rootNode/getRootNode.js +27 -0
- package/cjs/lib/rootNode/getRootNode.js.map +1 -0
- package/cjs/lib/rootNode/index.d.ts +2 -0
- package/cjs/lib/rootNode/index.js +2 -0
- package/cjs/lib/rootNode/index.js.map +1 -0
- package/cjs/lib/rootNode/rootNodeDecorator.d.ts +33 -0
- package/cjs/lib/rootNode/rootNodeDecorator.js +31 -0
- package/cjs/lib/rootNode/rootNodeDecorator.js.map +1 -0
- package/cjs/lib/theming/Emotion.js +1 -0
- package/cjs/lib/theming/Emotion.js.map +1 -1
- package/cjs/lib/utils.d.ts +3 -0
- package/cjs/lib/utils.js +15 -2
- package/cjs/lib/utils.js.map +1 -1
- package/components/Autocomplete/Autocomplete/Autocomplete.js +19 -16
- package/components/Autocomplete/Autocomplete/Autocomplete.js.map +1 -1
- package/components/Autocomplete/Autocomplete.d.ts +1 -0
- package/components/Button/Button/Button.js +15 -12
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +1 -0
- package/components/Center/Center/Center.js +14 -9
- package/components/Center/Center/Center.js.map +1 -1
- package/components/Center/Center.d.ts +1 -0
- package/components/Checkbox/Checkbox/Checkbox.js +16 -10
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +3 -2
- package/components/ComboBox/ComboBox/ComboBox.js +38 -32
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +2 -0
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +29 -27
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
- package/components/CurrencyInput/CurrencyInput.d.ts +3 -3
- package/components/DateInput/DateInput/DateInput.js +7 -3
- package/components/DateInput/DateInput/DateInput.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +1 -0
- package/components/DatePicker/DatePicker/DatePicker.js +29 -22
- package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +4 -2
- package/components/Dropdown/Dropdown/Dropdown.js +15 -13
- package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +1 -0
- package/components/DropdownMenu/DropdownMenu/DropdownMenu.js +15 -9
- package/components/DropdownMenu/DropdownMenu/DropdownMenu.js.map +1 -1
- package/components/DropdownMenu/DropdownMenu.d.ts +1 -0
- package/components/FxInput/FxInput/FxInput.js +13 -9
- package/components/FxInput/FxInput/FxInput.js.map +1 -1
- package/components/FxInput/FxInput.d.ts +1 -0
- package/components/Gapped/Gapped/Gapped.js +15 -11
- package/components/Gapped/Gapped/Gapped.js.map +1 -1
- package/components/Gapped/Gapped.d.ts +1 -0
- package/components/Group/Group/Group.js +22 -9
- package/components/Group/Group/Group.js.map +1 -1
- package/components/Group/Group.d.ts +1 -0
- package/components/Hint/Hint/Hint.js +18 -12
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +3 -2
- package/components/Input/Input/Input.js +21 -14
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +4 -1
- package/components/Kebab/Kebab/Kebab.js +12 -7
- package/components/Kebab/Kebab/Kebab.js.map +1 -1
- package/components/Kebab/Kebab.d.ts +1 -0
- package/components/Link/Link/Link.js +15 -11
- package/components/Link/Link/Link.js.map +1 -1
- package/components/Link/Link.d.ts +1 -0
- package/components/Loader/Loader/Loader.js +16 -11
- package/components/Loader/Loader/Loader.js.map +1 -1
- package/components/Loader/Loader.d.ts +1 -0
- package/components/MenuItem/MenuItem/MenuItem.js +21 -14
- package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
- package/components/MenuItem/MenuItem.d.ts +1 -0
- package/components/Modal/Modal/Modal.js +1 -1
- package/components/Modal/Modal/Modal.js.map +1 -1
- package/components/Modal/ModalBody/ModalBody.js +16 -10
- package/components/Modal/ModalBody/ModalBody.js.map +1 -1
- package/components/Modal/ModalBody.d.ts +1 -0
- package/components/Paging/Paging/Paging.js +17 -14
- package/components/Paging/Paging/Paging.js.map +1 -1
- package/components/Paging/Paging.d.ts +2 -2
- package/components/PasswordInput/PasswordInput/PasswordInput.js +18 -14
- package/components/PasswordInput/PasswordInput/PasswordInput.js.map +1 -1
- package/components/PasswordInput/PasswordInput.d.ts +3 -2
- package/components/Radio/Radio/Radio.js +17 -19
- package/components/Radio/Radio/Radio.js.map +1 -1
- package/components/Radio/Radio.d.ts +5 -10
- package/components/RadioGroup/RadioGroup/RadioGroup.js +35 -38
- package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +2 -16
- package/components/RadioGroup/RadioGroupContext/RadioGroupContext.js +12 -0
- package/components/RadioGroup/RadioGroupContext/RadioGroupContext.js.map +1 -0
- package/components/RadioGroup/RadioGroupContext/package.json +6 -0
- package/components/RadioGroup/RadioGroupContext.d.ts +10 -0
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +13 -8
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +1 -0
- package/components/Select/Select/Select.js +8 -5
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +1 -0
- package/components/SidePage/SidePage/SidePage.js +6 -3
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/SidePage/SidePage.d.ts +1 -0
- package/components/SidePage/SidePageBody/SidePageBody.js +16 -10
- package/components/SidePage/SidePageBody/SidePageBody.js.map +1 -1
- package/components/SidePage/SidePageBody.d.ts +1 -0
- package/components/SidePage/SidePageContainer/SidePageContainer.js +16 -9
- package/components/SidePage/SidePageContainer/SidePageContainer.js.map +1 -1
- package/components/SidePage/SidePageContainer.d.ts +1 -0
- package/components/SidePage/SidePageFooter/SidePageFooter.js +22 -19
- package/components/SidePage/SidePageFooter/SidePageFooter.js.map +1 -1
- package/components/SidePage/SidePageFooter.d.ts +1 -2
- package/components/SidePage/SidePageHeader/SidePageHeader.js +15 -10
- package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
- package/components/SidePage/SidePageHeader.d.ts +1 -0
- package/components/Spinner/Spinner/Spinner.js +8 -3
- package/components/Spinner/Spinner/Spinner.js.map +1 -1
- package/components/Spinner/Spinner.d.ts +1 -0
- package/components/Sticky/Sticky/Sticky.js +13 -8
- package/components/Sticky/Sticky/Sticky.js.map +1 -1
- package/components/Sticky/Sticky.d.ts +1 -0
- package/components/Switcher/Switcher/Switcher.js +11 -6
- package/components/Switcher/Switcher/Switcher.js.map +1 -1
- package/components/Switcher/Switcher.d.ts +1 -0
- package/components/Tabs/Indicator/Indicator.js +16 -14
- package/components/Tabs/Indicator/Indicator.js.map +1 -1
- package/components/Tabs/Indicator.d.ts +1 -0
- package/components/Tabs/Tab/Tab.js +31 -34
- package/components/Tabs/Tab/Tab.js.map +1 -1
- package/components/Tabs/Tab.d.ts +2 -1
- package/components/Tabs/Tabs/Tabs.js +20 -20
- package/components/Tabs/Tabs/Tabs.js.map +1 -1
- package/components/Tabs/Tabs.d.ts +1 -0
- package/components/Textarea/Textarea/Textarea.js +21 -17
- package/components/Textarea/Textarea/Textarea.js.map +1 -1
- package/components/Textarea/Textarea.d.ts +1 -0
- package/components/Toast/Toast/Toast.js +29 -14
- package/components/Toast/Toast/Toast.js.map +1 -1
- package/components/Toast/Toast.d.ts +3 -0
- package/components/Toast/ToastView/ToastView.js +10 -5
- package/components/Toast/ToastView/ToastView.js.map +1 -1
- package/components/Toast/ToastView.d.ts +1 -0
- package/components/Toggle/Toggle/Toggle.js +16 -11
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +1 -0
- package/components/Token/Token/Token.js +11 -4
- package/components/Token/Token/Token.js.map +1 -1
- package/components/Token/Token.d.ts +1 -0
- package/components/TokenInput/TokenInput/TokenInput.js +12 -6
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +1 -0
- package/components/Tooltip/Tooltip/Tooltip.js +24 -15
- package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +3 -1
- package/components/TooltipMenu/TooltipMenu/TooltipMenu.js +23 -17
- package/components/TooltipMenu/TooltipMenu/TooltipMenu.js.map +1 -1
- package/components/TooltipMenu/TooltipMenu.d.ts +1 -0
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js +37 -10
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
- package/internal/CommonWrapper/CommonWrapper.d.ts +9 -1
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +5 -3
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +23 -13
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.d.ts +4 -1
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +12 -4
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
- package/internal/DateSelect/DateSelect/DateSelect.js +5 -5
- package/internal/DateSelect/DateSelect/DateSelect.js.map +1 -1
- package/internal/DateSelect/DateSelect.d.ts +2 -2
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +11 -15
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
- package/internal/DropdownContainer/DropdownContainer.d.ts +4 -7
- package/internal/FocusTrap/FocusTrap/FocusTrap.js +17 -9
- package/internal/FocusTrap/FocusTrap/FocusTrap.js.map +1 -1
- package/internal/FocusTrap/FocusTrap.d.ts +1 -0
- package/internal/IgnoreLayerClick/IgnoreLayerClick/IgnoreLayerClick.js +13 -7
- package/internal/IgnoreLayerClick/IgnoreLayerClick/IgnoreLayerClick.js.map +1 -1
- package/internal/InputLikeText/InputLikeText/InputLikeText.js +11 -6
- package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
- package/internal/InputLikeText/InputLikeText.d.ts +1 -0
- package/internal/InternalMenu/InternalMenu/InternalMenu.js +24 -25
- package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
- package/internal/InternalMenu/InternalMenu.d.ts +2 -3
- package/internal/MaskedInput/MaskedInput/MaskedInput.js +7 -7
- package/internal/MaskedInput/MaskedInput/MaskedInput.js.map +1 -1
- package/internal/MaskedInput/MaskedInput.d.ts +2 -2
- package/internal/Menu/Menu/Menu.js +11 -8
- package/internal/Menu/Menu/Menu.js.map +1 -1
- package/internal/Menu/Menu.d.ts +1 -0
- package/internal/Popup/Popup/Popup.js +79 -68
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +4 -4
- package/internal/PopupMenu/PopupMenu/PopupMenu.js +12 -7
- package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
- package/internal/PopupMenu/PopupMenu.d.ts +1 -0
- package/internal/RenderContainer/RenderContainer/RenderContainer.js +3 -1
- package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
- package/internal/RenderContainer/RenderContainer.d.ts +1 -1
- package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js +2 -3
- package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js.map +1 -1
- package/internal/RenderLayer/RenderLayer/RenderLayer.js +20 -18
- package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
- package/internal/RenderLayer/RenderLayer.d.ts +3 -1
- package/internal/ThemeShowcase/ThemeShowcase/ThemeShowcase.js +35 -43
- package/internal/ThemeShowcase/ThemeShowcase/ThemeShowcase.js.map +1 -1
- package/internal/ThemeShowcase/ThemeShowcase.d.ts +1 -1
- package/internal/ZIndex/ZIndex/ZIndex.js +20 -8
- package/internal/ZIndex/ZIndex/ZIndex.js.map +1 -1
- package/internal/ZIndex/ZIndex.d.ts +2 -0
- package/internal/icons/16px/index/index.js +83 -51
- package/internal/icons/16px/index/index.js.map +1 -1
- package/internal/icons/16px/index.d.ts +17 -16
- package/lib/callChildRef/callChildRef/callChildRef.js +14 -0
- package/lib/callChildRef/callChildRef/callChildRef.js.map +1 -0
- package/lib/callChildRef/callChildRef/package.json +6 -0
- package/lib/callChildRef/callChildRef.d.ts +3 -0
- package/lib/rootNode/getRootNode/getRootNode.js +25 -0
- package/lib/rootNode/getRootNode/getRootNode.js.map +1 -0
- package/lib/rootNode/getRootNode/package.json +6 -0
- package/lib/rootNode/getRootNode.d.ts +3 -0
- package/lib/rootNode/index/index.js +2 -0
- package/lib/rootNode/index/index.js.map +1 -0
- package/lib/rootNode/index/package.json +6 -0
- package/lib/rootNode/index.d.ts +2 -0
- package/lib/rootNode/package.json +6 -0
- package/lib/rootNode/rootNodeDecorator/package.json +6 -0
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js +37 -0
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js.map +1 -0
- package/lib/rootNode/rootNodeDecorator.d.ts +33 -0
- package/lib/theming/Emotion/Emotion.js +1 -0
- package/lib/theming/Emotion/Emotion.js.map +1 -1
- package/lib/utils/utils.js +11 -1
- package/lib/utils/utils.js.map +1 -1
- package/lib/utils.d.ts +3 -0
- package/package.json +8 -2
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
|
|
1
2
|
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
3
|
+
|
|
4
|
+
var _class, _class2, _temp;
|
|
5
|
+
|
|
2
6
|
import React from 'react';
|
|
3
|
-
import ReactDOM from 'react-dom';
|
|
4
7
|
import { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from "../../../lib/events/keyboard/identifiers";
|
|
5
8
|
import { ScrollContainer } from "../../../components/ScrollContainer";
|
|
6
9
|
import { isMenuItem } from "../../../components/MenuItem";
|
|
@@ -8,10 +11,11 @@ import { isMenuHeader } from "../../../components/MenuHeader";
|
|
|
8
11
|
import { createPropsGetter } from "../../../lib/createPropsGetter";
|
|
9
12
|
import { ThemeContext } from "../../../lib/theming/ThemeContext";
|
|
10
13
|
import { cx } from "../../../lib/theming/Emotion";
|
|
14
|
+
import { getRootNode, rootNode } from "../../../lib/rootNode";
|
|
11
15
|
import { styles } from "../InternalMenu.styles";
|
|
12
16
|
import { isActiveElement } from "../isActiveElement";
|
|
13
|
-
export var InternalMenu = /*#__PURE__*/function (_React$
|
|
14
|
-
_inheritsLoose(InternalMenu, _React$
|
|
17
|
+
export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$PureComponent) {
|
|
18
|
+
_inheritsLoose(InternalMenu, _React$PureComponent);
|
|
15
19
|
|
|
16
20
|
function InternalMenu() {
|
|
17
21
|
var _this;
|
|
@@ -20,7 +24,7 @@ export var InternalMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
20
24
|
args[_key] = arguments[_key];
|
|
21
25
|
}
|
|
22
26
|
|
|
23
|
-
_this = _React$
|
|
27
|
+
_this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this;
|
|
24
28
|
_this.state = {
|
|
25
29
|
highlightedIndex: -1,
|
|
26
30
|
maxHeight: _this.props.maxHeight || 'none',
|
|
@@ -29,7 +33,7 @@ export var InternalMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
29
33
|
_this.theme = void 0;
|
|
30
34
|
_this.scrollContainer = void 0;
|
|
31
35
|
_this.highlighted = void 0;
|
|
32
|
-
_this.
|
|
36
|
+
_this.setRootNode = void 0;
|
|
33
37
|
_this.header = void 0;
|
|
34
38
|
_this.footer = void 0;
|
|
35
39
|
_this.getProps = createPropsGetter(InternalMenu.defaultProps);
|
|
@@ -57,9 +61,9 @@ export var InternalMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
57
61
|
};
|
|
58
62
|
|
|
59
63
|
_this.focusOnRootElement = function () {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
var _getRootNode;
|
|
65
|
+
|
|
66
|
+
(_getRootNode = getRootNode(_assertThisInitialized(_this))) == null ? void 0 : _getRootNode.focus();
|
|
63
67
|
};
|
|
64
68
|
|
|
65
69
|
_this.shouldRecalculateMaxHeight = function (prevProps) {
|
|
@@ -78,9 +82,10 @@ export var InternalMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
78
82
|
_this.calculateMaxHeight = function () {
|
|
79
83
|
var maxHeight = _this.props.maxHeight;
|
|
80
84
|
var parsedMaxHeight = maxHeight;
|
|
85
|
+
var rootNode = getRootNode(_assertThisInitialized(_this));
|
|
81
86
|
|
|
82
|
-
if (typeof maxHeight === 'string' && typeof window !== 'undefined' &&
|
|
83
|
-
var rootElementMaxHeight = window.getComputedStyle(
|
|
87
|
+
if (typeof maxHeight === 'string' && typeof window !== 'undefined' && rootNode) {
|
|
88
|
+
var rootElementMaxHeight = window.getComputedStyle(rootNode).maxHeight;
|
|
84
89
|
|
|
85
90
|
if (rootElementMaxHeight) {
|
|
86
91
|
parsedMaxHeight = parseFloat(rootElementMaxHeight);
|
|
@@ -106,18 +111,18 @@ export var InternalMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
106
111
|
|
|
107
112
|
_this.scrollToSelected = function () {
|
|
108
113
|
if (_this.scrollContainer && _this.highlighted) {
|
|
109
|
-
_this.scrollContainer.scrollTo(
|
|
114
|
+
_this.scrollContainer.scrollTo(getRootNode(_this.highlighted));
|
|
110
115
|
}
|
|
111
116
|
};
|
|
112
117
|
|
|
113
118
|
_this.highlightItem = function (index) {
|
|
119
|
+
var _getRootNode2;
|
|
120
|
+
|
|
114
121
|
_this.setState({
|
|
115
122
|
highlightedIndex: index
|
|
116
123
|
});
|
|
117
124
|
|
|
118
|
-
|
|
119
|
-
_this.rootElement.focus();
|
|
120
|
-
}
|
|
125
|
+
(_getRootNode2 = getRootNode(_assertThisInitialized(_this))) == null ? void 0 : _getRootNode2.focus();
|
|
121
126
|
};
|
|
122
127
|
|
|
123
128
|
_this.unhighlight = function () {
|
|
@@ -180,12 +185,10 @@ export var InternalMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
180
185
|
if (this.shouldRecalculateMaxHeight(prevProps)) {
|
|
181
186
|
this.calculateMaxHeight();
|
|
182
187
|
}
|
|
183
|
-
};
|
|
184
188
|
|
|
185
|
-
|
|
186
|
-
if (nextProps.maxHeight !== this.props.maxHeight) {
|
|
189
|
+
if (prevProps.maxHeight !== this.props.maxHeight) {
|
|
187
190
|
this.setState({
|
|
188
|
-
maxHeight:
|
|
191
|
+
maxHeight: this.props.maxHeight || 'none'
|
|
189
192
|
});
|
|
190
193
|
}
|
|
191
194
|
};
|
|
@@ -222,9 +225,7 @@ export var InternalMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
222
225
|
maxHeight: this.state.maxHeight
|
|
223
226
|
},
|
|
224
227
|
onKeyDown: this.handleKeyDown,
|
|
225
|
-
ref:
|
|
226
|
-
_this3.rootElement = element;
|
|
227
|
-
},
|
|
228
|
+
ref: this.setRootNode,
|
|
228
229
|
tabIndex: 0
|
|
229
230
|
}, this.props.header ? this.renderHeader() : null, /*#__PURE__*/React.createElement(ScrollContainer, {
|
|
230
231
|
ref: this.refScrollContainer,
|
|
@@ -365,16 +366,14 @@ export var InternalMenu = /*#__PURE__*/function (_React$Component) {
|
|
|
365
366
|
};
|
|
366
367
|
|
|
367
368
|
return InternalMenu;
|
|
368
|
-
}(React.
|
|
369
|
-
InternalMenu.__KONTUR_REACT_UI__ = 'InternalMenu';
|
|
370
|
-
InternalMenu.defaultProps = {
|
|
369
|
+
}(React.PureComponent), _class2.__KONTUR_REACT_UI__ = 'InternalMenu', _class2.defaultProps = {
|
|
371
370
|
width: 'auto',
|
|
372
371
|
maxHeight: 300,
|
|
373
372
|
hasShadow: true,
|
|
374
373
|
preventWindowScroll: true,
|
|
375
374
|
cyclicSelection: true,
|
|
376
375
|
initialSelectedItemIndex: -1
|
|
377
|
-
};
|
|
376
|
+
}, _temp)) || _class;
|
|
378
377
|
|
|
379
378
|
function isExist(value) {
|
|
380
379
|
return value !== null && value !== undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["InternalMenu.tsx"],"names":["React","ReactDOM","isKeyArrowDown","isKeyArrowUp","isKeyEnter","ScrollContainer","isMenuItem","isMenuHeader","createPropsGetter","ThemeContext","cx","styles","isActiveElement","InternalMenu","state","highlightedIndex","maxHeight","props","scrollState","theme","scrollContainer","highlighted","rootElement","header","footer","getProps","defaultProps","renderHeader","el","fixedHeader","renderFooter","fixedFooter","focusOnRootElement","focus","shouldRecalculateMaxHeight","prevProps","children","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","Children","count","calculateMaxHeight","parsedMaxHeight","window","rootElementMaxHeight","getComputedStyle","parseFloat","calculatedMaxHeight","getBoundingClientRect","height","setState","setInitialSelection","i","initialSelectedItemIndex","moveDown","refScrollContainer","scrollToSelected","scrollTo","findDOMNode","highlightItem","index","unhighlight","moveUp","move","handleKeyDown","e","onKeyDown","defaultPrevented","preventDefault","onClick","handleScrollStateChange","componentDidMount","componentDidUpdate","prevState","UNSAFE_componentWillReceiveProps","nextProps","render","renderMain","enableIconPadding","toArray","some","x","isValidElement","icon","isEmpty","root","shadow","hasShadow","width","element","preventWindowScroll","map","child","type","cloneElement","_enableIconPadding","highlight","ref","originalRef","menuItem","refHighlighted","select","bind","onMouseEnter","event","onMouseLeave","current","shouldHandleHref","item","childrenToArray","href","target","open","location","onItemClick","step","cyclicSelection","length","filter","isExist","Component","__KONTUR_REACT_UI__","value","undefined","ret","forEach","push"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { ScrollContainer, ScrollContainerScrollState } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { isMenuHeader } from '../../components/MenuHeader';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './InternalMenu.styles';\nimport { isActiveElement } from './isActiveElement';\n\ninterface MenuProps {\n children?: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Циклический перебор айтемов меню (по-дефолтну включен)\n cyclicSelection?: boolean;\n initialSelectedItemIndex?: number;\n}\n\ninterface MenuState {\n highlightedIndex: number;\n maxHeight: number | string;\n scrollState: ScrollContainerScrollState;\n}\n\nexport class InternalMenu extends React.Component<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'InternalMenu';\n\n public static defaultProps = {\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n cyclicSelection: true,\n initialSelectedItemIndex: -1,\n };\n\n public state: MenuState = {\n highlightedIndex: -1,\n maxHeight: this.props.maxHeight || 'none',\n scrollState: 'top',\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private rootElement: Nullable<HTMLDivElement>;\n private header: Nullable<HTMLDivElement>;\n private footer: Nullable<HTMLDivElement>;\n private getProps = createPropsGetter(InternalMenu.defaultProps);\n\n public componentDidMount() {\n this.setInitialSelection();\n this.calculateMaxHeight();\n }\n\n public componentDidUpdate(prevProps: MenuProps, prevState: MenuState) {\n if (this.shouldRecalculateMaxHeight(prevProps)) {\n this.calculateMaxHeight();\n }\n }\n\n public UNSAFE_componentWillReceiveProps(nextProps: MenuProps) {\n if (nextProps.maxHeight !== this.props.maxHeight) {\n this.setState({\n maxHeight: nextProps.maxHeight || 'none',\n });\n }\n }\n\n public focus() {\n this.focusOnRootElement();\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 renderMain() {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n className={cx({\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={{\n width: this.props.width,\n maxHeight: this.state.maxHeight,\n }}\n onKeyDown={this.handleKeyDown}\n ref={(element) => {\n this.rootElement = element;\n }}\n tabIndex={0}\n >\n {this.props.header ? this.renderHeader() : null}\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n onScrollStateChange={this.handleScrollStateChange}\n >\n {React.Children.map(this.props.children, (child, index) => {\n if (typeof child === 'string' || typeof child === 'number' || child == null) {\n return child;\n }\n if (React.isValidElement(child) && typeof child.type === 'string') {\n return child;\n }\n\n if (enableIconPadding && (isMenuItem(child) || isMenuHeader(child))) {\n child = React.cloneElement(child, {\n _enableIconPadding: true,\n });\n }\n\n if (isActiveElement(child)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = child.ref;\n const originalRef = ref;\n if (highlight) {\n ref = (menuItem) => this.refHighlighted(originalRef, menuItem);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(child, {\n ref,\n state: highlight ? 'hover' : child.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: (event) => {\n this.highlightItem(index);\n if (isMenuItem(child) && child.props.onMouseEnter) {\n child.props.onMouseEnter(event);\n }\n },\n onMouseLeave: (event) => {\n this.unhighlight();\n if (isMenuItem(child) && child.props.onMouseLeave) {\n child.props.onMouseLeave(event);\n }\n },\n });\n }\n\n return child;\n })}\n </ScrollContainer>\n {this.props.footer ? this.renderFooter() : null}\n </div>\n );\n }\n\n private renderHeader = () => {\n return (\n <div\n ref={(el) => (this.header = el)}\n className={cx({\n [styles.header()]: true,\n [styles.fixedHeader()]: this.state.scrollState !== 'top',\n })}\n >\n {this.props.header}\n </div>\n );\n };\n\n private renderFooter = () => {\n return (\n <div\n ref={(el) => (this.footer = el)}\n className={cx({\n [styles.footer()]: true,\n [styles.fixedFooter()]: this.state.scrollState !== 'bottom',\n })}\n >\n {this.props.footer}\n </div>\n );\n };\n\n private focusOnRootElement = (): void => {\n if (this.rootElement) {\n this.rootElement.focus();\n }\n };\n\n private shouldRecalculateMaxHeight = (prevProps: MenuProps): boolean => {\n const { maxHeight, header, footer, children } = this.props;\n const prevMaxHeight = prevProps.maxHeight;\n const prevHeader = prevProps.header;\n const prevFooter = prevProps.footer;\n const prevChildrenCount = React.Children.count(prevProps.children);\n\n return (\n maxHeight !== prevMaxHeight ||\n footer !== prevFooter ||\n header !== prevHeader ||\n React.Children.count(children) !== prevChildrenCount\n );\n };\n\n private calculateMaxHeight = () => {\n const { maxHeight } = this.props;\n let parsedMaxHeight = maxHeight;\n\n if (typeof maxHeight === 'string' && typeof window !== 'undefined' && this.rootElement) {\n const rootElementMaxHeight = window.getComputedStyle(this.rootElement).maxHeight;\n\n if (rootElementMaxHeight) {\n parsedMaxHeight = parseFloat(rootElementMaxHeight);\n }\n }\n\n const calculatedMaxHeight =\n typeof parsedMaxHeight === 'number'\n ? parsedMaxHeight +\n ((this.header && this.header.getBoundingClientRect().height) || 0) +\n ((this.footer && this.footer.getBoundingClientRect().height) || 0)\n : maxHeight;\n\n this.setState({\n maxHeight: calculatedMaxHeight || 'none',\n });\n };\n\n private setInitialSelection = () => {\n for (let i = this.getProps().initialSelectedItemIndex; i > -1; i--) {\n this.moveDown();\n }\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: string | ((instance: MenuItem | null) => void) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (!originalRef || typeof originalRef === 'string') {\n return;\n }\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n } else if (typeof originalRef === 'object') {\n // @ts-ignore see issue https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065\n originalRef.current = menuItem;\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(ReactDOM.findDOMNode(this.highlighted) as HTMLElement);\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event as React.MouseEvent<HTMLElement>);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick(event);\n }\n return true;\n }\n return false;\n }\n\n private highlightItem = (index: number): void => {\n this.setState({ highlightedIndex: index });\n if (this.rootElement) {\n this.rootElement.focus();\n }\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n this.setState((state, props) => {\n const children = childrenToArray(props.children);\n if (!children.some(isActiveElement)) {\n return null;\n }\n let index = state.highlightedIndex;\n do {\n index += step;\n if (!props.cyclicSelection && (index < 0 || index > children.length)) {\n return null;\n }\n\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n return { highlightedIndex: index };\n }\n } while (index !== state.highlightedIndex);\n return null;\n }, this.scrollToSelected);\n }\n\n private moveUp = () => {\n this.move(-1);\n };\n\n private moveDown = () => {\n this.move(1);\n };\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\n }\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n if (typeof this.props.onKeyDown === 'function') {\n this.props.onKeyDown(e);\n }\n\n if (e.defaultPrevented) {\n return;\n }\n\n if (isKeyArrowUp(e)) {\n e.preventDefault();\n this.moveUp();\n } else if (isKeyArrowDown(e)) {\n e.preventDefault();\n this.moveDown();\n } else if (isKeyEnter(e)) {\n if (this.highlighted && this.highlighted.props.onClick) {\n this.highlighted.props.onClick(e);\n }\n }\n };\n\n private handleScrollStateChange = (scrollState: ScrollContainerScrollState) => {\n if (this.state.scrollState !== scrollState) {\n this.setState({ scrollState });\n }\n };\n}\n\nfunction isExist(value: any): value is any {\n return value !== null && value !== undefined;\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["InternalMenu.tsx"],"names":["React","isKeyArrowDown","isKeyArrowUp","isKeyEnter","ScrollContainer","isMenuItem","isMenuHeader","createPropsGetter","ThemeContext","cx","getRootNode","rootNode","styles","isActiveElement","InternalMenu","state","highlightedIndex","maxHeight","props","scrollState","theme","scrollContainer","highlighted","setRootNode","header","footer","getProps","defaultProps","renderHeader","el","fixedHeader","renderFooter","fixedFooter","focusOnRootElement","focus","shouldRecalculateMaxHeight","prevProps","children","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","Children","count","calculateMaxHeight","parsedMaxHeight","window","rootElementMaxHeight","getComputedStyle","parseFloat","calculatedMaxHeight","getBoundingClientRect","height","setState","setInitialSelection","i","initialSelectedItemIndex","moveDown","refScrollContainer","scrollToSelected","scrollTo","highlightItem","index","unhighlight","moveUp","move","handleKeyDown","e","onKeyDown","defaultPrevented","preventDefault","onClick","handleScrollStateChange","componentDidMount","componentDidUpdate","prevState","render","renderMain","enableIconPadding","toArray","some","x","isValidElement","icon","isEmpty","root","shadow","hasShadow","width","preventWindowScroll","map","child","type","cloneElement","_enableIconPadding","highlight","ref","originalRef","menuItem","refHighlighted","select","bind","onMouseEnter","event","onMouseLeave","current","shouldHandleHref","item","childrenToArray","href","target","open","location","onItemClick","step","cyclicSelection","length","filter","isExist","PureComponent","__KONTUR_REACT_UI__","value","undefined","ret","forEach","push"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { ScrollContainer, ScrollContainerScrollState } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { isMenuHeader } from '../../components/MenuHeader';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './InternalMenu.styles';\nimport { isActiveElement } from './isActiveElement';\n\ninterface MenuProps {\n children?: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Циклический перебор айтемов меню (по-дефолтну включен)\n cyclicSelection?: boolean;\n initialSelectedItemIndex?: number;\n}\n\ninterface MenuState {\n highlightedIndex: number;\n maxHeight: number | string;\n scrollState: ScrollContainerScrollState;\n}\n\n@rootNode\nexport class InternalMenu extends React.PureComponent<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'InternalMenu';\n\n public static defaultProps = {\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n cyclicSelection: true,\n initialSelectedItemIndex: -1,\n };\n\n public state: MenuState = {\n highlightedIndex: -1,\n maxHeight: this.props.maxHeight || 'none',\n scrollState: 'top',\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private setRootNode!: TSetRootNode;\n private header: Nullable<HTMLDivElement>;\n private footer: Nullable<HTMLDivElement>;\n private getProps = createPropsGetter(InternalMenu.defaultProps);\n\n public componentDidMount() {\n this.setInitialSelection();\n this.calculateMaxHeight();\n }\n\n public componentDidUpdate(prevProps: MenuProps, prevState: MenuState) {\n if (this.shouldRecalculateMaxHeight(prevProps)) {\n this.calculateMaxHeight();\n }\n\n if (prevProps.maxHeight !== this.props.maxHeight) {\n this.setState({\n maxHeight: this.props.maxHeight || 'none',\n });\n }\n }\n\n public focus() {\n this.focusOnRootElement();\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 renderMain() {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n className={cx({\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={{\n width: this.props.width,\n maxHeight: this.state.maxHeight,\n }}\n onKeyDown={this.handleKeyDown}\n ref={this.setRootNode}\n tabIndex={0}\n >\n {this.props.header ? this.renderHeader() : null}\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n onScrollStateChange={this.handleScrollStateChange}\n >\n {React.Children.map(this.props.children, (child, index) => {\n if (typeof child === 'string' || typeof child === 'number' || child == null) {\n return child;\n }\n if (React.isValidElement(child) && typeof child.type === 'string') {\n return child;\n }\n\n if (enableIconPadding && (isMenuItem(child) || isMenuHeader(child))) {\n child = React.cloneElement(child, {\n _enableIconPadding: true,\n });\n }\n\n if (isActiveElement(child)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = child.ref;\n const originalRef = ref;\n if (highlight) {\n ref = (menuItem) => this.refHighlighted(originalRef, menuItem);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(child, {\n ref,\n state: highlight ? 'hover' : child.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: (event) => {\n this.highlightItem(index);\n if (isMenuItem(child) && child.props.onMouseEnter) {\n child.props.onMouseEnter(event);\n }\n },\n onMouseLeave: (event) => {\n this.unhighlight();\n if (isMenuItem(child) && child.props.onMouseLeave) {\n child.props.onMouseLeave(event);\n }\n },\n });\n }\n\n return child;\n })}\n </ScrollContainer>\n {this.props.footer ? this.renderFooter() : null}\n </div>\n );\n }\n\n private renderHeader = () => {\n return (\n <div\n ref={(el) => (this.header = el)}\n className={cx({\n [styles.header()]: true,\n [styles.fixedHeader()]: this.state.scrollState !== 'top',\n })}\n >\n {this.props.header}\n </div>\n );\n };\n\n private renderFooter = () => {\n return (\n <div\n ref={(el) => (this.footer = el)}\n className={cx({\n [styles.footer()]: true,\n [styles.fixedFooter()]: this.state.scrollState !== 'bottom',\n })}\n >\n {this.props.footer}\n </div>\n );\n };\n\n private focusOnRootElement = (): void => {\n getRootNode(this)?.focus();\n };\n\n private shouldRecalculateMaxHeight = (prevProps: MenuProps): boolean => {\n const { maxHeight, header, footer, children } = this.props;\n const prevMaxHeight = prevProps.maxHeight;\n const prevHeader = prevProps.header;\n const prevFooter = prevProps.footer;\n const prevChildrenCount = React.Children.count(prevProps.children);\n\n return (\n maxHeight !== prevMaxHeight ||\n footer !== prevFooter ||\n header !== prevHeader ||\n React.Children.count(children) !== prevChildrenCount\n );\n };\n\n private calculateMaxHeight = () => {\n const { maxHeight } = this.props;\n let parsedMaxHeight = maxHeight;\n const rootNode = getRootNode(this);\n\n if (typeof maxHeight === 'string' && typeof window !== 'undefined' && rootNode) {\n const rootElementMaxHeight = window.getComputedStyle(rootNode).maxHeight;\n\n if (rootElementMaxHeight) {\n parsedMaxHeight = parseFloat(rootElementMaxHeight);\n }\n }\n\n const calculatedMaxHeight =\n typeof parsedMaxHeight === 'number'\n ? parsedMaxHeight +\n ((this.header && this.header.getBoundingClientRect().height) || 0) +\n ((this.footer && this.footer.getBoundingClientRect().height) || 0)\n : maxHeight;\n\n this.setState({\n maxHeight: calculatedMaxHeight || 'none',\n });\n };\n\n private setInitialSelection = () => {\n for (let i = this.getProps().initialSelectedItemIndex; i > -1; i--) {\n this.moveDown();\n }\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: string | ((instance: MenuItem | null) => void) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (!originalRef || typeof originalRef === 'string') {\n return;\n }\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n } else if (typeof originalRef === 'object') {\n // @ts-ignore see issue https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065\n originalRef.current = menuItem;\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(getRootNode(this.highlighted));\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event as React.MouseEvent<HTMLElement>);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick(event);\n }\n return true;\n }\n return false;\n }\n\n private highlightItem = (index: number): void => {\n this.setState({ highlightedIndex: index });\n getRootNode(this)?.focus();\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n this.setState((state, props) => {\n const children = childrenToArray(props.children);\n if (!children.some(isActiveElement)) {\n return null;\n }\n let index = state.highlightedIndex;\n do {\n index += step;\n if (!props.cyclicSelection && (index < 0 || index > children.length)) {\n return null;\n }\n\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n return { highlightedIndex: index };\n }\n } while (index !== state.highlightedIndex);\n return null;\n }, this.scrollToSelected);\n }\n\n private moveUp = () => {\n this.move(-1);\n };\n\n private moveDown = () => {\n this.move(1);\n };\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\n }\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n if (typeof this.props.onKeyDown === 'function') {\n this.props.onKeyDown(e);\n }\n\n if (e.defaultPrevented) {\n return;\n }\n\n if (isKeyArrowUp(e)) {\n e.preventDefault();\n this.moveUp();\n } else if (isKeyArrowDown(e)) {\n e.preventDefault();\n this.moveDown();\n } else if (isKeyEnter(e)) {\n if (this.highlighted && this.highlighted.props.onClick) {\n this.highlighted.props.onClick(e);\n }\n }\n };\n\n private handleScrollStateChange = (scrollState: ScrollContainerScrollState) => {\n if (this.state.scrollState !== scrollState) {\n this.setState({ scrollState });\n }\n };\n}\n\nfunction isExist(value: any): value is any {\n return value !== null && value !== undefined;\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n"]}
|
|
@@ -18,7 +18,7 @@ interface MenuState {
|
|
|
18
18
|
maxHeight: number | string;
|
|
19
19
|
scrollState: ScrollContainerScrollState;
|
|
20
20
|
}
|
|
21
|
-
export declare class InternalMenu extends React.
|
|
21
|
+
export declare class InternalMenu extends React.PureComponent<MenuProps, MenuState> {
|
|
22
22
|
static __KONTUR_REACT_UI__: string;
|
|
23
23
|
static defaultProps: {
|
|
24
24
|
width: string;
|
|
@@ -32,13 +32,12 @@ export declare class InternalMenu extends React.Component<MenuProps, MenuState>
|
|
|
32
32
|
private theme;
|
|
33
33
|
private scrollContainer;
|
|
34
34
|
private highlighted;
|
|
35
|
-
private
|
|
35
|
+
private setRootNode;
|
|
36
36
|
private header;
|
|
37
37
|
private footer;
|
|
38
38
|
private getProps;
|
|
39
39
|
componentDidMount(): void;
|
|
40
40
|
componentDidUpdate(prevProps: MenuProps, prevState: MenuState): void;
|
|
41
|
-
UNSAFE_componentWillReceiveProps(nextProps: MenuProps): void;
|
|
42
41
|
focus(): void;
|
|
43
42
|
render(): JSX.Element;
|
|
44
43
|
private renderMain;
|
|
@@ -7,13 +7,13 @@ import { ThemeContext } from "../../../lib/theming/ThemeContext";
|
|
|
7
7
|
import { MaskCharLowLine } from "../../MaskCharLowLine";
|
|
8
8
|
import { cx } from "../../../lib/theming/Emotion";
|
|
9
9
|
import { styles } from "../MaskedInput.styles";
|
|
10
|
-
export var MaskedInput = /*#__PURE__*/function (_React$
|
|
11
|
-
_inheritsLoose(MaskedInput, _React$
|
|
10
|
+
export var MaskedInput = /*#__PURE__*/function (_React$PureComponent) {
|
|
11
|
+
_inheritsLoose(MaskedInput, _React$PureComponent);
|
|
12
12
|
|
|
13
13
|
function MaskedInput(_props) {
|
|
14
14
|
var _this;
|
|
15
15
|
|
|
16
|
-
_this = _React$
|
|
16
|
+
_this = _React$PureComponent.call(this, _props) || this;
|
|
17
17
|
_this.input = null;
|
|
18
18
|
_this.theme = void 0;
|
|
19
19
|
_this.reactInputMask = null;
|
|
@@ -126,10 +126,10 @@ export var MaskedInput = /*#__PURE__*/function (_React$Component) {
|
|
|
126
126
|
}
|
|
127
127
|
};
|
|
128
128
|
|
|
129
|
-
_proto.
|
|
130
|
-
if (this.props.value !==
|
|
129
|
+
_proto.componentDidUpdate = function componentDidUpdate(prevProps) {
|
|
130
|
+
if (this.props.value !== prevProps.value) {
|
|
131
131
|
this.setState({
|
|
132
|
-
value:
|
|
132
|
+
value: this.props.value ? this.props.value.toString() : ''
|
|
133
133
|
});
|
|
134
134
|
}
|
|
135
135
|
};
|
|
@@ -190,7 +190,7 @@ export var MaskedInput = /*#__PURE__*/function (_React$Component) {
|
|
|
190
190
|
};
|
|
191
191
|
|
|
192
192
|
return MaskedInput;
|
|
193
|
-
}(React.
|
|
193
|
+
}(React.PureComponent);
|
|
194
194
|
MaskedInput.__KONTUR_REACT_UI__ = 'MaskedInput';
|
|
195
195
|
MaskedInput.defaultProps = {
|
|
196
196
|
maskChar: '_'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MaskedInput.tsx"],"names":["React","ReactInputMask","ThemeContext","MaskCharLowLine","cx","styles","MaskedInput","props","input","theme","reactInputMask","getValue","value","defaultValue","undefined","toString","refInput","refMaskedInput","handleChange","event","target","state","handleUnexpectedInput","setState","onValueChange","onChange","handleFocus","focused","onFocus","handleBlur","onBlur","preprocess","newState","oldState","userInput","options","visibleMaskChars","Array","mask","length","fill","maskChar","split","forEach","char","index","permanents","includes","emptyValue","join","isMaskVisible","alwaysShowMask","onUnexpectedInput","componentDidMount","forceUpdate","UNSAFE_componentWillReceiveProps","nextProps","render","renderMain","hasLeftIcon","hasRightIcon","maxLength","style","inputProps","leftHelper","textAlign","color","slice","leftClass","inputMaskLeft","rightHelper","map","_char","i","container","inputMask","Component","__KONTUR_REACT_UI__","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactInputMask, { InputState, MaskOptions } from 'react-input-mask';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MaskCharLowLine } from '../MaskCharLowLine';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './MaskedInput.styles';\n\nexport interface MaskedInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n mask: string;\n maskChar: string | null;\n formatChars?: { [key: string]: string };\n alwaysShowMask?: boolean;\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n onUnexpectedInput?: (value: string) => void;\n onValueChange?: (value: string) => void;\n}\n\ninterface MaskedInputState {\n value: string;\n emptyValue: string;\n focused: boolean;\n}\n\nexport class MaskedInput extends React.Component<MaskedInputProps, MaskedInputState> {\n public static __KONTUR_REACT_UI__ = 'MaskedInput';\n\n public static defaultProps: Partial<MaskedInputProps> = {\n maskChar: '_',\n };\n\n public input: HTMLInputElement | null = null;\n private theme!: Theme;\n private reactInputMask: ReactInputMask | null = null;\n\n public constructor(props: MaskedInputProps) {\n super(props);\n\n this.state = {\n value: this.getValue(props),\n emptyValue: '',\n focused: false,\n };\n }\n\n public componentDidMount() {\n if (this.reactInputMask) {\n // FIXME: принудительно вызываем beforeMaskedValueChange, чтобы получить emptyValue\n this.reactInputMask.forceUpdate();\n }\n }\n\n public UNSAFE_componentWillReceiveProps(nextProps: MaskedInputProps) {\n if (this.props.value !== nextProps.value) {\n this.setState({\n value: nextProps.value ? nextProps.value.toString() : '',\n });\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 renderMain() {\n const {\n maskChar,\n alwaysShowMask,\n hasLeftIcon,\n hasRightIcon,\n maxLength,\n onValueChange,\n onUnexpectedInput,\n defaultValue,\n style,\n ...inputProps\n } = this.props;\n const { emptyValue, value } = this.state;\n\n const leftHelper = style?.textAlign !== 'right' && (\n <span style={{ color: 'transparent' }}>{emptyValue.slice(0, value.length)}</span>\n );\n const leftClass = style?.textAlign !== 'right' && styles.inputMaskLeft();\n\n const rightHelper = emptyValue\n .slice(value.length)\n .split('')\n .map((_char, i) => (_char === '_' ? <MaskCharLowLine key={i} /> : _char));\n\n return (\n <span className={styles.container()} x-ms-format-detection=\"none\">\n <ReactInputMask\n {...inputProps}\n maskChar={null}\n beforeMaskedValueChange={this.preprocess}\n alwaysShowMask={false}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n value={value}\n inputRef={this.refInput}\n ref={this.refMaskedInput}\n style={{ ...style }}\n />\n {this.isMaskVisible() && (\n <span className={cx(styles.inputMask(this.theme), leftClass)}>\n {leftHelper}\n {rightHelper}\n </span>\n )}\n </span>\n );\n }\n\n private getValue = (props: MaskedInputProps): string => {\n const { value, defaultValue } = props;\n\n return value !== undefined ? value.toString() : defaultValue !== undefined ? defaultValue.toString() : '';\n };\n\n private refInput = (input: HTMLInputElement | null) => {\n this.input = input;\n };\n\n private refMaskedInput = (reactInputMask: ReactInputMask) => {\n this.reactInputMask = reactInputMask;\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.value === this.state.value) {\n this.handleUnexpectedInput();\n } else {\n this.setState({ value: event.target.value });\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private preprocess = (\n newState: InputState,\n oldState: InputState,\n userInput: string,\n options: MaskOptions & Pick<MaskedInputProps, 'mask'>,\n ) => {\n const visibleMaskChars = new Array(options.mask.length).fill(this.props.maskChar);\n\n if (newState.value !== oldState.value && userInput === null) {\n this.setState({\n value: newState.value,\n });\n }\n\n options.mask.split('').forEach((char, index) => {\n if (options.permanents.includes(index)) {\n visibleMaskChars[index] = char;\n }\n\n if (newState.value[index]) {\n visibleMaskChars[index] = newState.value[index];\n }\n });\n\n const emptyValue = visibleMaskChars.join('');\n\n if (this.state.emptyValue !== emptyValue) {\n this.setState({\n emptyValue,\n });\n }\n\n return newState;\n };\n\n private isMaskVisible = () => this.props.alwaysShowMask || this.state.focused;\n\n private handleUnexpectedInput = () => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(this.state.value);\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["MaskedInput.tsx"],"names":["React","ReactInputMask","ThemeContext","MaskCharLowLine","cx","styles","MaskedInput","props","input","theme","reactInputMask","getValue","value","defaultValue","undefined","toString","refInput","refMaskedInput","handleChange","event","target","state","handleUnexpectedInput","setState","onValueChange","onChange","handleFocus","focused","onFocus","handleBlur","onBlur","preprocess","newState","oldState","userInput","options","visibleMaskChars","Array","mask","length","fill","maskChar","split","forEach","char","index","permanents","includes","emptyValue","join","isMaskVisible","alwaysShowMask","onUnexpectedInput","componentDidMount","forceUpdate","componentDidUpdate","prevProps","render","renderMain","hasLeftIcon","hasRightIcon","maxLength","style","inputProps","leftHelper","textAlign","color","slice","leftClass","inputMaskLeft","rightHelper","map","_char","i","container","inputMask","PureComponent","__KONTUR_REACT_UI__","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactInputMask, { InputState, MaskOptions } from 'react-input-mask';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MaskCharLowLine } from '../MaskCharLowLine';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './MaskedInput.styles';\n\nexport interface MaskedInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n mask: string;\n maskChar: string | null;\n formatChars?: { [key: string]: string };\n alwaysShowMask?: boolean;\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n onUnexpectedInput?: (value: string) => void;\n onValueChange?: (value: string) => void;\n}\n\ninterface MaskedInputState {\n value: string;\n emptyValue: string;\n focused: boolean;\n}\n\nexport class MaskedInput extends React.PureComponent<MaskedInputProps, MaskedInputState> {\n public static __KONTUR_REACT_UI__ = 'MaskedInput';\n\n public static defaultProps: Partial<MaskedInputProps> = {\n maskChar: '_',\n };\n\n public input: HTMLInputElement | null = null;\n private theme!: Theme;\n private reactInputMask: ReactInputMask | null = null;\n\n public constructor(props: MaskedInputProps) {\n super(props);\n\n this.state = {\n value: this.getValue(props),\n emptyValue: '',\n focused: false,\n };\n }\n\n public componentDidMount() {\n if (this.reactInputMask) {\n // FIXME: принудительно вызываем beforeMaskedValueChange, чтобы получить emptyValue\n this.reactInputMask.forceUpdate();\n }\n }\n\n public componentDidUpdate(prevProps: MaskedInputProps) {\n if (this.props.value !== prevProps.value) {\n this.setState({\n value: this.props.value ? this.props.value.toString() : '',\n });\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 renderMain() {\n const {\n maskChar,\n alwaysShowMask,\n hasLeftIcon,\n hasRightIcon,\n maxLength,\n onValueChange,\n onUnexpectedInput,\n defaultValue,\n style,\n ...inputProps\n } = this.props;\n const { emptyValue, value } = this.state;\n\n const leftHelper = style?.textAlign !== 'right' && (\n <span style={{ color: 'transparent' }}>{emptyValue.slice(0, value.length)}</span>\n );\n const leftClass = style?.textAlign !== 'right' && styles.inputMaskLeft();\n\n const rightHelper = emptyValue\n .slice(value.length)\n .split('')\n .map((_char, i) => (_char === '_' ? <MaskCharLowLine key={i} /> : _char));\n\n return (\n <span className={styles.container()} x-ms-format-detection=\"none\">\n <ReactInputMask\n {...inputProps}\n maskChar={null}\n beforeMaskedValueChange={this.preprocess}\n alwaysShowMask={false}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n value={value}\n inputRef={this.refInput}\n ref={this.refMaskedInput}\n style={{ ...style }}\n />\n {this.isMaskVisible() && (\n <span className={cx(styles.inputMask(this.theme), leftClass)}>\n {leftHelper}\n {rightHelper}\n </span>\n )}\n </span>\n );\n }\n\n private getValue = (props: MaskedInputProps): string => {\n const { value, defaultValue } = props;\n\n return value !== undefined ? value.toString() : defaultValue !== undefined ? defaultValue.toString() : '';\n };\n\n private refInput = (input: HTMLInputElement | null) => {\n this.input = input;\n };\n\n private refMaskedInput = (reactInputMask: ReactInputMask) => {\n this.reactInputMask = reactInputMask;\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.value === this.state.value) {\n this.handleUnexpectedInput();\n } else {\n this.setState({ value: event.target.value });\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private preprocess = (\n newState: InputState,\n oldState: InputState,\n userInput: string,\n options: MaskOptions & Pick<MaskedInputProps, 'mask'>,\n ) => {\n const visibleMaskChars = new Array(options.mask.length).fill(this.props.maskChar);\n\n if (newState.value !== oldState.value && userInput === null) {\n this.setState({\n value: newState.value,\n });\n }\n\n options.mask.split('').forEach((char, index) => {\n if (options.permanents.includes(index)) {\n visibleMaskChars[index] = char;\n }\n\n if (newState.value[index]) {\n visibleMaskChars[index] = newState.value[index];\n }\n });\n\n const emptyValue = visibleMaskChars.join('');\n\n if (this.state.emptyValue !== emptyValue) {\n this.setState({\n emptyValue,\n });\n }\n\n return newState;\n };\n\n private isMaskVisible = () => this.props.alwaysShowMask || this.state.focused;\n\n private handleUnexpectedInput = () => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(this.state.value);\n }\n };\n}\n"]}
|
|
@@ -16,7 +16,7 @@ interface MaskedInputState {
|
|
|
16
16
|
emptyValue: string;
|
|
17
17
|
focused: boolean;
|
|
18
18
|
}
|
|
19
|
-
export declare class MaskedInput extends React.
|
|
19
|
+
export declare class MaskedInput extends React.PureComponent<MaskedInputProps, MaskedInputState> {
|
|
20
20
|
static __KONTUR_REACT_UI__: string;
|
|
21
21
|
static defaultProps: Partial<MaskedInputProps>;
|
|
22
22
|
input: HTMLInputElement | null;
|
|
@@ -24,7 +24,7 @@ export declare class MaskedInput extends React.Component<MaskedInputProps, Maske
|
|
|
24
24
|
private reactInputMask;
|
|
25
25
|
constructor(props: MaskedInputProps);
|
|
26
26
|
componentDidMount(): void;
|
|
27
|
-
|
|
27
|
+
componentDidUpdate(prevProps: MaskedInputProps): void;
|
|
28
28
|
render(): JSX.Element;
|
|
29
29
|
private renderMain;
|
|
30
30
|
private getValue;
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
2
|
+
|
|
3
|
+
var _class, _class2, _temp;
|
|
4
|
+
|
|
2
5
|
import React from 'react';
|
|
3
|
-
import ReactDOM from 'react-dom';
|
|
4
6
|
import { ScrollContainer } from "../../../components/ScrollContainer";
|
|
5
7
|
import { isMenuItem } from "../../../components/MenuItem";
|
|
6
8
|
import { isMenuHeader } from "../../../components/MenuHeader";
|
|
7
9
|
import { ThemeContext } from "../../../lib/theming/ThemeContext";
|
|
8
10
|
import { cx } from "../../../lib/theming/Emotion";
|
|
11
|
+
import { getRootNode, rootNode } from "../../../lib/rootNode";
|
|
9
12
|
import { styles } from "../Menu.styles";
|
|
10
13
|
import { isActiveElement } from "../isActiveElement";
|
|
11
|
-
export var Menu = /*#__PURE__*/function (_React$Component) {
|
|
14
|
+
export var Menu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {
|
|
12
15
|
_inheritsLoose(Menu, _React$Component);
|
|
13
16
|
|
|
14
17
|
function Menu() {
|
|
@@ -26,6 +29,7 @@ export var Menu = /*#__PURE__*/function (_React$Component) {
|
|
|
26
29
|
_this.scrollContainer = void 0;
|
|
27
30
|
_this.highlighted = void 0;
|
|
28
31
|
_this.unmounted = false;
|
|
32
|
+
_this.setRootNode = void 0;
|
|
29
33
|
|
|
30
34
|
_this.refScrollContainer = function (scrollContainer) {
|
|
31
35
|
_this.scrollContainer = scrollContainer;
|
|
@@ -33,7 +37,7 @@ export var Menu = /*#__PURE__*/function (_React$Component) {
|
|
|
33
37
|
|
|
34
38
|
_this.scrollToSelected = function () {
|
|
35
39
|
if (_this.scrollContainer && _this.highlighted) {
|
|
36
|
-
_this.scrollContainer.scrollTo(
|
|
40
|
+
_this.scrollContainer.scrollTo(getRootNode(_this.highlighted));
|
|
37
41
|
}
|
|
38
42
|
};
|
|
39
43
|
|
|
@@ -142,7 +146,8 @@ export var Menu = /*#__PURE__*/function (_React$Component) {
|
|
|
142
146
|
style: {
|
|
143
147
|
width: this.props.width,
|
|
144
148
|
maxHeight: this.props.maxHeight
|
|
145
|
-
}
|
|
149
|
+
},
|
|
150
|
+
ref: this.setRootNode
|
|
146
151
|
}, /*#__PURE__*/React.createElement(ScrollContainer, {
|
|
147
152
|
ref: this.refScrollContainer,
|
|
148
153
|
maxHeight: this.props.maxHeight,
|
|
@@ -287,14 +292,12 @@ export var Menu = /*#__PURE__*/function (_React$Component) {
|
|
|
287
292
|
};
|
|
288
293
|
|
|
289
294
|
return Menu;
|
|
290
|
-
}(React.Component)
|
|
291
|
-
Menu.__KONTUR_REACT_UI__ = 'Menu';
|
|
292
|
-
Menu.defaultProps = {
|
|
295
|
+
}(React.Component), _class2.__KONTUR_REACT_UI__ = 'Menu', _class2.defaultProps = {
|
|
293
296
|
width: 'auto',
|
|
294
297
|
maxHeight: 300,
|
|
295
298
|
hasShadow: true,
|
|
296
299
|
preventWindowScroll: true
|
|
297
|
-
};
|
|
300
|
+
}, _temp)) || _class;
|
|
298
301
|
|
|
299
302
|
function isExist(value) {
|
|
300
303
|
return value !== null && value !== undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Menu.tsx"],"names":["React","ReactDOM","ScrollContainer","isMenuItem","isMenuHeader","ThemeContext","cx","styles","isActiveElement","Menu","state","highlightedIndex","theme","scrollContainer","highlighted","unmounted","refScrollContainer","scrollToSelected","scrollTo","findDOMNode","scrollToTop","scrollToBottom","highlight","index","setState","unhighlight","componentWillUnmount","render","renderMain","up","move","down","enter","event","select","reset","hasHighlightedItem","highlightItem","enableIconPadding","Children","toArray","props","children","some","x","isValidElement","icon","isEmpty","root","shadow","hasShadow","width","maxHeight","preventWindowScroll","map","child","cloneElement","_enableIconPadding","ref","refHighlighted","bind","onClick","onMouseEnter","onMouseLeave","originalRef","menuItem","shouldHandleHref","item","childrenToArray","href","target","window","open","location","onItemClick","step","activeElements","filter","length","indexOf","isExist","Component","__KONTUR_REACT_UI__","defaultProps","value","undefined","ret","forEach","push"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { ScrollContainer } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { isMenuHeader } from '../../components/MenuHeader';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './Menu.styles';\nimport { isActiveElement } from './isActiveElement';\n\nexport interface MenuProps {\n children: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: () => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n}\n\nexport interface MenuState {\n highlightedIndex: number;\n}\n\nexport class Menu extends React.Component<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'Menu';\n\n public static defaultProps = {\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n };\n\n public state = {\n highlightedIndex: -1,\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private unmounted = false;\n\n public componentWillUnmount() {\n this.unmounted = true;\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 /**\n * @public\n */\n public up() {\n this.move(-1);\n }\n\n /**\n * @public\n */\n public down() {\n this.move(1);\n }\n\n /**\n * @public\n */\n public enter(event: React.SyntheticEvent<HTMLElement>) {\n return this.select(this.state.highlightedIndex, true, event);\n }\n\n /**\n * @public\n */\n public reset() {\n this.setState({ highlightedIndex: -1 });\n }\n\n /**\n * @public\n */\n public hasHighlightedItem() {\n return this.state.highlightedIndex !== -1;\n }\n\n public highlightItem(index: number) {\n this.highlight(index);\n }\n\n private renderMain() {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n className={cx({\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={{ width: this.props.width, maxHeight: this.props.maxHeight }}\n >\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n >\n <div className={styles.scrollContainer(this.theme)}>\n {React.Children.map(this.props.children, (child, index) => {\n if (!child) {\n return child;\n }\n if (typeof child === 'string' || typeof child === 'number') {\n return child;\n }\n\n if (enableIconPadding && (isMenuItem(child) || isMenuHeader(child))) {\n child = React.cloneElement(child, {\n _enableIconPadding: true,\n });\n }\n if (isActiveElement(child)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = child.ref;\n if (highlight && typeof child.ref !== 'string') {\n ref = this.refHighlighted.bind(this, child.ref);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(child, {\n ref,\n state: highlight ? 'hover' : child.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: this.highlight.bind(this, index),\n onMouseLeave: this.unhighlight,\n });\n }\n return child;\n })}\n </div>\n </ScrollContainer>\n </div>\n );\n }\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: ((menuItem: MenuItem | null) => any) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(ReactDOM.findDOMNode(this.highlighted) as HTMLElement);\n }\n };\n\n private scrollToTop = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToTop();\n }\n };\n\n private scrollToBottom = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToBottom();\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick();\n }\n return true;\n }\n return false;\n }\n\n private highlight = (index: number) => {\n this.setState({ highlightedIndex: index });\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n if (this.unmounted) {\n // NOTE workaround, because `ComboBox` call `process.nextTick` in reducer\n return;\n }\n\n const children = childrenToArray(this.props.children);\n const activeElements = children.filter(isActiveElement);\n if (!activeElements.length) {\n return;\n }\n let index = this.state.highlightedIndex;\n do {\n index += step;\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n this.setState({ highlightedIndex: index }, () => {\n switch (activeElements.indexOf(child)) {\n case 0:\n this.scrollToTop();\n break;\n case activeElements.length - 1:\n this.scrollToBottom();\n break;\n default:\n this.scrollToSelected();\n }\n });\n return;\n }\n } while (index !== this.state.highlightedIndex);\n }\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\n }\n}\n\nfunction isExist(value: any): value is any {\n return value !== null && value !== undefined;\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Menu.tsx"],"names":["React","ScrollContainer","isMenuItem","isMenuHeader","ThemeContext","cx","getRootNode","rootNode","styles","isActiveElement","Menu","state","highlightedIndex","theme","scrollContainer","highlighted","unmounted","setRootNode","refScrollContainer","scrollToSelected","scrollTo","scrollToTop","scrollToBottom","highlight","index","setState","unhighlight","componentWillUnmount","render","renderMain","up","move","down","enter","event","select","reset","hasHighlightedItem","highlightItem","enableIconPadding","Children","toArray","props","children","some","x","isValidElement","icon","isEmpty","root","shadow","hasShadow","width","maxHeight","preventWindowScroll","map","child","cloneElement","_enableIconPadding","ref","refHighlighted","bind","onClick","onMouseEnter","onMouseLeave","originalRef","menuItem","shouldHandleHref","item","childrenToArray","href","target","window","open","location","onItemClick","step","activeElements","filter","length","indexOf","isExist","Component","__KONTUR_REACT_UI__","defaultProps","value","undefined","ret","forEach","push"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { ScrollContainer } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { isMenuHeader } from '../../components/MenuHeader';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './Menu.styles';\nimport { isActiveElement } from './isActiveElement';\n\nexport interface MenuProps {\n children: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: () => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n}\n\nexport interface MenuState {\n highlightedIndex: number;\n}\n\n@rootNode\nexport class Menu extends React.Component<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'Menu';\n\n public static defaultProps = {\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n };\n\n public state = {\n highlightedIndex: -1,\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private unmounted = false;\n private setRootNode!: TSetRootNode;\n\n public componentWillUnmount() {\n this.unmounted = true;\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 /**\n * @public\n */\n public up() {\n this.move(-1);\n }\n\n /**\n * @public\n */\n public down() {\n this.move(1);\n }\n\n /**\n * @public\n */\n public enter(event: React.SyntheticEvent<HTMLElement>) {\n return this.select(this.state.highlightedIndex, true, event);\n }\n\n /**\n * @public\n */\n public reset() {\n this.setState({ highlightedIndex: -1 });\n }\n\n /**\n * @public\n */\n public hasHighlightedItem() {\n return this.state.highlightedIndex !== -1;\n }\n\n public highlightItem(index: number) {\n this.highlight(index);\n }\n\n private renderMain() {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n className={cx({\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={{ width: this.props.width, maxHeight: this.props.maxHeight }}\n ref={this.setRootNode}\n >\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n >\n <div className={styles.scrollContainer(this.theme)}>\n {React.Children.map(this.props.children, (child, index) => {\n if (!child) {\n return child;\n }\n if (typeof child === 'string' || typeof child === 'number') {\n return child;\n }\n\n if (enableIconPadding && (isMenuItem(child) || isMenuHeader(child))) {\n child = React.cloneElement(child, {\n _enableIconPadding: true,\n });\n }\n if (isActiveElement(child)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = child.ref;\n if (highlight && typeof child.ref !== 'string') {\n ref = this.refHighlighted.bind(this, child.ref);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(child, {\n ref,\n state: highlight ? 'hover' : child.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: this.highlight.bind(this, index),\n onMouseLeave: this.unhighlight,\n });\n }\n return child;\n })}\n </div>\n </ScrollContainer>\n </div>\n );\n }\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: ((menuItem: MenuItem | null) => any) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(getRootNode(this.highlighted));\n }\n };\n\n private scrollToTop = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToTop();\n }\n };\n\n private scrollToBottom = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToBottom();\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick();\n }\n return true;\n }\n return false;\n }\n\n private highlight = (index: number) => {\n this.setState({ highlightedIndex: index });\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n if (this.unmounted) {\n // NOTE workaround, because `ComboBox` call `process.nextTick` in reducer\n return;\n }\n\n const children = childrenToArray(this.props.children);\n const activeElements = children.filter(isActiveElement);\n if (!activeElements.length) {\n return;\n }\n let index = this.state.highlightedIndex;\n do {\n index += step;\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n this.setState({ highlightedIndex: index }, () => {\n switch (activeElements.indexOf(child)) {\n case 0:\n this.scrollToTop();\n break;\n case activeElements.length - 1:\n this.scrollToBottom();\n break;\n default:\n this.scrollToSelected();\n }\n });\n return;\n }\n } while (index !== this.state.highlightedIndex);\n }\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\n }\n}\n\nfunction isExist(value: any): value is any {\n return value !== null && value !== undefined;\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n"]}
|
package/internal/Menu/Menu.d.ts
CHANGED