@skbkontur/react-ui 4.11.0 → 4.12.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 +17 -0
- package/cjs/components/Autocomplete/Autocomplete.d.ts +2 -0
- package/cjs/components/Autocomplete/Autocomplete.js +31 -7
- package/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
- package/cjs/components/Autocomplete/locale/index.d.ts +4 -0
- package/cjs/components/Autocomplete/locale/index.js +11 -0
- package/cjs/components/Autocomplete/locale/index.js.map +1 -0
- package/cjs/components/Autocomplete/locale/locales/en.d.ts +2 -0
- package/cjs/components/Autocomplete/locale/locales/en.js +6 -0
- package/cjs/components/Autocomplete/locale/locales/en.js.map +1 -0
- package/cjs/components/Autocomplete/locale/locales/ru.d.ts +2 -0
- package/cjs/components/Autocomplete/locale/locales/ru.js +6 -0
- package/cjs/components/Autocomplete/locale/locales/ru.js.map +1 -0
- package/cjs/components/Autocomplete/locale/types.d.ts +5 -0
- package/cjs/components/Autocomplete/locale/types.js +1 -0
- package/cjs/components/Autocomplete/locale/types.js.map +1 -0
- package/cjs/components/ComboBox/ComboBox.md +42 -0
- package/cjs/components/CurrencyInput/CurrencyInputKeyboardActions.d.ts +1 -1
- package/cjs/components/Dropdown/Dropdown.d.ts +2 -1
- package/cjs/components/Dropdown/Dropdown.js +3 -1
- package/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/cjs/components/DropdownMenu/DropdownMenu.md +27 -0
- package/cjs/components/Hint/Hint.d.ts +0 -3
- package/cjs/components/Hint/Hint.js +2 -27
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/Hint/Hint.md +29 -0
- package/cjs/components/Hint/Hint.styles.d.ts +0 -1
- package/cjs/components/Hint/Hint.styles.js +2 -10
- package/cjs/components/Hint/Hint.styles.js.map +1 -1
- package/cjs/components/MenuItem/MenuItem.js +10 -8
- package/cjs/components/MenuItem/MenuItem.js.map +1 -1
- package/cjs/components/MenuItem/MenuItem.styles.d.ts +5 -1
- package/cjs/components/MenuItem/MenuItem.styles.js +28 -12
- package/cjs/components/MenuItem/MenuItem.styles.js.map +1 -1
- package/cjs/components/MenuSeparator/MenuSeparator.js +12 -1
- package/cjs/components/MenuSeparator/MenuSeparator.js.map +1 -1
- package/cjs/components/MenuSeparator/MenuSeparator.styles.d.ts +1 -0
- package/cjs/components/MenuSeparator/MenuSeparator.styles.js +8 -1
- package/cjs/components/MenuSeparator/MenuSeparator.styles.js.map +1 -1
- package/cjs/components/Modal/Modal.js +1 -5
- package/cjs/components/Modal/Modal.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +2 -1
- package/cjs/components/Select/Select.js +13 -8
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePage.js +0 -2
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/components/Toast/Toast.d.ts +6 -3
- package/cjs/components/Toast/Toast.js +15 -8
- package/cjs/components/Toast/Toast.js.map +1 -1
- package/cjs/components/Toast/Toast.md +129 -0
- package/cjs/components/Toast/ToastStatic.d.ts +3 -2
- package/cjs/components/Toast/ToastStatic.js +5 -5
- package/cjs/components/Toast/ToastStatic.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.d.ts +0 -2
- package/cjs/components/Tooltip/Tooltip.js +3 -23
- package/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/cjs/components/TooltipMenu/TooltipMenu.md +27 -0
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js +2 -3
- package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js +0 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/Menu/Menu.d.ts +1 -0
- package/cjs/internal/Menu/Menu.js +20 -8
- package/cjs/internal/Menu/Menu.js.map +1 -1
- package/cjs/internal/Menu/Menu.styles.d.ts +2 -0
- package/cjs/internal/Menu/Menu.styles.js +19 -6
- package/cjs/internal/Menu/Menu.styles.js.map +1 -1
- package/cjs/internal/MenuMessage/MenuMessage.d.ts +10 -0
- package/cjs/internal/MenuMessage/MenuMessage.js +42 -0
- package/cjs/internal/MenuMessage/MenuMessage.js.map +1 -0
- package/cjs/internal/MenuMessage/MenuMessage.styles.d.ts +5 -0
- package/cjs/internal/MenuMessage/MenuMessage.styles.js +33 -0
- package/cjs/internal/MenuMessage/MenuMessage.styles.js.map +1 -0
- package/cjs/internal/MenuMessage/index.d.ts +1 -0
- package/cjs/internal/MenuMessage/index.js +1 -0
- package/cjs/internal/MenuMessage/index.js.map +1 -0
- package/cjs/internal/MobilePopup/MobilePopup.d.ts +13 -12
- package/cjs/internal/MobilePopup/MobilePopup.js +6 -60
- package/cjs/internal/MobilePopup/MobilePopup.js.map +1 -1
- package/cjs/internal/MobilePopup/MobilePopup.styles.d.ts +3 -3
- package/cjs/internal/MobilePopup/MobilePopup.styles.js +22 -24
- package/cjs/internal/MobilePopup/MobilePopup.styles.js.map +1 -1
- package/cjs/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.d.ts +3 -4
- package/cjs/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.js +26 -37
- package/cjs/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.js.map +1 -1
- package/cjs/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.styles.d.ts +2 -4
- package/cjs/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.styles.js +8 -32
- package/cjs/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.styles.js.map +1 -1
- package/cjs/internal/Popup/Popup.js +1 -1
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/RenderLayer/RenderLayer.js +5 -1
- package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
- package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/cjs/internal/themes/DefaultTheme.d.ts +22 -3
- package/cjs/internal/themes/DefaultTheme.js +52 -7
- package/cjs/internal/themes/DefaultTheme.js.map +1 -1
- package/cjs/lib/locale/LOCALECONTEXT.md +1 -0
- package/cjs/typings/html-props.d.ts +2 -2
- package/components/Autocomplete/Autocomplete/Autocomplete.js +27 -6
- package/components/Autocomplete/Autocomplete/Autocomplete.js.map +1 -1
- package/components/Autocomplete/Autocomplete.d.ts +2 -0
- package/components/Autocomplete/locale/index/index.js +8 -0
- package/components/Autocomplete/locale/index/index.js.map +1 -0
- package/components/Autocomplete/locale/index/package.json +6 -0
- package/components/Autocomplete/locale/index.d.ts +4 -0
- package/components/Autocomplete/locale/locales/en/en.js +5 -0
- package/components/Autocomplete/locale/locales/en/en.js.map +1 -0
- package/components/Autocomplete/locale/locales/en/package.json +6 -0
- package/components/Autocomplete/locale/locales/en.d.ts +2 -0
- package/components/Autocomplete/locale/locales/ru/package.json +6 -0
- package/components/Autocomplete/locale/locales/ru/ru.js +5 -0
- package/components/Autocomplete/locale/locales/ru/ru.js.map +1 -0
- package/components/Autocomplete/locale/locales/ru.d.ts +2 -0
- package/components/Autocomplete/locale/package.json +6 -0
- package/components/Autocomplete/locale/types/package.json +6 -0
- package/components/Autocomplete/locale/types/types.js +1 -0
- package/components/Autocomplete/locale/types/types.js.map +1 -0
- package/components/Autocomplete/locale/types.d.ts +5 -0
- package/components/ComboBox/ComboBox.md +42 -0
- package/components/CurrencyInput/CurrencyInputKeyboardActions.d.ts +1 -1
- package/components/Dropdown/Dropdown/Dropdown.js +2 -1
- package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +2 -1
- package/components/DropdownMenu/DropdownMenu.md +27 -0
- package/components/Hint/Hint/Hint.js +7 -24
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +0 -3
- package/components/Hint/Hint.md +29 -0
- package/components/Hint/Hint.styles/Hint.styles.js +2 -5
- package/components/Hint/Hint.styles/Hint.styles.js.map +1 -1
- package/components/Hint/Hint.styles.d.ts +0 -1
- package/components/MenuItem/MenuItem/MenuItem.js +10 -8
- package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
- package/components/MenuItem/MenuItem.styles/MenuItem.styles.js +27 -8
- package/components/MenuItem/MenuItem.styles/MenuItem.styles.js.map +1 -1
- package/components/MenuItem/MenuItem.styles.d.ts +5 -1
- package/components/MenuSeparator/MenuSeparator/MenuSeparator.js +10 -3
- package/components/MenuSeparator/MenuSeparator/MenuSeparator.js.map +1 -1
- package/components/MenuSeparator/MenuSeparator.styles/MenuSeparator.styles.js +4 -1
- package/components/MenuSeparator/MenuSeparator.styles/MenuSeparator.styles.js.map +1 -1
- package/components/MenuSeparator/MenuSeparator.styles.d.ts +1 -0
- package/components/Modal/Modal/Modal.js +1 -1
- package/components/Modal/Modal/Modal.js.map +1 -1
- package/components/Select/Select/Select.js +20 -21
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +2 -1
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/Toast/Toast/Toast.js +15 -8
- package/components/Toast/Toast/Toast.js.map +1 -1
- package/components/Toast/Toast.d.ts +6 -3
- package/components/Toast/Toast.md +129 -0
- package/components/Toast/ToastStatic/ToastStatic.js +5 -5
- package/components/Toast/ToastStatic/ToastStatic.js.map +1 -1
- package/components/Toast/ToastStatic.d.ts +3 -2
- package/components/Tooltip/Tooltip/Tooltip.js +5 -25
- package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +0 -2
- package/components/TooltipMenu/TooltipMenu.md +27 -0
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +9 -15
- package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +0 -1
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/Menu/Menu/Menu.js +9 -7
- package/internal/Menu/Menu/Menu.js.map +1 -1
- package/internal/Menu/Menu.d.ts +1 -0
- package/internal/Menu/Menu.styles/Menu.styles.js +12 -6
- package/internal/Menu/Menu.styles/Menu.styles.js.map +1 -1
- package/internal/Menu/Menu.styles.d.ts +2 -0
- package/internal/MenuMessage/MenuMessage/MenuMessage.js +30 -0
- package/internal/MenuMessage/MenuMessage/MenuMessage.js.map +1 -0
- package/internal/MenuMessage/MenuMessage/package.json +6 -0
- package/internal/MenuMessage/MenuMessage.d.ts +10 -0
- package/internal/MenuMessage/MenuMessage.styles/MenuMessage.styles.js +23 -0
- package/internal/MenuMessage/MenuMessage.styles/MenuMessage.styles.js.map +1 -0
- package/internal/MenuMessage/MenuMessage.styles/package.json +6 -0
- package/internal/MenuMessage/MenuMessage.styles.d.ts +5 -0
- package/internal/MenuMessage/index/index.js +1 -0
- package/internal/MenuMessage/index/index.js.map +1 -0
- package/internal/MenuMessage/index/package.json +6 -0
- package/internal/MenuMessage/index.d.ts +1 -0
- package/internal/MenuMessage/package.json +6 -0
- package/internal/MobilePopup/MobilePopup/MobilePopup.js +23 -53
- package/internal/MobilePopup/MobilePopup/MobilePopup.js.map +1 -1
- package/internal/MobilePopup/MobilePopup.d.ts +13 -12
- package/internal/MobilePopup/MobilePopup.styles/MobilePopup.styles.js +11 -11
- package/internal/MobilePopup/MobilePopup.styles/MobilePopup.styles.js.map +1 -1
- package/internal/MobilePopup/MobilePopup.styles.d.ts +3 -3
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader/MobilePopupHeader.js +11 -35
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader/MobilePopupHeader.js.map +1 -1
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.d.ts +3 -4
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.styles/MobilePopupHeader.styles.js +6 -12
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.styles/MobilePopupHeader.styles.js.map +1 -1
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.styles.d.ts +2 -4
- package/internal/Popup/Popup/Popup.js +1 -1
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/RenderLayer/RenderLayer/RenderLayer.js +2 -2
- package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
- package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/internal/themes/DefaultTheme/DefaultTheme.js +77 -9
- package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
- package/internal/themes/DefaultTheme.d.ts +22 -3
- package/lib/locale/LOCALECONTEXT.md +1 -0
- package/package.json +2 -2
- package/typings/html-props.d.ts +2 -2
|
@@ -9,7 +9,6 @@ var _Popup = require("../../internal/Popup");
|
|
|
9
9
|
var _currentEnvironment = require("../../lib/currentEnvironment");
|
|
10
10
|
var _CommonWrapper = require("../../internal/CommonWrapper");
|
|
11
11
|
var _Emotion = require("../../lib/theming/Emotion");
|
|
12
|
-
var _decorator = require("../ResponsiveLayout/decorator");
|
|
13
12
|
var _rootNode = require("../../lib/rootNode");
|
|
14
13
|
|
|
15
14
|
var _createPropsGetter = require("../../lib/createPropsGetter");
|
|
@@ -94,10 +93,7 @@ var Positions = [
|
|
|
94
93
|
* Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.
|
|
95
94
|
*/var
|
|
96
95
|
|
|
97
|
-
|
|
98
|
-
Hint = (0, _decorator.responsiveLayout)(_class = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsLoose2.default)(Hint, _React$PureComponent);function Hint() {var _this;for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}_this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this;_this.
|
|
99
|
-
|
|
100
|
-
|
|
96
|
+
Hint = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsLoose2.default)(Hint, _React$PureComponent);function Hint() {var _this;for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}_this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this;_this.
|
|
101
97
|
|
|
102
98
|
|
|
103
99
|
|
|
@@ -176,22 +172,6 @@ Hint = (0, _decorator.responsiveLayout)(_class = (0, _rootNode.rootNode)(_class
|
|
|
176
172
|
|
|
177
173
|
|
|
178
174
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
175
|
|
|
196
176
|
|
|
197
177
|
|
|
@@ -231,7 +211,6 @@ Hint = (0, _decorator.responsiveLayout)(_class = (0, _rootNode.rootNode)(_class
|
|
|
231
211
|
|
|
232
212
|
|
|
233
213
|
|
|
234
|
-
|
|
235
214
|
getPositions = function () {
|
|
236
215
|
return Positions.filter(function (x) {return x.startsWith(_this.getProps().pos);});
|
|
237
216
|
};_this.
|
|
@@ -258,10 +237,6 @@ Hint = (0, _decorator.responsiveLayout)(_class = (0, _rootNode.rootNode)(_class
|
|
|
258
237
|
}
|
|
259
238
|
};_this.
|
|
260
239
|
|
|
261
|
-
close = function () {
|
|
262
|
-
_this.setState({ opened: false });
|
|
263
|
-
};_this.
|
|
264
|
-
|
|
265
240
|
open = function () {
|
|
266
241
|
_this.setState({ opened: true });
|
|
267
|
-
};return _this;}var _proto = Hint.prototype;_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var _this$getProps = this.getProps(),opened = _this$getProps.opened,manual = _this$getProps.manual;if (!manual) {return;}if (this.timer) {clearTimeout(this.timer);this.timer = null;}if (opened !== prevProps.opened) {this.setState({ opened: !!opened });}};_proto.componentWillUnmount = function componentWillUnmount() {if (this.timer) {clearTimeout(this.timer);this.timer = null;}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: _ThemeFactory.ThemeFactory.create({ popupPinOffset: theme.hintPinOffset, popupMargin: theme.hintMargin, popupBorder: theme.hintBorder, popupBorderRadius: theme.hintBorderRadius }, _this2.theme) }, _this2.
|
|
242
|
+
};return _this;}var _proto = Hint.prototype;_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var _this$getProps = this.getProps(),opened = _this$getProps.opened,manual = _this$getProps.manual;if (!manual) {return;}if (this.timer) {clearTimeout(this.timer);this.timer = null;}if (opened !== prevProps.opened) {this.setState({ opened: !!opened });}};_proto.componentWillUnmount = function componentWillUnmount() {if (this.timer) {clearTimeout(this.timer);this.timer = null;}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: _ThemeFactory.ThemeFactory.create({ popupPinOffset: theme.hintPinOffset, popupMargin: theme.hintMargin, popupBorder: theme.hintBorder, popupBorderRadius: theme.hintBorderRadius }, _this2.theme) }, _this2.renderMain());});};_proto.renderMain = function renderMain() {var _this3 = this;var _this$getProps2 = this.getProps(),disableAnimations = _this$getProps2.disableAnimations,useWrapper = _this$getProps2.useWrapper;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_Popup.Popup, { hasPin: true, opened: this.state.opened, anchorElement: this.props.children, positions: this.getPositions(), backgroundColor: this.theme.hintBgColor, borderColor: HINT_BORDER_COLOR, onPositionChange: function onPositionChange(position) {return _this3.setState({ position: position });}, disableAnimations: disableAnimations, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, useWrapper: useWrapper, ref: this.popupRef, withoutMobile: true }, this.renderContent()));};_proto.renderContent = function renderContent() {var _cx;if (!this.props.text) {return null;}var _this$getProps3 = this.getProps(),maxWidth = _this$getProps3.maxWidth;var centerAlignPositions = ['top', 'top center', 'bottom', 'bottom center'];var className = (0, _Emotion.cx)((_cx = {}, _cx[_Hint.styles.content(this.theme)] = true, _cx[_Hint.styles.contentCenter(this.theme)] = centerAlignPositions.includes(this.state.position), _cx));return /*#__PURE__*/_react.default.createElement("div", { className: className, style: { maxWidth: maxWidth } }, this.props.text);};return Hint;}(_react.default.PureComponent), _class2.__KONTUR_REACT_UI__ = 'Hint', _class2.defaultProps = { pos: 'top', manual: false, opened: false, maxWidth: 200, disableAnimations: _currentEnvironment.isTestEnv, useWrapper: false }, _temp)) || _class;exports.Hint = Hint;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Hint.tsx"],"names":["HINT_BORDER_COLOR","Positions","Hint","responsiveLayout","rootNode","getProps","defaultProps","state","opened","manual","position","DUMMY_LOCATION","timer","popupRef","React","createRef","getAnchorElement","current","anchorElement","getPositions","filter","x","startsWith","pos","handleMouseEnter","e","window","setTimeout","open","props","onMouseEnter","handleMouseLeave","clearTimeout","setState","onMouseLeave","close","componentDidUpdate","prevProps","componentWillUnmount","render","theme","ThemeFactory","create","popupPinOffset","hintPinOffset","popupMargin","hintMargin","popupBorder","hintBorder","popupBorderRadius","hintBorderRadius","isMobileLayout","renderMobile","renderMain","children","undefined","renderContent","disableAnimations","useWrapper","setRootNode","hintBgColor","text","maxWidth","centerAlignPositions","className","styles","content","contentCenter","includes","mobileContent","PureComponent","__KONTUR_REACT_UI__","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Theme } from '../../lib/theming/Theme';\nimport { DUMMY_LOCATION, Popup, PopupPositionsType } from '../../internal/Popup';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { styles } from './Hint.styles';\n\nconst HINT_BORDER_COLOR = 'transparent';\n\nexport interface HintProps extends CommonProps {\n children?: React.ReactNode;\n /**\n * Переводит отображение подсказки в _\"ручной режим\"_.\n *\n * В _\"ручном режиме\"_ подсказку можно активировать только задав значение пропу `opened`.\n */\n manual?: boolean;\n /**\n * Задаёт максимальную ширину подсказки.\n */\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: (event: MouseEventType) => void;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: (event: MouseEventType) => void;\n /**\n * Если `true` - подсказка будет открыта.\n *\n * _Примечание_: работает только при `manual=true`.\n */\n opened?: boolean;\n /**\n * Расположение подсказки относительно текста.\n *\n * **Допустимые значения**: `\"top\"`, `\"right\"`, `\"bottom\"`, `\"left\"`, `\"top left\"`, `\"top center\"`, `\"top right\"`, `\"right top\"`, `\"right middle\"`, `\"right bottom\"`, `\"bottom left\"`, `\"bottom center\"`, `\"bottom right\"`, `\"left top\"`, `\"left middle\"`, `\"left bottom\"`.\n */\n pos?: 'top' | 'right' | 'bottom' | 'left' | PopupPositionsType;\n /**\n * Текст подсказки.\n */\n text: React.ReactNode;\n /**\n * Отключает анимацию.\n */\n disableAnimations?: boolean;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n}\n\nexport interface HintState {\n opened: boolean;\n position: PopupPositionsType;\n}\n\nconst Positions: PopupPositionsType[] = [\n 'top center',\n 'top left',\n 'top right',\n 'bottom center',\n 'bottom left',\n 'bottom right',\n 'left middle',\n 'left top',\n 'left bottom',\n 'right middle',\n 'right top',\n 'right bottom',\n];\n\ntype DefaultProps = Required<\n Pick<HintProps, 'pos' | 'manual' | 'opened' | 'maxWidth' | 'disableAnimations' | 'useWrapper'>\n>;\n\n/**\n * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.\n */\n@responsiveLayout\n@rootNode\nexport class Hint extends React.PureComponent<HintProps, HintState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Hint';\n\n private isMobileLayout!: boolean;\n\n public static defaultProps: DefaultProps = {\n pos: 'top',\n manual: false,\n opened: false,\n maxWidth: 200,\n disableAnimations: isTestEnv,\n useWrapper: false,\n };\n\n private getProps = createPropsGetter(Hint.defaultProps);\n\n public state: HintState = {\n opened: this.getProps().manual ? !!this.getProps().opened : false,\n position: DUMMY_LOCATION.position,\n };\n\n private timer: Nullable<number> = null;\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n\n public componentDidUpdate(prevProps: HintProps) {\n const { opened, manual } = this.getProps();\n if (!manual) {\n return;\n }\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n if (opened !== prevProps.opened) {\n this.setState({ opened: !!opened });\n }\n }\n\n public componentWillUnmount() {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.hintPinOffset,\n popupMargin: theme.hintMargin,\n popupBorder: theme.hintBorder,\n popupBorderRadius: theme.hintBorderRadius,\n },\n this.theme,\n )}\n >\n {this.isMobileLayout ? this.renderMobile() : this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMobile() {\n const manual = this.getProps().manual;\n return (\n <CommonWrapper {...this.props}>\n <Popup\n opened={this.state.opened}\n anchorElement={this.props.children}\n positions={[]}\n onClick={!manual ? this.open : undefined}\n mobileOnCloseRequest={!manual ? this.close : undefined}\n >\n {this.renderContent()}\n </Popup>\n </CommonWrapper>\n );\n }\n\n public renderMain() {\n const { disableAnimations, useWrapper } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n hasPin\n opened={this.state.opened}\n anchorElement={this.props.children}\n positions={this.getPositions()}\n backgroundColor={this.theme.hintBgColor}\n borderColor={HINT_BORDER_COLOR}\n onPositionChange={(position) => this.setState({ position })}\n disableAnimations={disableAnimations}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n useWrapper={useWrapper}\n ref={this.popupRef}\n >\n {this.renderContent()}\n </Popup>\n </CommonWrapper>\n );\n }\n\n public getAnchorElement = (): Nullable<Element> => {\n return this.popupRef.current?.anchorElement;\n };\n\n private renderContent() {\n if (!this.props.text) {\n return null;\n }\n\n const { maxWidth } = this.getProps();\n const centerAlignPositions = ['top', 'top center', 'bottom', 'bottom center'];\n const className = cx({\n [styles.content(this.theme)]: true,\n [styles.contentCenter(this.theme)]: centerAlignPositions.includes(this.state.position),\n [styles.mobileContent(this.theme)]: this.isMobileLayout,\n });\n return (\n <div className={className} style={{ maxWidth: this.isMobileLayout ? '100%' : maxWidth }}>\n {this.props.text}\n </div>\n );\n }\n\n private getPositions = (): PopupPositionsType[] => {\n return Positions.filter((x) => x.startsWith(this.getProps().pos));\n };\n\n private handleMouseEnter = (e: MouseEventType) => {\n if (!this.getProps().manual && !this.timer) {\n this.timer = window.setTimeout(this.open, 400);\n }\n\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: MouseEventType) => {\n if (!this.getProps().manual && this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n this.setState({ opened: false });\n }\n\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private close = () => {\n this.setState({ opened: false });\n };\n\n private open = () => {\n this.setState({ opened: true });\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Hint.tsx"],"names":["HINT_BORDER_COLOR","Positions","Hint","rootNode","getProps","defaultProps","state","opened","manual","position","DUMMY_LOCATION","timer","popupRef","React","createRef","getAnchorElement","current","anchorElement","getPositions","filter","x","startsWith","pos","handleMouseEnter","e","window","setTimeout","open","props","onMouseEnter","handleMouseLeave","clearTimeout","setState","onMouseLeave","componentDidUpdate","prevProps","componentWillUnmount","render","theme","ThemeFactory","create","popupPinOffset","hintPinOffset","popupMargin","hintMargin","popupBorder","hintBorder","popupBorderRadius","hintBorderRadius","renderMain","disableAnimations","useWrapper","setRootNode","children","hintBgColor","renderContent","text","maxWidth","centerAlignPositions","className","styles","content","contentCenter","includes","PureComponent","__KONTUR_REACT_UI__","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Theme } from '../../lib/theming/Theme';\nimport { DUMMY_LOCATION, Popup, PopupPositionsType } from '../../internal/Popup';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { styles } from './Hint.styles';\n\nconst HINT_BORDER_COLOR = 'transparent';\n\nexport interface HintProps extends CommonProps {\n children?: React.ReactNode;\n /**\n * Переводит отображение подсказки в _\"ручной режим\"_.\n *\n * В _\"ручном режиме\"_ подсказку можно активировать только задав значение пропу `opened`.\n */\n manual?: boolean;\n /**\n * Задаёт максимальную ширину подсказки.\n */\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: (event: MouseEventType) => void;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: (event: MouseEventType) => void;\n /**\n * Если `true` - подсказка будет открыта.\n *\n * _Примечание_: работает только при `manual=true`.\n */\n opened?: boolean;\n /**\n * Расположение подсказки относительно текста.\n *\n * **Допустимые значения**: `\"top\"`, `\"right\"`, `\"bottom\"`, `\"left\"`, `\"top left\"`, `\"top center\"`, `\"top right\"`, `\"right top\"`, `\"right middle\"`, `\"right bottom\"`, `\"bottom left\"`, `\"bottom center\"`, `\"bottom right\"`, `\"left top\"`, `\"left middle\"`, `\"left bottom\"`.\n */\n pos?: 'top' | 'right' | 'bottom' | 'left' | PopupPositionsType;\n /**\n * Текст подсказки.\n */\n text: React.ReactNode;\n /**\n * Отключает анимацию.\n */\n disableAnimations?: boolean;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n}\n\nexport interface HintState {\n opened: boolean;\n position: PopupPositionsType;\n}\n\nconst Positions: PopupPositionsType[] = [\n 'top center',\n 'top left',\n 'top right',\n 'bottom center',\n 'bottom left',\n 'bottom right',\n 'left middle',\n 'left top',\n 'left bottom',\n 'right middle',\n 'right top',\n 'right bottom',\n];\n\ntype DefaultProps = Required<\n Pick<HintProps, 'pos' | 'manual' | 'opened' | 'maxWidth' | 'disableAnimations' | 'useWrapper'>\n>;\n\n/**\n * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.\n */\n@rootNode\nexport class Hint extends React.PureComponent<HintProps, HintState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Hint';\n\n public static defaultProps: DefaultProps = {\n pos: 'top',\n manual: false,\n opened: false,\n maxWidth: 200,\n disableAnimations: isTestEnv,\n useWrapper: false,\n };\n\n private getProps = createPropsGetter(Hint.defaultProps);\n\n public state: HintState = {\n opened: this.getProps().manual ? !!this.getProps().opened : false,\n position: DUMMY_LOCATION.position,\n };\n\n private timer: Nullable<number> = null;\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n\n public componentDidUpdate(prevProps: HintProps) {\n const { opened, manual } = this.getProps();\n if (!manual) {\n return;\n }\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n if (opened !== prevProps.opened) {\n this.setState({ opened: !!opened });\n }\n }\n\n public componentWillUnmount() {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.hintPinOffset,\n popupMargin: theme.hintMargin,\n popupBorder: theme.hintBorder,\n popupBorderRadius: theme.hintBorderRadius,\n },\n this.theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n const { disableAnimations, useWrapper } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n hasPin\n opened={this.state.opened}\n anchorElement={this.props.children}\n positions={this.getPositions()}\n backgroundColor={this.theme.hintBgColor}\n borderColor={HINT_BORDER_COLOR}\n onPositionChange={(position) => this.setState({ position })}\n disableAnimations={disableAnimations}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n useWrapper={useWrapper}\n ref={this.popupRef}\n withoutMobile\n >\n {this.renderContent()}\n </Popup>\n </CommonWrapper>\n );\n }\n\n public getAnchorElement = (): Nullable<Element> => {\n return this.popupRef.current?.anchorElement;\n };\n\n private renderContent() {\n if (!this.props.text) {\n return null;\n }\n\n const { maxWidth } = this.getProps();\n const centerAlignPositions = ['top', 'top center', 'bottom', 'bottom center'];\n const className = cx({\n [styles.content(this.theme)]: true,\n [styles.contentCenter(this.theme)]: centerAlignPositions.includes(this.state.position),\n });\n return (\n <div className={className} style={{ maxWidth }}>\n {this.props.text}\n </div>\n );\n }\n\n private getPositions = (): PopupPositionsType[] => {\n return Positions.filter((x) => x.startsWith(this.getProps().pos));\n };\n\n private handleMouseEnter = (e: MouseEventType) => {\n if (!this.getProps().manual && !this.timer) {\n this.timer = window.setTimeout(this.open, 400);\n }\n\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: MouseEventType) => {\n if (!this.getProps().manual && this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n this.setState({ opened: false });\n }\n\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private open = () => {\n this.setState({ opened: true });\n };\n}\n"]}
|
|
@@ -54,3 +54,32 @@ const [isOpen, setIsOpen] = React.useState(false);
|
|
|
54
54
|
```jsx harmony
|
|
55
55
|
<Hint disableAnimations text={"Нет анимации :("}>Есть анимация?</Hint>
|
|
56
56
|
```
|
|
57
|
+
|
|
58
|
+
### Использование встроеной и кастомной обёртки
|
|
59
|
+
|
|
60
|
+
Подсказка должна отображаться даже на отключённых компонентах. Из коробки это работает только с контролами `react-ui`.
|
|
61
|
+
|
|
62
|
+
Нативные элементы, поддерживающие атрибут `disabled`, отключают необходимые события мыши.
|
|
63
|
+
В подобных случаях следуют использовать проп `useWrapper`:
|
|
64
|
+
|
|
65
|
+
```jsx harmony
|
|
66
|
+
<Hint useWrapper text="Подсказа всё равно отображается">
|
|
67
|
+
<button disabled>native button</button>
|
|
68
|
+
</Hint>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Т.к. встроённая обёртка это `<span>` без стилей, то она может работать некорректно в определённых ситуациях.
|
|
72
|
+
В таких случаях стоит использовать собственную обётку:
|
|
73
|
+
|
|
74
|
+
```jsx harmony
|
|
75
|
+
<>
|
|
76
|
+
<Hint useWrapper text="Подсказа">
|
|
77
|
+
<button disabled style={{ height: 40 }}>useWrapper prop</button>
|
|
78
|
+
</Hint>
|
|
79
|
+
<Hint text="Подсказа">
|
|
80
|
+
<span style={{ display: 'inline-block' }}>
|
|
81
|
+
<button disabled style={{ height: 40 }}>custom wrapper</button>
|
|
82
|
+
</span>
|
|
83
|
+
</Hint>
|
|
84
|
+
</>
|
|
85
|
+
```
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.styles = void 0;var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
|
|
2
|
-
var _Emotion = require("../../lib/theming/Emotion");var _templateObject, _templateObject2
|
|
2
|
+
var _Emotion = require("../../lib/theming/Emotion");var _templateObject, _templateObject2;
|
|
3
3
|
|
|
4
4
|
var styles = (0, _Emotion.memoizeStyle)({
|
|
5
5
|
content: function content(t) {
|
|
@@ -14,18 +14,10 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
},
|
|
18
|
-
|
|
19
|
-
mobileContent: function mobileContent(t) {
|
|
20
|
-
return (0, _Emotion.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["\n color: ", ";\n max-width: 100%;\n text-align: left;\n "])),
|
|
21
|
-
t.mobileHintColor);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
17
|
},
|
|
26
18
|
|
|
27
19
|
contentCenter: function contentCenter(t) {
|
|
28
|
-
return (0, _Emotion.css)(
|
|
20
|
+
return (0, _Emotion.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["\n text-align: ", ";\n "])),
|
|
29
21
|
t.hintTextAlign);
|
|
30
22
|
|
|
31
23
|
} });exports.styles = styles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Hint.styles.ts"],"names":["styles","content","t","css","hintColor","hintFontSize","hintLineHeight","hintMaxWidth","hintPaddingY","hintPaddingX","
|
|
1
|
+
{"version":3,"sources":["Hint.styles.ts"],"names":["styles","content","t","css","hintColor","hintFontSize","hintLineHeight","hintMaxWidth","hintPaddingY","hintPaddingX","contentCenter","hintTextAlign"],"mappings":";AACA,oD;;AAEO,IAAMA,MAAM,GAAG,2BAAa;AACjCC,EAAAA,OADiC,mBACzBC,CADyB,EACf;AAChB,eAAOC,YAAP;;AAEWD,IAAAA,CAAC,CAACE,SAFb;AAGeF,IAAAA,CAAC,CAACG,YAHjB;AAIiBH,IAAAA,CAAC,CAACI,cAJnB;AAKeJ,IAAAA,CAAC,CAACK,YALjB;;AAOaL,IAAAA,CAAC,CAACM,YAPf,EAO+BN,CAAC,CAACO,YAPjC;;;;AAWD,GAbgC;;AAejCC,EAAAA,aAfiC,yBAenBR,CAfmB,EAeT;AACtB,eAAOC,YAAP;AACgBD,IAAAA,CAAC,CAACS,aADlB;;AAGD,GAnBgC,EAAb,CAAf,C","sourcesContent":["import { Theme } from '../../lib/theming/Theme';\nimport { css, memoizeStyle } from '../../lib/theming/Emotion';\n\nexport const styles = memoizeStyle({\n content(t: Theme) {\n return css`\n box-sizing: border-box;\n color: ${t.hintColor};\n font-size: ${t.hintFontSize};\n line-height: ${t.hintLineHeight};\n max-width: ${t.hintMaxWidth};\n overflow-wrap: break-word;\n padding: ${t.hintPaddingY} ${t.hintPaddingX};\n word-break: break-word;\n word-wrap: break-word;\n `;\n },\n\n contentCenter(t: Theme) {\n return css`\n text-align: ${t.hintTextAlign};\n `;\n },\n});\n"]}
|
|
@@ -11,7 +11,7 @@ var _CommonWrapper = require("../../internal/CommonWrapper");
|
|
|
11
11
|
var _Emotion = require("../../lib/theming/Emotion");
|
|
12
12
|
var _rootNodeDecorator = require("../../lib/rootNode/rootNodeDecorator");
|
|
13
13
|
|
|
14
|
-
var _MenuItem = require("./MenuItem.styles");var _excluded = ["link", "comment", "icon", "loose", "state", "_enableIconPadding", "component", "onMouseEnter", "onMouseLeave", "isMobile", "href", "rel"];var _class, _class2, _temp;
|
|
14
|
+
var _MenuItem = require("./MenuItem.styles");var _excluded = ["link", "comment", "icon", "loose", "state", "_enableIconPadding", "component", "onMouseEnter", "onMouseLeave", "isMobile", "href", "disabled", "rel"];var _class, _class2, _temp;
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
@@ -164,9 +164,10 @@ MenuItem = (0, _rootNodeDecorator.rootNode)(_class = (_temp = _class2 = /*#__PUR
|
|
|
164
164
|
|
|
165
165
|
|
|
166
166
|
|
|
167
|
-
props.link,comment = props.comment,icon = props.icon,loose = props.loose,state = props.state,_enableIconPadding = props._enableIconPadding,component = props.component,onMouseEnter = props.onMouseEnter,onMouseLeave = props.onMouseLeave,isMobile = props.isMobile,href = props.href,_props$rel = props.rel,rel = _props$rel === void 0 ? _this.props.href && (0, _utils.isExternalLink)(_this.props.href) ? 'noopener noreferrer' : _this.props.rel : _props$rel,rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
168
167
|
|
|
169
|
-
|
|
168
|
+
props.link,comment = props.comment,icon = props.icon,loose = props.loose,state = props.state,_enableIconPadding = props._enableIconPadding,component = props.component,onMouseEnter = props.onMouseEnter,onMouseLeave = props.onMouseLeave,isMobile = props.isMobile,href = props.href,disabled = props.disabled,_props$rel = props.rel,rel = _props$rel === void 0 ? _this.props.href && (0, _utils.isExternalLink)(_this.props.href) ? 'noopener noreferrer' : _this.props.rel : _props$rel,rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
169
|
+
|
|
170
|
+
var hover = state === 'hover' && !disabled;
|
|
170
171
|
|
|
171
172
|
var iconElement = null;
|
|
172
173
|
if (icon) {var _cx;
|
|
@@ -202,6 +203,7 @@ MenuItem = (0, _rootNodeDecorator.rootNode)(_class = (_temp = _class2 = /*#__PUR
|
|
|
202
203
|
ref: _this.setRootRef,
|
|
203
204
|
"data-tid": MenuItemDataTids.root },
|
|
204
205
|
rest, {
|
|
206
|
+
disabled: disabled,
|
|
205
207
|
state: state,
|
|
206
208
|
onMouseOver: _this.handleMouseEnterFix,
|
|
207
209
|
onMouseLeave: _this.handleMouseLeave,
|
|
@@ -213,7 +215,7 @@ MenuItem = (0, _rootNodeDecorator.rootNode)(_class = (_temp = _class2 = /*#__PUR
|
|
|
213
215
|
iconElement, /*#__PURE__*/
|
|
214
216
|
_react.default.createElement("span", {
|
|
215
217
|
className: (0, _Emotion.cx)((_cx3 = {}, _cx3[
|
|
216
|
-
_MenuItem.styles.
|
|
218
|
+
_MenuItem.styles.mobileContentWithIcon()] = isMobile && (0, _utils.isNonNullable)(icon), _cx3)) },
|
|
217
219
|
|
|
218
220
|
|
|
219
221
|
content),
|
|
@@ -256,14 +258,14 @@ MenuItem = (0, _rootNodeDecorator.rootNode)(_class = (_temp = _class2 = /*#__PUR
|
|
|
256
258
|
getComponent = function () {
|
|
257
259
|
var _this$props = _this.props,disabled = _this$props.disabled,component = _this$props.component,href = _this$props.href;
|
|
258
260
|
|
|
259
|
-
if (disabled) {
|
|
260
|
-
return 'button';
|
|
261
|
-
}
|
|
262
|
-
|
|
263
261
|
if (component) {
|
|
264
262
|
return component;
|
|
265
263
|
}
|
|
266
264
|
|
|
265
|
+
if (disabled) {
|
|
266
|
+
return 'button';
|
|
267
|
+
}
|
|
268
|
+
|
|
267
269
|
if (href) {
|
|
268
270
|
return 'a';
|
|
269
271
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MenuItem.tsx"],"names":["MenuItemDataTids","root","comment","MenuItem","rootNode","state","iconOffsetTop","mouseEntered","rootRef","renderMain","props","link","icon","loose","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","href","rel","rest","hover","disabled","iconElement","top","styles","theme","className","rootMobile","selected","withIcon","Boolean","children","content","Component","getComponent","setRootRef","handleMouseEnterFix","handleMouseLeave","undefined","contentMobile","commentHover","e","element","render","setRootNode","componentDidMount","setState","window","getComputedStyle","getPropertyValue","React","__KONTUR_REACT_UI__","__MENU_ITEM__","propTypes","PropTypes","node","bool","string","target","onClick","func","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isExternalLink, isFunction, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode/rootNodeDecorator';\n\nimport { styles } from './MenuItem.styles';\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps extends Omit<CommonProps, 'children'> {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [`DropdownMenu`](#/Components/DropdownMenu), [`Kebab`](#/Components/Kebab), [`TooltipMenu`](#/Components/TooltipMenu) и [`Select`](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n };\n\n public state = {\n iconOffsetTop: 0,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n private rootRef: Nullable<HTMLElement> = null;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public componentDidMount() {\n if (this.rootRef) {\n this.setState({ iconOffsetTop: window.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });\n }\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n ...rest\n } = props;\n\n const hover = state === 'hover' && !this.props.disabled;\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <div style={{ top: this.state.iconOffsetTop }} className={cx({ [styles.icon(this.theme)]: true })}>\n {icon}\n </div>\n );\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: hover,\n [styles.selected(this.theme)]: state === 'selected',\n [styles.link(this.theme)]: !!link,\n [styles.withIcon(this.theme)]: Boolean(iconElement) || !!_enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n ref={this.setRootRef}\n data-tid={MenuItemDataTids.root}\n {...rest}\n state={state}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n <span\n className={cx({\n [styles.contentMobile()]: isMobile,\n })}\n >\n {content}\n </span>\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: hover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered && this.props.onMouseEnter) {\n this.mouseEntered = true;\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private setRootRef = (element: HTMLElement) => {\n this.rootRef = element;\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (disabled) {\n return 'button';\n }\n\n if (component) {\n return component;\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
|
|
1
|
+
{"version":3,"sources":["MenuItem.tsx"],"names":["MenuItemDataTids","root","comment","MenuItem","rootNode","state","iconOffsetTop","mouseEntered","rootRef","renderMain","props","link","icon","loose","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","href","disabled","rel","rest","hover","iconElement","top","styles","theme","className","rootMobile","selected","withIcon","Boolean","children","content","Component","getComponent","setRootRef","handleMouseEnterFix","handleMouseLeave","undefined","mobileContentWithIcon","commentHover","e","element","render","setRootNode","componentDidMount","setState","window","getComputedStyle","getPropertyValue","React","__KONTUR_REACT_UI__","__MENU_ITEM__","propTypes","PropTypes","node","bool","string","target","onClick","func","isMenuItem"],"mappings":";;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA,6C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EO,IAAMA,gBAAgB,GAAG;AAC9BC,EAAAA,IAAI,EAAE,gBADwB;AAE9BC,EAAAA,OAAO,EAAE,mBAFqB,EAAzB;;;AAKP;AACA;AACA;AACA;AACA;AACA,G;;AAEaC,Q,OADZC,2B;;;;;;;;;;;;;;;;;;;;;;AAuBQC,IAAAA,K,GAAQ;AACbC,MAAAA,aAAa,EAAE,CADF,E;;;;AAKPC,IAAAA,Y,GAAe,K;;AAEfC,IAAAA,O,GAAiC,I;;;;;;;;;;;;;;;;;;;;;;;AAuBjCC,IAAAA,U,GAAa,UAACC,KAAD,EAAkD;AACrE;AACEC,MAAAA,IADF;;;;;;;;;;;;;;AAeID,MAAAA,KAfJ,CACEC,IADF,CAEET,OAFF,GAeIQ,KAfJ,CAEER,OAFF,CAGEU,IAHF,GAeIF,KAfJ,CAGEE,IAHF,CAIEC,KAJF,GAeIH,KAfJ,CAIEG,KAJF,CAKER,KALF,GAeIK,KAfJ,CAKEL,KALF,CAMES,kBANF,GAeIJ,KAfJ,CAMEI,kBANF,CAOEC,SAPF,GAeIL,KAfJ,CAOEK,SAPF,CAQEC,YARF,GAeIN,KAfJ,CAQEM,YARF,CASEC,YATF,GAeIP,KAfJ,CASEO,YATF,CAUEC,QAVF,GAeIR,KAfJ,CAUEQ,QAVF,CAWEC,IAXF,GAeIT,KAfJ,CAWES,IAXF,CAYEC,QAZF,GAeIV,KAfJ,CAYEU,QAZF,cAeIV,KAfJ,CAaEW,GAbF,CAaEA,GAbF,2BAaQ,MAAKX,KAAL,CAAWS,IAAX,IAAmB,2BAAe,MAAKT,KAAL,CAAWS,IAA1B,CAAnB,GAAqD,qBAArD,GAA6E,MAAKT,KAAL,CAAWW,GAbhG,cAcKC,IAdL,+CAeIZ,KAfJ;;AAiBA,UAAMa,KAAK,GAAGlB,KAAK,KAAK,OAAV,IAAqB,CAACe,QAApC;;AAEA,UAAII,WAAW,GAAG,IAAlB;AACA,UAAIZ,IAAJ,EAAU;AACRY,QAAAA,WAAW;AACT,8CAAK,KAAK,EAAE,EAAEC,GAAG,EAAE,MAAKpB,KAAL,CAAWC,aAAlB,EAAZ,EAA+C,SAAS,EAAE,gCAAMoB,iBAAOd,IAAP,CAAY,MAAKe,KAAjB,CAAN,IAAgC,IAAhC,OAA1D;AACGf,QAAAA,IADH,CADF;;;AAKD;;AAED,UAAMgB,SAAS,GAAG;AACfF,uBAAOzB,IAAP,CAAY,MAAK0B,KAAjB,CADe,IACW,IADX;AAEfD,uBAAOG,UAAP,CAAkB,MAAKF,KAAvB,CAFe,IAEiBT,QAFjB;AAGfQ,uBAAOb,KAAP,EAHe,IAGE,CAAC,CAACA,KAHJ;AAIfa,uBAAOH,KAAP,CAAa,MAAKI,KAAlB,CAJe,IAIYJ,KAJZ;AAKfG,uBAAOI,QAAP,CAAgB,MAAKH,KAArB,CALe,IAKetB,KAAK,KAAK,UALzB;AAMfqB,uBAAOf,IAAP,CAAY,MAAKgB,KAAjB,CANe,IAMW,CAAC,CAAChB,IANb;AAOfe,uBAAOK,QAAP,CAAgB,MAAKJ,KAArB,CAPe,IAOeK,OAAO,CAACR,WAAD,CAAP,IAAwB,CAAC,CAACV,kBAPzC;AAQfY,uBAAON,QAAP,CAAgB,MAAKO,KAArB,CARe,IAQe,CAAC,CAAC,MAAKjB,KAAL,CAAWU,QAR5B,QAAlB;;;AAWA,UAAQa,QAAR,GAAqB,MAAKvB,KAA1B,CAAQuB,QAAR;;AAEA,UAAIC,OAAO,GAAGD,QAAd;AACA,UAAI,uBAAWA,QAAX,CAAJ,EAA0B;AACxBC,QAAAA,OAAO,GAAGD,QAAQ,CAAC,MAAKvB,KAAL,CAAWL,KAAZ,CAAlB;AACD;;AAED,UAAM8B,SAAS,GAAG,MAAKC,YAAL,EAAlB;;AAEA;AACE,qCAAC,SAAD;AACE,UAAA,GAAG,EAAE,MAAKC,UADZ;AAEE,sBAAUrC,gBAAgB,CAACC,IAF7B;AAGMqB,QAAAA,IAHN;AAIE,UAAA,QAAQ,EAAEF,QAJZ;AAKE,UAAA,KAAK,EAAEf,KALT;AAME,UAAA,WAAW,EAAE,MAAKiC,mBANpB;AAOE,UAAA,YAAY,EAAE,MAAKC,gBAPrB;AAQE,UAAA,SAAS,EAAEX,SARb;AASE,UAAA,IAAI,EAAET,IATR;AAUE,UAAA,GAAG,EAAEA,IAAI,GAAGE,GAAH,GAASmB,SAVpB;AAWE,UAAA,QAAQ,EAAE,CAAC,CAXb;;AAaGhB,QAAAA,WAbH;AAcE;AACE,UAAA,SAAS,EAAE;AACRE,2BAAOe,qBAAP,EADQ,IACyBvB,QAAQ,IAAI,0BAAcN,IAAd,CADrC,QADb;;;AAKGsB,QAAAA,OALH,CAdF;;AAqBG,cAAKxB,KAAL,CAAWR,OAAX;AACC;AACE,sBAAUF,gBAAgB,CAACE,OAD7B;AAEE,UAAA,SAAS,EAAE;AACRwB,2BAAOxB,OAAP,CAAe,MAAKyB,KAApB,CADQ,IACqB,IADrB;AAERD,2BAAOgB,YAAP,CAAoB,MAAKf,KAAzB,CAFQ,IAE0BJ,KAF1B,QAFb;;;AAOGrB,QAAAA,OAPH,CAtBJ,CADF;;;;;AAmCD,K;;;;AAIOoC,IAAAA,mB,GAAsB,UAACK,CAAD,EAAsC;AAClE,UAAI,CAAC,MAAKpC,YAAN,IAAsB,MAAKG,KAAL,CAAWM,YAArC,EAAmD;AACjD,cAAKT,YAAL,GAAoB,IAApB;AACA,cAAKG,KAAL,CAAWM,YAAX,CAAwB2B,CAAxB;AACD;AACF,K;;AAEOJ,IAAAA,gB,GAAmB,UAACI,CAAD,EAAsC;AAC/D,YAAKpC,YAAL,GAAoB,KAApB;AACA,UAAI,MAAKG,KAAL,CAAWO,YAAf,EAA6B;AAC3B,cAAKP,KAAL,CAAWO,YAAX,CAAwB0B,CAAxB;AACD;AACF,K;;AAEON,IAAAA,U,GAAa,UAACO,OAAD,EAA0B;AAC7C,YAAKpC,OAAL,GAAeoC,OAAf;AACD,K;;AAEOR,IAAAA,Y,GAAe,YAAM;AAC3B,wBAAsC,MAAK1B,KAA3C,CAAQU,QAAR,eAAQA,QAAR,CAAkBL,SAAlB,eAAkBA,SAAlB,CAA6BI,IAA7B,eAA6BA,IAA7B;;AAEA,UAAIJ,SAAJ,EAAe;AACb,eAAOA,SAAP;AACD;;AAED,UAAIK,QAAJ,EAAc;AACZ,eAAO,QAAP;AACD;;AAED,UAAID,IAAJ,EAAU;AACR,eAAO,GAAP;AACD;;AAED,aAAO,QAAP;AACD,K,sDA/IM0B,M,GAAP,kBAAgB,mBACd,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAAClB,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,oBACE,6BAAC,4BAAD,2BAAe,WAAW,EAAE,MAAI,CAACmB,WAAjC,IAAkD,MAAI,CAACpC,KAAvD,GACG,MAAI,CAACD,UADR,CADF,CAKD,CARH,CADF,CAYD,C,QAEMsC,iB,GAAP,6BAA2B,CACzB,IAAI,KAAKvC,OAAT,EAAkB,CAChB,KAAKwC,QAAL,CAAc,EAAE1C,aAAa,EAAE2C,MAAM,CAACC,gBAAP,CAAwB,KAAK1C,OAA7B,EAAsC2C,gBAAtC,CAAuD,aAAvD,CAAjB,EAAd,EACD,CACF,C,mBAlD2BC,eAAMjB,S,WACpBkB,mB,GAAsB,U,UACtBC,a,GAAgB,I,UAEhBC,S,GAAY,EACxBrD,OAAO,EAAEsD,mBAAUC,IADK,EAGxBrC,QAAQ,EAAEoC,mBAAUE,IAHI,EAKxBvC,IAAI,EAAEqC,mBAAUG,MALQ,EAOxB/C,IAAI,EAAE4C,mBAAUC,IAPQ,EASxB5C,KAAK,EAAE2C,mBAAUE,IATO,EAWxBrD,KAAK,EAAEmD,mBAAUG,MAXO,EAaxBC,MAAM,EAAEJ,mBAAUG,MAbM,EAexBE,OAAO,EAAEL,mBAAUM,IAfK,E;;;AA6KrB,IAAMC,UAAU,GAAG,+BAAmB,UAAnB,CAAnB,C","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isExternalLink, isFunction, isNonNullable, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode/rootNodeDecorator';\n\nimport { styles } from './MenuItem.styles';\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps extends Omit<CommonProps, 'children'> {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [`DropdownMenu`](#/Components/DropdownMenu), [`Kebab`](#/Components/Kebab), [`TooltipMenu`](#/Components/TooltipMenu) и [`Select`](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n };\n\n public state = {\n iconOffsetTop: 0,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n private rootRef: Nullable<HTMLElement> = null;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public componentDidMount() {\n if (this.rootRef) {\n this.setState({ iconOffsetTop: window.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });\n }\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n disabled,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n ...rest\n } = props;\n\n const hover = state === 'hover' && !disabled;\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <div style={{ top: this.state.iconOffsetTop }} className={cx({ [styles.icon(this.theme)]: true })}>\n {icon}\n </div>\n );\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: hover,\n [styles.selected(this.theme)]: state === 'selected',\n [styles.link(this.theme)]: !!link,\n [styles.withIcon(this.theme)]: Boolean(iconElement) || !!_enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n ref={this.setRootRef}\n data-tid={MenuItemDataTids.root}\n {...rest}\n disabled={disabled}\n state={state}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n <span\n className={cx({\n [styles.mobileContentWithIcon()]: isMobile && isNonNullable(icon),\n })}\n >\n {content}\n </span>\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: hover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered && this.props.onMouseEnter) {\n this.mouseEntered = true;\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private setRootRef = (element: HTMLElement) => {\n this.rootRef = element;\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (component) {\n return component;\n }\n\n if (disabled) {\n return 'button';\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { Theme } from '../../lib/theming/Theme';
|
|
2
|
+
export declare const getMenuItemPaddings: ({ menuItemLegacyPaddingX, menuItemPaddingX, menuItemLegacyPaddingY, menuItemPaddingY, }: Record<'menuItemLegacyPaddingX' | 'menuItemPaddingX' | 'menuItemLegacyPaddingY' | 'menuItemPaddingY', string>) => {
|
|
3
|
+
paddingX: string;
|
|
4
|
+
paddingY: string;
|
|
5
|
+
};
|
|
2
6
|
export declare const styles: {
|
|
3
7
|
root(t: Theme): string;
|
|
4
8
|
rootMobile(t: Theme): string;
|
|
@@ -11,5 +15,5 @@ export declare const styles: {
|
|
|
11
15
|
comment(t: Theme): string;
|
|
12
16
|
commentHover(t: Theme): string;
|
|
13
17
|
icon(t: Theme): string;
|
|
14
|
-
|
|
18
|
+
mobileContentWithIcon(): string;
|
|
15
19
|
};
|
|
@@ -1,20 +1,36 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.styles = void 0;var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
|
|
1
|
+
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.styles = exports.getMenuItemPaddings = void 0;var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
|
|
2
2
|
var _Emotion = require("../../lib/theming/Emotion");
|
|
3
3
|
var _Mixins = require("../../lib/styles/Mixins");var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12;
|
|
4
4
|
|
|
5
|
+
var getMenuItemPaddings = function getMenuItemPaddings(_ref)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
{var menuItemLegacyPaddingX = _ref.menuItemLegacyPaddingX,menuItemPaddingX = _ref.menuItemPaddingX,menuItemLegacyPaddingY = _ref.menuItemLegacyPaddingY,menuItemPaddingY = _ref.menuItemPaddingY;
|
|
11
|
+
var legacyPaddingX = parseFloat(menuItemLegacyPaddingX);
|
|
12
|
+
var legacyPaddingY = parseFloat(menuItemLegacyPaddingY);
|
|
13
|
+
|
|
14
|
+
var paddingX = legacyPaddingX !== 0 ? parseFloat(menuItemPaddingX) + legacyPaddingX + "px" : menuItemPaddingX;
|
|
15
|
+
var paddingY = legacyPaddingY !== 0 ? parseFloat(menuItemPaddingY) + legacyPaddingY + "px" : menuItemPaddingY;
|
|
16
|
+
|
|
17
|
+
return { paddingX: paddingX, paddingY: paddingY };
|
|
18
|
+
};exports.getMenuItemPaddings = getMenuItemPaddings;
|
|
19
|
+
|
|
5
20
|
var styles = (0, _Emotion.memoizeStyle)({
|
|
6
21
|
root: function root(t) {
|
|
7
|
-
var
|
|
8
|
-
|
|
22
|
+
var _getMenuItemPaddings = getMenuItemPaddings({
|
|
23
|
+
menuItemLegacyPaddingX: t.menuItemLegacyPaddingX,
|
|
24
|
+
menuItemPaddingX: t.menuItemPaddingX,
|
|
25
|
+
menuItemLegacyPaddingY: t.menuItemLegacyPaddingY,
|
|
26
|
+
menuItemPaddingY: t.menuItemPaddingY }),paddingX = _getMenuItemPaddings.paddingX,paddingY = _getMenuItemPaddings.paddingY;
|
|
9
27
|
|
|
10
|
-
var paddingX = legacyPaddingX !== 0 ? parseFloat(t.menuItemPaddingX) + legacyPaddingX + "px" : t.menuItemPaddingX;
|
|
11
|
-
var paddingY = legacyPaddingY !== 0 ? parseFloat(t.menuItemPaddingY) + legacyPaddingY + "px" : t.menuItemPaddingY;
|
|
12
28
|
|
|
13
|
-
return (0, _Emotion.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["\n ", ";\n\n cursor: pointer;\n display:
|
|
29
|
+
return (0, _Emotion.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["\n ", ";\n\n cursor: pointer;\n display: ", ";\n line-height: ", ";\n font-size: ", ";\n padding: ", " ", " ", " ", ";\n position: relative;\n text-decoration: none;\n color: ", ";\n border-radius: ", ";\n\n button& {\n min-width: 100%;\n }\n "])),
|
|
14
30
|
(0, _Mixins.resetButton)(),
|
|
15
31
|
|
|
16
32
|
|
|
17
|
-
|
|
33
|
+
t.menuItemDisplay,
|
|
18
34
|
t.menuItemLineHeight,
|
|
19
35
|
t.menuItemFontSize,
|
|
20
36
|
t.menuItemPaddingY, paddingX, paddingY, t.menuItemPaddingX,
|
|
@@ -31,8 +47,8 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
31
47
|
|
|
32
48
|
rootMobile: function rootMobile(t) {
|
|
33
49
|
return (0, _Emotion.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["\n font-size: ", ";\n line-height: ", ";\n padding: ", ";\n "])),
|
|
34
|
-
t.
|
|
35
|
-
t.
|
|
50
|
+
t.menuItemFontSizeMobile,
|
|
51
|
+
t.menuItemLineHeightMobile,
|
|
36
52
|
t.menuItemPaddingMobile);
|
|
37
53
|
|
|
38
54
|
},
|
|
@@ -50,8 +66,8 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
50
66
|
|
|
51
67
|
},
|
|
52
68
|
disabled: function disabled(t) {
|
|
53
|
-
return (0, _Emotion.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteralLoose2.default)(["\n background:
|
|
54
|
-
|
|
69
|
+
return (0, _Emotion.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteralLoose2.default)(["\n background: ", ";\n color: ", ";\n cursor: default;\n "])),
|
|
70
|
+
t.menuItemDisabledBg,
|
|
55
71
|
t.menuItemDisabledColor);
|
|
56
72
|
|
|
57
73
|
|
|
@@ -92,7 +108,7 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
92
108
|
t.menuItemIconLegacyShift);
|
|
93
109
|
|
|
94
110
|
},
|
|
95
|
-
|
|
111
|
+
mobileContentWithIcon: function mobileContentWithIcon() {
|
|
96
112
|
return (0, _Emotion.css)(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteralLoose2.default)(["\n margin-left: 8px;\n "])));
|
|
97
113
|
|
|
98
114
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MenuItem.styles.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["MenuItem.styles.ts"],"names":["getMenuItemPaddings","menuItemLegacyPaddingX","menuItemPaddingX","menuItemLegacyPaddingY","menuItemPaddingY","legacyPaddingX","parseFloat","legacyPaddingY","paddingX","paddingY","styles","root","t","css","menuItemDisplay","menuItemLineHeight","menuItemFontSize","menuItemTextColor","menuItemBorderRadius","rootMobile","menuItemFontSizeMobile","menuItemLineHeightMobile","menuItemPaddingMobile","hover","menuItemHoverBg","menuItemHoverColor","selected","menuItemSelectedBg","disabled","menuItemDisabledBg","menuItemDisabledColor","link","menuItemLinkColor","loose","withIcon","menuItemPaddingForIcon","comment","menuItemCommentColor","commentHover","menuItemCommentColorHover","icon","menuItemIconWidth","parseInt","menuItemIconLegacyMargin","menuItemIconLegacyShift","mobileContentWithIcon"],"mappings":"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","sourcesContent":["import { Theme } from '../../lib/theming/Theme';\nimport { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { resetButton } from '../../lib/styles/Mixins';\n\nexport const getMenuItemPaddings = ({\n menuItemLegacyPaddingX,\n menuItemPaddingX,\n menuItemLegacyPaddingY,\n menuItemPaddingY,\n}: Record<'menuItemLegacyPaddingX' | 'menuItemPaddingX' | 'menuItemLegacyPaddingY' | 'menuItemPaddingY', string>) => {\n const legacyPaddingX = parseFloat(menuItemLegacyPaddingX);\n const legacyPaddingY = parseFloat(menuItemLegacyPaddingY);\n\n const paddingX = legacyPaddingX !== 0 ? `${parseFloat(menuItemPaddingX) + legacyPaddingX}px` : menuItemPaddingX;\n const paddingY = legacyPaddingY !== 0 ? `${parseFloat(menuItemPaddingY) + legacyPaddingY}px` : menuItemPaddingY;\n\n return { paddingX, paddingY };\n};\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n const { paddingX, paddingY } = getMenuItemPaddings({\n menuItemLegacyPaddingX: t.menuItemLegacyPaddingX,\n menuItemPaddingX: t.menuItemPaddingX,\n menuItemLegacyPaddingY: t.menuItemLegacyPaddingY,\n menuItemPaddingY: t.menuItemPaddingY,\n });\n\n return css`\n ${resetButton()};\n\n cursor: pointer;\n display: ${t.menuItemDisplay};\n line-height: ${t.menuItemLineHeight};\n font-size: ${t.menuItemFontSize};\n padding: ${t.menuItemPaddingY} ${paddingX} ${paddingY} ${t.menuItemPaddingX};\n position: relative;\n text-decoration: none;\n color: ${t.menuItemTextColor};\n border-radius: ${t.menuItemBorderRadius};\n\n button& {\n min-width: 100%;\n }\n `;\n },\n\n rootMobile(t: Theme) {\n return css`\n font-size: ${t.menuItemFontSizeMobile};\n line-height: ${t.menuItemLineHeightMobile};\n padding: ${t.menuItemPaddingMobile};\n `;\n },\n\n hover(t: Theme) {\n // Color with !important in purpose to override `a:hover`\n return css`\n background: ${t.menuItemHoverBg} !important;\n color: ${t.menuItemHoverColor} !important;\n `;\n },\n selected(t: Theme) {\n return css`\n background: ${t.menuItemSelectedBg} !important;\n `;\n },\n disabled(t: Theme) {\n return css`\n background: ${t.menuItemDisabledBg};\n color: ${t.menuItemDisabledColor};\n cursor: default;\n `;\n },\n link(t: Theme) {\n return css`\n color: ${t.menuItemLinkColor};\n `;\n },\n loose() {\n return css`\n padding-left: 15px;\n `;\n },\n withIcon(t: Theme) {\n return css`\n padding-left: ${t.menuItemPaddingForIcon};\n `;\n },\n comment(t: Theme) {\n return css`\n color: ${t.menuItemCommentColor};\n white-space: normal;\n `;\n },\n commentHover(t: Theme) {\n return css`\n color: ${t.menuItemCommentColorHover};\n opacity: 0.6;\n `;\n },\n icon(t: Theme) {\n return css`\n width: ${t.menuItemIconWidth};\n display: inline-block;\n position: absolute;\n left: ${parseInt(t.menuItemPaddingX) + parseInt(t.menuItemIconLegacyMargin)}px;\n transform: translateY(${t.menuItemIconLegacyShift});\n `;\n },\n mobileContentWithIcon() {\n return css`\n margin-left: 8px;\n `;\n },\n});\n"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";exports.__esModule = true;exports.MenuSeparator = MenuSeparator;exports.MenuSeparatorDataTids = void 0;var _react = _interopRequireWildcard(require("react"));
|
|
2
2
|
|
|
3
|
+
var _Emotion = require("../../lib/theming/Emotion");
|
|
3
4
|
var _ThemeContext = require("../../lib/theming/ThemeContext");
|
|
4
5
|
var _CommonWrapper = require("../../internal/CommonWrapper");
|
|
6
|
+
var _ResponsiveLayout = require("../ResponsiveLayout");
|
|
5
7
|
|
|
6
8
|
var _MenuSeparator = require("./MenuSeparator.styles");function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}
|
|
7
9
|
|
|
@@ -20,7 +22,16 @@ function MenuSeparator(props) {
|
|
|
20
22
|
|
|
21
23
|
return /*#__PURE__*/(
|
|
22
24
|
_react.default.createElement(_CommonWrapper.CommonWrapper, props, /*#__PURE__*/
|
|
23
|
-
_react.default.createElement(
|
|
25
|
+
_react.default.createElement(_ResponsiveLayout.ResponsiveLayout, null,
|
|
26
|
+
function (_ref) {var _cx;var isMobile = _ref.isMobile;
|
|
27
|
+
return /*#__PURE__*/(
|
|
28
|
+
_react.default.createElement("div", {
|
|
29
|
+
"data-tid": MenuSeparatorDataTids.root,
|
|
30
|
+
className: (0, _Emotion.cx)((_cx = {}, _cx[_MenuSeparator.styles.root(theme)] = true, _cx[_MenuSeparator.styles.rootMobile(theme)] = isMobile, _cx)) }));
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
})));
|
|
34
|
+
|
|
24
35
|
|
|
25
36
|
|
|
26
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MenuSeparator.tsx"],"names":["MenuSeparatorDataTids","root","MenuSeparator","props","theme","ThemeContext","styles","__KONTUR_REACT_UI__"],"mappings":"oHAAA;;AAEA;AACA;;AAEA,uD;;;;AAIO,IAAMA,qBAAqB,GAAG;AACnCC,EAAAA,IAAI,EAAE,qBAD6B,EAA9B;;AAGP;AACA;AACA;AACA;AACA,G;AACA,SAASC,aAAT,CAAuBC,KAAvB,EAAkD;AAChD,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;;AAEA;AACE,iCAAC,4BAAD,EAAmBF,KAAnB;AACE,
|
|
1
|
+
{"version":3,"sources":["MenuSeparator.tsx"],"names":["MenuSeparatorDataTids","root","MenuSeparator","props","theme","ThemeContext","isMobile","styles","rootMobile","__KONTUR_REACT_UI__"],"mappings":"oHAAA;;AAEA;AACA;AACA;AACA;;AAEA,uD;;;;AAIO,IAAMA,qBAAqB,GAAG;AACnCC,EAAAA,IAAI,EAAE,qBAD6B,EAA9B;;AAGP;AACA;AACA;AACA;AACA,G;AACA,SAASC,aAAT,CAAuBC,KAAvB,EAAkD;AAChD,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;;AAEA;AACE,iCAAC,4BAAD,EAAmBF,KAAnB;AACE,iCAAC,kCAAD;AACG,oBAAkB,aAAfG,QAAe,QAAfA,QAAe;AACjB;AACE;AACE,sBAAUN,qBAAqB,CAACC,IADlC;AAEE,UAAA,SAAS,EAAE,gCAAMM,sBAAON,IAAP,CAAYG,KAAZ,CAAN,IAA2B,IAA3B,MAAkCG,sBAAOC,UAAP,CAAkBJ,KAAlB,CAAlC,IAA6DE,QAA7D,OAFb,GADF;;;AAMD,KARH,CADF,CADF;;;;AAcD;;AAEDJ,aAAa,CAACO,mBAAd,GAAoC,eAApC","sourcesContent":["import React, { useContext } from 'react';\n\nimport { cx } from '../../lib/theming/Emotion';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ResponsiveLayout } from '../ResponsiveLayout';\n\nimport { styles } from './MenuSeparator.styles';\n\nexport type MenuSeparatorProps = CommonProps;\n\nexport const MenuSeparatorDataTids = {\n root: 'MenuSeparator__root',\n} as const;\n/**\n * Добавляет разделительную линию между элементами меню.\n *\n * Сущности в которых может быть использован `MenuSeparator`: [`DropdownMenu`](#/Components/DropdownMenu), [`Kebab`](#/Components/Kebab), [`TooltipMenu`](#/Components/TooltipMenu) и [`Select`](#/Components/Select).\n */\nfunction MenuSeparator(props: MenuSeparatorProps) {\n const theme = useContext(ThemeContext);\n\n return (\n <CommonWrapper {...props}>\n <ResponsiveLayout>\n {({ isMobile }) => {\n return (\n <div\n data-tid={MenuSeparatorDataTids.root}\n className={cx({ [styles.root(theme)]: true, [styles.rootMobile(theme)]: isMobile })}\n />\n );\n }}\n </ResponsiveLayout>\n </CommonWrapper>\n );\n}\n\nMenuSeparator.__KONTUR_REACT_UI__ = 'MenuSeparator';\n\nexport { MenuSeparator };\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.styles = void 0;var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _Emotion = require("../../lib/theming/Emotion");var _templateObject;
|
|
1
|
+
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.styles = void 0;var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _Emotion = require("../../lib/theming/Emotion");var _templateObject, _templateObject2;
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
var styles = (0, _Emotion.memoizeStyle)({
|
|
@@ -7,4 +7,11 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
7
7
|
t.menuSeparatorMarginY,
|
|
8
8
|
t.menuSeparatorBorderWidth, t.menuSeparatorBorderColor);
|
|
9
9
|
|
|
10
|
+
},
|
|
11
|
+
|
|
12
|
+
rootMobile: function rootMobile(t) {
|
|
13
|
+
return (0, _Emotion.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["\n margin: ", " ", ";\n border-radius: 1px;\n "])),
|
|
14
|
+
t.mobileMenuSeparatorMarginY, t.mobileMenuSeparatorMarginX);
|
|
15
|
+
|
|
16
|
+
|
|
10
17
|
} });exports.styles = styles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MenuSeparator.styles.ts"],"names":["styles","root","t","css","menuSeparatorMarginY","menuSeparatorBorderWidth","menuSeparatorBorderColor"],"mappings":"4QAAA,oD;;;AAGO,IAAMA,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,eAAOC,YAAP;AACYD,IAAAA,CAAC,CAACE,oBADd;AAEgBF,IAAAA,CAAC,CAACG,wBAFlB,EAEoDH,CAAC,CAACI,wBAFtD;;AAID,GANgC,EAAb,CAAf,C","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n margin: ${t.menuSeparatorMarginY} 0;\n border-top: ${t.menuSeparatorBorderWidth} solid ${t.menuSeparatorBorderColor};\n `;\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["MenuSeparator.styles.ts"],"names":["styles","root","t","css","menuSeparatorMarginY","menuSeparatorBorderWidth","menuSeparatorBorderColor","rootMobile","mobileMenuSeparatorMarginY","mobileMenuSeparatorMarginX"],"mappings":"4QAAA,oD;;;AAGO,IAAMA,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,eAAOC,YAAP;AACYD,IAAAA,CAAC,CAACE,oBADd;AAEgBF,IAAAA,CAAC,CAACG,wBAFlB,EAEoDH,CAAC,CAACI,wBAFtD;;AAID,GANgC;;AAQjCC,EAAAA,UARiC,sBAQtBL,CARsB,EAQZ;AACnB,eAAOC,YAAP;AACYD,IAAAA,CAAC,CAACM,0BADd,EAC4CN,CAAC,CAACO,0BAD9C;;;AAID,GAbgC,EAAb,CAAf,C","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n margin: ${t.menuSeparatorMarginY} 0;\n border-top: ${t.menuSeparatorBorderWidth} solid ${t.menuSeparatorBorderColor};\n `;\n },\n\n rootMobile(t: Theme) {\n return css`\n margin: ${t.mobileMenuSeparatorMarginY} ${t.mobileMenuSeparatorMarginX};\n border-radius: 1px;\n `;\n },\n});\n"]}
|
|
@@ -16,8 +16,8 @@ var _ThemeContext = require("../../lib/theming/ThemeContext");
|
|
|
16
16
|
var _client = require("../../lib/client");
|
|
17
17
|
var _CommonWrapper = require("../../internal/CommonWrapper");
|
|
18
18
|
var _Emotion = require("../../lib/theming/Emotion");
|
|
19
|
-
var _ResponsiveLayout = require("../ResponsiveLayout");
|
|
20
19
|
var _createPropsGetter = require("../../lib/createPropsGetter");
|
|
20
|
+
var _ResponsiveLayout = require("../ResponsiveLayout");
|
|
21
21
|
|
|
22
22
|
var _ModalContext = require("./ModalContext");
|
|
23
23
|
var _ModalFooter = require("./ModalFooter");
|
|
@@ -260,10 +260,6 @@ Modal = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(M
|
|
|
260
260
|
|
|
261
261
|
|
|
262
262
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
263
|
|
|
268
264
|
|
|
269
265
|
|