@skbkontur/react-ui 3.7.0 → 3.8.1
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 +64 -0
- package/README.md +1 -1
- package/cjs/components/Button/Button.d.ts +1 -0
- package/cjs/components/Button/Button.js +4 -1
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Button/Button.styles.js +2 -2
- package/cjs/components/Button/Button.styles.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.js +6 -5
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.styles.js +3 -3
- package/cjs/components/Checkbox/Checkbox.styles.js.map +1 -1
- package/cjs/components/CurrencyLabel/CurrencyLabel.js +14 -5
- package/cjs/components/CurrencyLabel/CurrencyLabel.js.map +1 -1
- package/cjs/components/CurrencyLabel/CurrencyLabel.styles.d.ts +4 -0
- package/cjs/components/CurrencyLabel/CurrencyLabel.styles.js +9 -0
- package/cjs/components/CurrencyLabel/CurrencyLabel.styles.js.map +1 -0
- package/cjs/components/FxInput/FxInput.js +1 -1
- package/cjs/components/FxInput/FxInput.js.map +1 -1
- package/cjs/components/Kebab/Kebab.js +2 -1
- package/cjs/components/Kebab/Kebab.js.map +1 -1
- package/cjs/components/MenuItem/MenuItem.md +1 -1
- package/cjs/components/MenuItem/MenuItem.styles.js +3 -2
- package/cjs/components/MenuItem/MenuItem.styles.js.map +1 -1
- package/cjs/components/Modal/Modal.styles.d.ts +1 -0
- package/cjs/components/Modal/Modal.styles.js +24 -21
- package/cjs/components/Modal/Modal.styles.js.map +1 -1
- package/cjs/components/Modal/ModalClose.js +23 -3
- package/cjs/components/Modal/ModalClose.js.map +1 -1
- package/cjs/components/Paging/Paging.styles.js +2 -1
- package/cjs/components/Paging/Paging.styles.js.map +1 -1
- package/cjs/components/Radio/Radio.styles.js +3 -2
- package/cjs/components/Radio/Radio.styles.js.map +1 -1
- package/cjs/components/SidePage/SidePage.d.ts +1 -2
- package/cjs/components/SidePage/SidePage.js +1 -5
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/components/SidePage/SidePage.styles.d.ts +2 -1
- package/cjs/components/SidePage/SidePage.styles.js +44 -28
- package/cjs/components/SidePage/SidePage.styles.js.map +1 -1
- package/cjs/components/SidePage/SidePageHeader.d.ts +4 -1
- package/cjs/components/SidePage/SidePageHeader.js +33 -23
- package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
- package/cjs/components/Switcher/Switcher.js +1 -1
- package/cjs/components/Switcher/Switcher.js.map +1 -1
- package/cjs/components/Switcher/Switcher.styles.d.ts +1 -1
- package/cjs/components/Switcher/Switcher.styles.js +3 -2
- package/cjs/components/Switcher/Switcher.styles.js.map +1 -1
- package/cjs/components/Tabs/Tab.styles.js +2 -2
- package/cjs/components/Tabs/Tab.styles.js.map +1 -1
- package/cjs/components/Textarea/Textarea.d.ts +0 -2
- package/cjs/components/Textarea/Textarea.js +6 -3
- package/cjs/components/Textarea/Textarea.js.map +1 -1
- package/cjs/components/Toggle/Toggle.d.ts +43 -1
- package/cjs/components/Toggle/Toggle.js +46 -2
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/components/Toggle/Toggle.md +70 -9
- package/cjs/components/Toggle/Toggle.styles.d.ts +2 -0
- package/cjs/components/Toggle/Toggle.styles.js +32 -16
- package/cjs/components/Toggle/Toggle.styles.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +8 -0
- package/cjs/components/TokenInput/TokenInput.js +24 -2
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.styles.js +2 -1
- package/cjs/components/Tooltip/Tooltip.styles.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js +2 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBoxReducer.js +3 -2
- package/cjs/internal/CustomComboBox/CustomComboBoxReducer.js.map +1 -1
- package/cjs/internal/HideBodyVerticalScroll/HideBodyVerticalScroll.js +5 -7
- package/cjs/internal/HideBodyVerticalScroll/HideBodyVerticalScroll.js.map +1 -1
- package/cjs/internal/InputLikeText/InputLikeText.js +2 -1
- package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
- package/cjs/internal/PopupMenu/PopupMenu.js +1 -1
- package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainer.js +2 -1
- package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
- package/cjs/internal/ThemePlayground/darkTheme.js +3 -3
- package/cjs/internal/ThemePlayground/darkTheme.js.map +1 -1
- package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/cjs/internal/icons/CrossIcon.js +8 -1
- package/cjs/internal/icons/CrossIcon.js.map +1 -1
- package/cjs/internal/themes/DefaultTheme.d.ts +16 -5
- package/cjs/internal/themes/DefaultTheme.js +63 -25
- package/cjs/internal/themes/DefaultTheme.js.map +1 -1
- package/cjs/internal/themes/FlatTheme.d.ts +0 -1
- package/cjs/internal/themes/FlatTheme.js +1 -2
- package/cjs/internal/themes/FlatTheme.js.map +1 -1
- package/cjs/internal/themes/Theme8px.js +1 -1
- package/cjs/internal/themes/Theme8px.js.map +1 -1
- package/cjs/lib/Upgrades.d.ts +2 -0
- package/cjs/lib/Upgrades.js +14 -0
- package/cjs/lib/Upgrades.js.map +1 -1
- package/cjs/lib/events/keyboard/identifiers.d.ts +1 -0
- package/cjs/lib/events/keyboard/identifiers.js +6 -1
- package/cjs/lib/events/keyboard/identifiers.js.map +1 -1
- package/cjs/lib/locale/LOCALECONTEXT.md +1 -1
- package/cjs/lib/styles/ColorFunctions.js +1 -1
- package/cjs/lib/styles/ColorFunctions.js.map +1 -1
- package/cjs/lib/theming/Emotion.js +1 -1
- package/cjs/lib/theming/Emotion.js.map +1 -1
- package/cjs/lib/theming/ThemeContext.md +1 -1
- package/cjs/lib/utils.d.ts +7 -0
- package/cjs/lib/utils.js +12 -2
- package/cjs/lib/utils.js.map +1 -1
- package/components/Button/Button/Button.js +2 -1
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +1 -0
- package/components/Button/Button.styles/Button.styles.js +1 -1
- package/components/Button/Button.styles/Button.styles.js.map +1 -1
- package/components/Checkbox/Checkbox/Checkbox.js +2 -2
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.styles/Checkbox.styles.js +2 -2
- package/components/Checkbox/Checkbox.styles/Checkbox.styles.js.map +1 -1
- package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js +11 -5
- package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js.map +1 -1
- package/components/CurrencyLabel/CurrencyLabel.styles/CurrencyLabel.styles.js +10 -0
- package/components/CurrencyLabel/CurrencyLabel.styles/CurrencyLabel.styles.js.map +1 -0
- package/components/CurrencyLabel/CurrencyLabel.styles/package.json +6 -0
- package/components/CurrencyLabel/CurrencyLabel.styles.d.ts +4 -0
- package/components/FxInput/FxInput/FxInput.js +2 -1
- package/components/FxInput/FxInput/FxInput.js.map +1 -1
- package/components/Kebab/Kebab/Kebab.js +2 -1
- package/components/Kebab/Kebab/Kebab.js.map +1 -1
- package/components/MenuItem/MenuItem.md +1 -1
- package/components/MenuItem/MenuItem.styles/MenuItem.styles.js +1 -1
- package/components/MenuItem/MenuItem.styles/MenuItem.styles.js.map +1 -1
- package/components/Modal/Modal.styles/Modal.styles.js +18 -15
- package/components/Modal/Modal.styles/Modal.styles.js.map +1 -1
- package/components/Modal/Modal.styles.d.ts +1 -0
- package/components/Modal/ModalClose/ModalClose.js +25 -2
- package/components/Modal/ModalClose/ModalClose.js.map +1 -1
- package/components/Paging/Paging.styles/Paging.styles.js +1 -1
- package/components/Paging/Paging.styles/Paging.styles.js.map +1 -1
- package/components/Radio/Radio.styles/Radio.styles.js +1 -1
- package/components/Radio/Radio.styles/Radio.styles.js.map +1 -1
- package/components/SidePage/SidePage/SidePage.js +2 -4
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/SidePage/SidePage.d.ts +1 -2
- package/components/SidePage/SidePage.styles/SidePage.styles.js +20 -16
- package/components/SidePage/SidePage.styles/SidePage.styles.js.map +1 -1
- package/components/SidePage/SidePage.styles.d.ts +2 -1
- package/components/SidePage/SidePageHeader/SidePageHeader.js +40 -22
- package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
- package/components/SidePage/SidePageHeader.d.ts +4 -1
- package/components/Switcher/Switcher/Switcher.js +1 -1
- package/components/Switcher/Switcher/Switcher.js.map +1 -1
- package/components/Switcher/Switcher.styles/Switcher.styles.js +2 -2
- package/components/Switcher/Switcher.styles/Switcher.styles.js.map +1 -1
- package/components/Switcher/Switcher.styles.d.ts +1 -1
- package/components/Tabs/Tab.styles/Tab.styles.js +1 -1
- package/components/Tabs/Tab.styles/Tab.styles.js.map +1 -1
- package/components/Textarea/Textarea/Textarea.js +1 -2
- package/components/Textarea/Textarea/Textarea.js.map +1 -1
- package/components/Textarea/Textarea.d.ts +0 -2
- package/components/Toggle/Toggle/Toggle.js +6 -2
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +43 -1
- package/components/Toggle/Toggle.md +70 -9
- package/components/Toggle/Toggle.styles/Toggle.styles.js +18 -12
- package/components/Toggle/Toggle.styles/Toggle.styles.js.map +1 -1
- package/components/Toggle/Toggle.styles.d.ts +2 -0
- package/components/TokenInput/TokenInput/TokenInput.js +24 -2
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +8 -0
- package/components/Tooltip/Tooltip.styles/Tooltip.styles.js +1 -1
- package/components/Tooltip/Tooltip.styles/Tooltip.styles.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +2 -1
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/CustomComboBoxReducer/CustomComboBoxReducer.js +3 -2
- package/internal/CustomComboBox/CustomComboBoxReducer/CustomComboBoxReducer.js.map +1 -1
- package/internal/HideBodyVerticalScroll/HideBodyVerticalScroll/HideBodyVerticalScroll.js +4 -4
- package/internal/HideBodyVerticalScroll/HideBodyVerticalScroll/HideBodyVerticalScroll.js.map +1 -1
- package/internal/InputLikeText/InputLikeText/InputLikeText.js +2 -1
- package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
- package/internal/PopupMenu/PopupMenu/PopupMenu.js +2 -2
- package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
- package/internal/RenderContainer/RenderContainer/RenderContainer.js +2 -1
- package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
- package/internal/ThemePlayground/darkTheme/darkTheme.js +3 -3
- package/internal/ThemePlayground/darkTheme/darkTheme.js.map +1 -1
- package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/internal/icons/CrossIcon/CrossIcon.js +2 -1
- package/internal/icons/CrossIcon/CrossIcon.js.map +1 -1
- package/internal/themes/DefaultTheme/DefaultTheme.js +83 -9
- package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
- package/internal/themes/DefaultTheme.d.ts +16 -5
- package/internal/themes/FlatTheme/FlatTheme.js +0 -1
- package/internal/themes/FlatTheme/FlatTheme.js.map +1 -1
- package/internal/themes/FlatTheme.d.ts +0 -1
- package/internal/themes/Theme8px/Theme8px.js +1 -1
- package/internal/themes/Theme8px/Theme8px.js.map +1 -1
- package/lib/Upgrades/Upgrades.js +13 -0
- package/lib/Upgrades/Upgrades.js.map +1 -1
- package/lib/Upgrades.d.ts +2 -0
- package/lib/events/keyboard/identifiers/identifiers.js +10 -1
- package/lib/events/keyboard/identifiers/identifiers.js.map +1 -1
- package/lib/events/keyboard/identifiers.d.ts +1 -0
- package/lib/locale/LOCALECONTEXT.md +1 -1
- package/lib/styles/ColorFunctions/ColorFunctions.js +1 -1
- package/lib/styles/ColorFunctions/ColorFunctions.js.map +1 -1
- package/lib/theming/Emotion/Emotion.js +1 -1
- package/lib/theming/Emotion/Emotion.js.map +1 -1
- package/lib/theming/ThemeContext.md +1 -1
- package/lib/utils/utils.js +10 -0
- package/lib/utils/utils.js.map +1 -1
- package/lib/utils.d.ts +7 -0
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.SidePageHeader = void 0;var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
|
|
1
|
+
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.SidePageHeader = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
|
|
2
2
|
|
|
3
3
|
var _Sticky = require("../Sticky");
|
|
4
4
|
var _CrossIcon = require("../../internal/icons/CrossIcon");
|
|
@@ -7,6 +7,7 @@ var _ThemeContext = require("../../lib/theming/ThemeContext");
|
|
|
7
7
|
|
|
8
8
|
var _CommonWrapper = require("../../internal/CommonWrapper");
|
|
9
9
|
var _Emotion = require("../../lib/theming/Emotion");
|
|
10
|
+
var _keyListener = require("../../lib/events/keyListener");
|
|
10
11
|
|
|
11
12
|
var _SidePage = require("./SidePage.styles");
|
|
12
13
|
var _SidePageContext = require("./SidePageContext");
|
|
@@ -19,6 +20,7 @@ var _SidePageContext = require("./SidePageContext");
|
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
|
|
23
|
+
|
|
22
24
|
/**
|
|
23
25
|
* Шапка сайдпейджа
|
|
24
26
|
*
|
|
@@ -31,7 +33,8 @@ SidePageHeader = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.d
|
|
|
31
33
|
context = _this.context;_this.
|
|
32
34
|
|
|
33
35
|
state = {
|
|
34
|
-
isReadyToFix: false
|
|
36
|
+
isReadyToFix: false,
|
|
37
|
+
focusedByTab: false };_this.
|
|
35
38
|
|
|
36
39
|
|
|
37
40
|
theme = void 0;_this.
|
|
@@ -93,7 +96,7 @@ SidePageHeader = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.d
|
|
|
93
96
|
renderHeader = function (fixed) {var _cx, _cx2;if (fixed === void 0) {fixed = false;}
|
|
94
97
|
return /*#__PURE__*/(
|
|
95
98
|
_react.default.createElement("div", { className: (0, _Emotion.cx)(_SidePage.styles.header(_this.theme), (_cx = {}, _cx[_SidePage.styles.headerFixed(_this.theme)] = fixed, _cx)) },
|
|
96
|
-
_this.renderClose(), /*#__PURE__*/
|
|
99
|
+
_this.renderClose(fixed), /*#__PURE__*/
|
|
97
100
|
_react.default.createElement("div", { className: (0, _Emotion.cx)(_SidePage.styles.title(_this.theme), (_cx2 = {}, _cx2[_SidePage.styles.titleFixed()] = fixed, _cx2)) },
|
|
98
101
|
(0, _utils.isFunction)(_this.props.children) ? _this.props.children(fixed) : _this.props.children)));
|
|
99
102
|
|
|
@@ -101,46 +104,53 @@ SidePageHeader = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.d
|
|
|
101
104
|
|
|
102
105
|
};_this.
|
|
103
106
|
|
|
104
|
-
|
|
107
|
+
renderClose = function (fixed) {
|
|
108
|
+
var stickyOffset = parseInt(_this.theme.sidePageHeaderStickyOffset);
|
|
109
|
+
|
|
110
|
+
return /*#__PURE__*/(
|
|
111
|
+
_react.default.createElement("div", { className: (0, _Emotion.cx)(_SidePage.styles.wrapperClose(_this.theme), fixed && _SidePage.styles.fixed(_this.theme)) }, /*#__PURE__*/
|
|
112
|
+
_react.default.createElement(_Sticky.Sticky, { side: "top", offset: stickyOffset }, /*#__PURE__*/
|
|
105
113
|
_react.default.createElement(_SidePageContext.SidePageContext.Consumer, null,
|
|
106
|
-
function (_ref) {var _cx3
|
|
107
|
-
_react.default.createElement("
|
|
114
|
+
function (_ref) {var _cx3;var requestClose = _ref.requestClose;return /*#__PURE__*/(
|
|
115
|
+
_react.default.createElement("button", {
|
|
108
116
|
className: (0, _Emotion.cx)(_SidePage.styles.close(_this.theme), (_cx3 = {}, _cx3[
|
|
109
|
-
_SidePage.styles.
|
|
117
|
+
_SidePage.styles.closeFocus(_this.theme)] = _this.state.focusedByTab, _cx3)),
|
|
110
118
|
|
|
119
|
+
onFocus: _this.handleFocus,
|
|
120
|
+
onBlur: _this.handleBlur,
|
|
111
121
|
onClick: requestClose,
|
|
112
|
-
"data-tid": "SidePage__close"
|
|
122
|
+
"data-tid": "SidePage__close",
|
|
123
|
+
tabIndex: 0 }, /*#__PURE__*/
|
|
113
124
|
|
|
114
|
-
_react.default.createElement(
|
|
115
|
-
className: (0, _Emotion.cx)(_SidePage.styles.closeIcon(_this.theme), (_cx4 = {}, _cx4[
|
|
116
|
-
_SidePage.styles.fixed(_this.theme)] = fixed, _cx4)) }, /*#__PURE__*/
|
|
125
|
+
_react.default.createElement(_CrossIcon.CrossIcon, null)));}))));
|
|
117
126
|
|
|
118
127
|
|
|
119
|
-
_react.default.createElement(_CrossIcon.CrossIcon, null))));}));};_this.
|
|
120
128
|
|
|
121
129
|
|
|
122
130
|
|
|
123
131
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
renderClose = function () {
|
|
127
|
-
var stickyOffset = parseInt(_this.theme.sidePageHeaderStickyOffset);
|
|
128
|
-
|
|
129
|
-
return /*#__PURE__*/(
|
|
130
|
-
_react.default.createElement(_Sticky.Sticky, { side: "top", offset: stickyOffset },
|
|
131
|
-
_this.renderCloseContent));
|
|
132
|
-
|
|
133
|
-
|
|
134
132
|
};_this.
|
|
135
133
|
|
|
136
134
|
updateReadyToFix = function () {
|
|
137
135
|
if (_this.wrapper) {
|
|
138
136
|
var wrapperScrolledUp = _this.wrapper.getBoundingClientRect().top;
|
|
139
137
|
var isReadyToFix = _this.regularHeight + wrapperScrolledUp <= _this.fixedHeaderHeight;
|
|
140
|
-
_this.setState(function (state) {return state.isReadyToFix !== isReadyToFix ? { isReadyToFix: isReadyToFix } : state;});
|
|
138
|
+
_this.setState(function (state) {return state.isReadyToFix !== isReadyToFix ? (0, _extends2.default)({}, state, { isReadyToFix: isReadyToFix }) : state;});
|
|
141
139
|
}
|
|
142
140
|
};_this.
|
|
143
141
|
|
|
144
142
|
wrapperRef = function (el) {
|
|
145
143
|
_this.wrapper = el;
|
|
144
|
+
};_this.
|
|
145
|
+
|
|
146
|
+
handleFocus = function () {
|
|
147
|
+
requestAnimationFrame(function () {
|
|
148
|
+
if (_keyListener.keyListener.isTabPressed) {
|
|
149
|
+
_this.setState({ focusedByTab: true });
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
};_this.
|
|
153
|
+
|
|
154
|
+
handleBlur = function () {
|
|
155
|
+
_this.setState({ focusedByTab: false });
|
|
146
156
|
};return _this;}var _proto = SidePageHeader.prototype;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var isReadyToFix = this.state.isReadyToFix;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement("div", { ref: this.wrapperRef }, isReadyToFix ? /*#__PURE__*/_react.default.createElement(_Sticky.Sticky, { side: "top" }, this.renderHeader) : this.renderHeader()));};(0, _createClass2.default)(SidePageHeader, [{ key: "regularHeight", get: function get() {var isReadyToFix = this.state.isReadyToFix;if (!this.wrapper) {return 0;}if (!isReadyToFix) {this.lastRegularHeight = this.wrapper.getBoundingClientRect().height;}return this.lastRegularHeight;} }, { key: "fixedHeaderHeight", get: function get() {var theme = this.theme;return parseInt(theme.sidePageHeaderFixedLineHeight) + parseInt(theme.sidePageHeaderFixedPaddingY) * 2;} }]);return SidePageHeader;}(_react.default.Component);exports.SidePageHeader = SidePageHeader;SidePageHeader.__KONTUR_REACT_UI__ = 'SidePageHeader';SidePageHeader.contextType = _SidePageContext.SidePageContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["SidePageHeader.tsx"],"names":["SidePageHeader","context","state","isReadyToFix","theme","wrapper","lastRegularHeight","componentDidMount","window","addEventListener","update","setHasHeader","componentWillUnmount","removeEventListener","updateReadyToFix","renderHeader","fixed","styles","header","headerFixed","renderClose","title","titleFixed","props","children","
|
|
1
|
+
{"version":3,"sources":["SidePageHeader.tsx"],"names":["SidePageHeader","context","state","isReadyToFix","focusedByTab","theme","wrapper","lastRegularHeight","componentDidMount","window","addEventListener","update","setHasHeader","componentWillUnmount","removeEventListener","updateReadyToFix","renderHeader","fixed","styles","header","headerFixed","renderClose","title","titleFixed","props","children","stickyOffset","parseInt","sidePageHeaderStickyOffset","wrapperClose","requestClose","close","closeFocus","handleFocus","handleBlur","wrapperScrolledUp","getBoundingClientRect","top","regularHeight","fixedHeaderHeight","setState","wrapperRef","el","requestAnimationFrame","keyListener","isTabPressed","render","renderMain","height","sidePageHeaderFixedLineHeight","sidePageHeaderFixedPaddingY","React","Component","__KONTUR_REACT_UI__","contextType","SidePageContext"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Sticky } from '../Sticky';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { isFunction } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { keyListener } from '../../lib/events/keyListener';\n\nimport { styles } from './SidePage.styles';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\n\nexport interface SidePageHeaderProps extends CommonProps {\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n}\n\nexport interface SidePageHeaderState {\n isReadyToFix: boolean;\n focusedByTab: boolean;\n}\n\n/**\n * Шапка сайдпейджа\n *\n * @visibleName SidePage.Header\n */\nexport class SidePageHeader extends React.Component<SidePageHeaderProps, SidePageHeaderState> {\n public static __KONTUR_REACT_UI__ = 'SidePageHeader';\n\n public static contextType = SidePageContext;\n public context: SidePageContextType = this.context;\n\n public state = {\n isReadyToFix: false,\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private wrapper: HTMLElement | null = null;\n private lastRegularHeight = 0;\n\n public get regularHeight(): number {\n const { isReadyToFix } = this.state;\n if (!this.wrapper) {\n return 0;\n }\n if (!isReadyToFix) {\n this.lastRegularHeight = this.wrapper.getBoundingClientRect().height;\n }\n return this.lastRegularHeight;\n }\n\n public get fixedHeaderHeight(): number {\n const { theme } = this;\n return parseInt(theme.sidePageHeaderFixedLineHeight) + parseInt(theme.sidePageHeaderFixedPaddingY) * 2;\n }\n\n public componentDidMount = () => {\n window.addEventListener('scroll', this.update, true);\n this.context.setHasHeader?.();\n };\n\n public componentWillUnmount = () => {\n window.removeEventListener('scroll', this.update, true);\n this.context.setHasHeader?.(false);\n };\n\n public update = () => {\n this.updateReadyToFix();\n };\n\n public render(): JSX.Element {\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 { isReadyToFix } = this.state;\n return (\n <CommonWrapper {...this.props}>\n <div ref={this.wrapperRef}>\n {isReadyToFix ? <Sticky side=\"top\">{this.renderHeader}</Sticky> : this.renderHeader()}\n </div>\n </CommonWrapper>\n );\n }\n\n private renderHeader = (fixed = false) => {\n return (\n <div className={cx(styles.header(this.theme), { [styles.headerFixed(this.theme)]: fixed })}>\n {this.renderClose(fixed)}\n <div className={cx(styles.title(this.theme), { [styles.titleFixed()]: fixed })}>\n {isFunction(this.props.children) ? this.props.children(fixed) : this.props.children}\n </div>\n </div>\n );\n };\n\n private renderClose = (fixed: boolean) => {\n const stickyOffset = parseInt(this.theme.sidePageHeaderStickyOffset);\n\n return (\n <div className={cx(styles.wrapperClose(this.theme), fixed && styles.fixed(this.theme))}>\n <Sticky side=\"top\" offset={stickyOffset}>\n <SidePageContext.Consumer>\n {({ requestClose }) => (\n <button\n className={cx(styles.close(this.theme), {\n [styles.closeFocus(this.theme)]: this.state.focusedByTab,\n })}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onClick={requestClose}\n data-tid=\"SidePage__close\"\n tabIndex={0}\n >\n <CrossIcon />\n </button>\n )}\n </SidePageContext.Consumer>\n </Sticky>\n </div>\n );\n };\n\n private updateReadyToFix = () => {\n if (this.wrapper) {\n const wrapperScrolledUp = this.wrapper.getBoundingClientRect().top;\n const isReadyToFix = this.regularHeight + wrapperScrolledUp <= this.fixedHeaderHeight;\n this.setState((state) => (state.isReadyToFix !== isReadyToFix ? { ...state, isReadyToFix } : state));\n }\n };\n\n private wrapperRef = (el: HTMLElement | null) => {\n this.wrapper = el;\n };\n\n private handleFocus = () => {\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n };\n\n private handleBlur = () => {\n this.setState({ focusedByTab: false });\n };\n}\n"]}
|
|
@@ -217,4 +217,4 @@ Switcher = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
217
217
|
default:
|
|
218
218
|
return _Switcher.styles.labelSmall(_this.theme);}
|
|
219
219
|
|
|
220
|
-
};return _this;}var _proto = Switcher.prototype;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = (0, _switcherTheme.getSwitcherTheme)(theme);return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: _this2.theme }, _this2.renderMain());});};_proto.renderMain = function renderMain() {var _cx;var listClassName = (0, _Emotion.cx)((_cx = {}, _cx[_Switcher.styles.error(this.theme)] = !!this.props.error, _cx));var inputProps = { type: 'checkbox', onKeyDown: this.handleKey, onFocus: this._handleFocus, onBlur: this._handleBlur, className: _Switcher.styles.input() };var lableClassName = (0, _Emotion.cx)(_Switcher.styles.label(), this.getLabelSizeClassName());return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement("div", null, this.props.label ? /*#__PURE__*/_react.default.createElement("div", { className: lableClassName }, this.props.label) : null, /*#__PURE__*/_react.default.createElement("div", { className: _Switcher.styles.wrap() }, /*#__PURE__*/_react.default.createElement("input", inputProps), /*#__PURE__*/_react.default.createElement("div", { className: listClassName }, /*#__PURE__*/_react.default.createElement(_Group.Group, null, this._renderItems())))));};return Switcher;}(_react.default.Component);exports.Switcher = Switcher;Switcher.__KONTUR_REACT_UI__ = 'Switcher';Switcher.propTypes = { error: _propTypes.default.bool, disabled: _propTypes.default.bool, items: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.string), _propTypes.default.arrayOf(_propTypes.default.shape({ label: _propTypes.default.string, value: _propTypes.default.string }))]).isRequired, label: _propTypes.default.string, value: _propTypes.default.string, onValueChange: _propTypes.default.func };
|
|
220
|
+
};return _this;}var _proto = Switcher.prototype;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = (0, _switcherTheme.getSwitcherTheme)(theme);return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: _this2.theme }, _this2.renderMain());});};_proto.renderMain = function renderMain() {var _cx;var listClassName = (0, _Emotion.cx)((_cx = {}, _cx[_Switcher.styles.error(this.theme)] = !!this.props.error, _cx));var inputProps = { type: 'checkbox', onKeyDown: this.handleKey, onFocus: this._handleFocus, onBlur: this._handleBlur, className: _Switcher.styles.input() };var lableClassName = (0, _Emotion.cx)(_Switcher.styles.label(this.theme), this.getLabelSizeClassName());return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement("div", null, this.props.label ? /*#__PURE__*/_react.default.createElement("div", { className: lableClassName }, this.props.label) : null, /*#__PURE__*/_react.default.createElement("div", { className: _Switcher.styles.wrap() }, /*#__PURE__*/_react.default.createElement("input", inputProps), /*#__PURE__*/_react.default.createElement("div", { className: listClassName }, /*#__PURE__*/_react.default.createElement(_Group.Group, null, this._renderItems())))));};return Switcher;}(_react.default.Component);exports.Switcher = Switcher;Switcher.__KONTUR_REACT_UI__ = 'Switcher';Switcher.propTypes = { error: _propTypes.default.bool, disabled: _propTypes.default.bool, items: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.string), _propTypes.default.arrayOf(_propTypes.default.shape({ label: _propTypes.default.string, value: _propTypes.default.string }))]).isRequired, label: _propTypes.default.string, value: _propTypes.default.string, onValueChange: _propTypes.default.func };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Switcher.tsx"],"names":["Switcher","state","focusedIndex","theme","selectItem","value","props","onValueChange","_extractPropsFromItem","item","label","_extractValuesFromItems","items","map","move","step","selectedIndex","length","_focus","index","setState","handleKey","e","preventDefault","_handleFocus","currentIndex","indexOf","_handleBlur","_renderItems","i","buttonProps","checked","visuallyFocused","onClick","disableFocus","size","disabled","getLabelSizeClassName","styles","labelLarge","labelMedium","labelSmall","render","renderMain","listClassName","error","inputProps","type","onKeyDown","onFocus","onBlur","className","input","lableClassName","wrap","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","oneOfType","arrayOf","string","shape","isRequired","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyArrowHorizontal, isKeyArrowLeft, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { Group } from '../Group';\nimport { Button, ButtonSize } from '../Button';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './Switcher.styles';\nimport { getSwitcherTheme } from './switcherTheme';\n\nexport type SwitcherSize = ButtonSize;\n\nexport interface SwitcherProps extends CommonProps {\n /**\n * Список строк или список элементов типа `{ label: string, value: string }`\n */\n items: Array<string | SwitcherItem>;\n\n value?: string;\n\n onValueChange?: (value: string) => void;\n\n label?: string;\n\n error?: boolean;\n\n /** Размер */\n size?: SwitcherSize;\n\n disabled?: boolean;\n}\n\nexport interface SwitcherState {\n focusedIndex: Nullable<number>;\n}\n\ninterface SwitcherItem {\n label: string;\n value: string;\n}\n\nexport class Switcher extends React.Component<SwitcherProps, SwitcherState> {\n public static __KONTUR_REACT_UI__ = 'Switcher';\n\n public static propTypes = {\n error: PropTypes.bool,\n disabled: PropTypes.bool,\n items: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.string,\n }),\n ),\n ]).isRequired,\n label: PropTypes.string,\n value: PropTypes.string,\n onValueChange: PropTypes.func,\n };\n\n public state: SwitcherState = {\n focusedIndex: null,\n };\n\n private theme!: Theme;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getSwitcherTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const listClassName = cx({\n [styles.error(this.theme)]: !!this.props.error,\n });\n\n const inputProps = {\n type: 'checkbox',\n onKeyDown: this.handleKey,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n className: styles.input(),\n };\n\n const lableClassName = cx(styles.label(), this.getLabelSizeClassName());\n\n return (\n <CommonWrapper {...this.props}>\n <div>\n {this.props.label ? <div className={lableClassName}>{this.props.label}</div> : null}\n <div className={styles.wrap()}>\n <input {...inputProps} />\n <div className={listClassName}>\n <Group>{this._renderItems()}</Group>\n </div>\n </div>\n </div>\n </CommonWrapper>\n );\n }\n\n private selectItem = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private _extractPropsFromItem = (item: string | SwitcherItem): SwitcherItem => {\n return typeof item === 'object' ? item : { label: item, value: item };\n };\n\n private _extractValuesFromItems = (): string[] => {\n return this.props.items.map((item) => {\n const { value } = this._extractPropsFromItem(item);\n return value;\n });\n };\n\n private move = (step: number) => {\n let selectedIndex = this.state.focusedIndex;\n\n if (typeof selectedIndex !== 'number') {\n return;\n }\n\n const items = this._extractValuesFromItems();\n\n selectedIndex += step;\n\n if (selectedIndex < 0) {\n selectedIndex = items.length - 1;\n } else if (selectedIndex >= items.length) {\n selectedIndex = 0;\n }\n\n this._focus(selectedIndex);\n };\n\n private _focus = (index: number) => {\n this.setState({ focusedIndex: index });\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const focusedIndex = this.state.focusedIndex;\n if (typeof focusedIndex !== 'number') {\n return;\n }\n\n if (isKeyEnter(e)) {\n if (this.props.onValueChange) {\n const { value } = this._extractPropsFromItem(this.props.items[focusedIndex]);\n this.selectItem(value);\n }\n return;\n }\n\n if (isKeyArrowHorizontal(e)) {\n e.preventDefault();\n this.move(isKeyArrowLeft(e) ? -1 : 1);\n }\n };\n\n private _handleFocus = () => {\n const { value } = this.props;\n\n const items = this._extractValuesFromItems();\n const currentIndex = [...items].indexOf(value as string);\n const index = currentIndex > -1 ? currentIndex : 0;\n\n this.setState({ focusedIndex: index });\n };\n\n private _handleBlur = () => {\n this.setState({ focusedIndex: null });\n };\n\n private _renderItems = () => {\n return this.props.items.map((item, i) => {\n const { label, value } = this._extractPropsFromItem(item);\n const buttonProps = {\n checked: this.props.value === value,\n visuallyFocused: this.state.focusedIndex === i,\n onClick: () => {\n this.selectItem(value);\n },\n disableFocus: true,\n size: this.props.size,\n disabled: this.props.disabled,\n };\n return (\n <Button key={value} {...buttonProps}>\n {label}\n </Button>\n );\n });\n };\n\n private getLabelSizeClassName = (): string => {\n switch (this.props.size) {\n case 'large':\n return styles.labelLarge(this.theme);\n case 'medium':\n return styles.labelMedium(this.theme);\n case 'small':\n default:\n return styles.labelSmall(this.theme);\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Switcher.tsx"],"names":["Switcher","state","focusedIndex","theme","selectItem","value","props","onValueChange","_extractPropsFromItem","item","label","_extractValuesFromItems","items","map","move","step","selectedIndex","length","_focus","index","setState","handleKey","e","preventDefault","_handleFocus","currentIndex","indexOf","_handleBlur","_renderItems","i","buttonProps","checked","visuallyFocused","onClick","disableFocus","size","disabled","getLabelSizeClassName","styles","labelLarge","labelMedium","labelSmall","render","renderMain","listClassName","error","inputProps","type","onKeyDown","onFocus","onBlur","className","input","lableClassName","wrap","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","oneOfType","arrayOf","string","shape","isRequired","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyArrowHorizontal, isKeyArrowLeft, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { Group } from '../Group';\nimport { Button, ButtonSize } from '../Button';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './Switcher.styles';\nimport { getSwitcherTheme } from './switcherTheme';\n\nexport type SwitcherSize = ButtonSize;\n\nexport interface SwitcherProps extends CommonProps {\n /**\n * Список строк или список элементов типа `{ label: string, value: string }`\n */\n items: Array<string | SwitcherItem>;\n\n value?: string;\n\n onValueChange?: (value: string) => void;\n\n label?: string;\n\n error?: boolean;\n\n /** Размер */\n size?: SwitcherSize;\n\n disabled?: boolean;\n}\n\nexport interface SwitcherState {\n focusedIndex: Nullable<number>;\n}\n\ninterface SwitcherItem {\n label: string;\n value: string;\n}\n\nexport class Switcher extends React.Component<SwitcherProps, SwitcherState> {\n public static __KONTUR_REACT_UI__ = 'Switcher';\n\n public static propTypes = {\n error: PropTypes.bool,\n disabled: PropTypes.bool,\n items: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.string,\n }),\n ),\n ]).isRequired,\n label: PropTypes.string,\n value: PropTypes.string,\n onValueChange: PropTypes.func,\n };\n\n public state: SwitcherState = {\n focusedIndex: null,\n };\n\n private theme!: Theme;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getSwitcherTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const listClassName = cx({\n [styles.error(this.theme)]: !!this.props.error,\n });\n\n const inputProps = {\n type: 'checkbox',\n onKeyDown: this.handleKey,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n className: styles.input(),\n };\n\n const lableClassName = cx(styles.label(this.theme), this.getLabelSizeClassName());\n\n return (\n <CommonWrapper {...this.props}>\n <div>\n {this.props.label ? <div className={lableClassName}>{this.props.label}</div> : null}\n <div className={styles.wrap()}>\n <input {...inputProps} />\n <div className={listClassName}>\n <Group>{this._renderItems()}</Group>\n </div>\n </div>\n </div>\n </CommonWrapper>\n );\n }\n\n private selectItem = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private _extractPropsFromItem = (item: string | SwitcherItem): SwitcherItem => {\n return typeof item === 'object' ? item : { label: item, value: item };\n };\n\n private _extractValuesFromItems = (): string[] => {\n return this.props.items.map((item) => {\n const { value } = this._extractPropsFromItem(item);\n return value;\n });\n };\n\n private move = (step: number) => {\n let selectedIndex = this.state.focusedIndex;\n\n if (typeof selectedIndex !== 'number') {\n return;\n }\n\n const items = this._extractValuesFromItems();\n\n selectedIndex += step;\n\n if (selectedIndex < 0) {\n selectedIndex = items.length - 1;\n } else if (selectedIndex >= items.length) {\n selectedIndex = 0;\n }\n\n this._focus(selectedIndex);\n };\n\n private _focus = (index: number) => {\n this.setState({ focusedIndex: index });\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const focusedIndex = this.state.focusedIndex;\n if (typeof focusedIndex !== 'number') {\n return;\n }\n\n if (isKeyEnter(e)) {\n if (this.props.onValueChange) {\n const { value } = this._extractPropsFromItem(this.props.items[focusedIndex]);\n this.selectItem(value);\n }\n return;\n }\n\n if (isKeyArrowHorizontal(e)) {\n e.preventDefault();\n this.move(isKeyArrowLeft(e) ? -1 : 1);\n }\n };\n\n private _handleFocus = () => {\n const { value } = this.props;\n\n const items = this._extractValuesFromItems();\n const currentIndex = [...items].indexOf(value as string);\n const index = currentIndex > -1 ? currentIndex : 0;\n\n this.setState({ focusedIndex: index });\n };\n\n private _handleBlur = () => {\n this.setState({ focusedIndex: null });\n };\n\n private _renderItems = () => {\n return this.props.items.map((item, i) => {\n const { label, value } = this._extractPropsFromItem(item);\n const buttonProps = {\n checked: this.props.value === value,\n visuallyFocused: this.state.focusedIndex === i,\n onClick: () => {\n this.selectItem(value);\n },\n disableFocus: true,\n size: this.props.size,\n disabled: this.props.disabled,\n };\n return (\n <Button key={value} {...buttonProps}>\n {label}\n </Button>\n );\n });\n };\n\n private getLabelSizeClassName = (): string => {\n switch (this.props.size) {\n case 'large':\n return styles.labelLarge(this.theme);\n case 'medium':\n return styles.labelMedium(this.theme);\n case 'small':\n default:\n return styles.labelSmall(this.theme);\n }\n };\n}\n"]}
|
|
@@ -18,8 +18,9 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
18
18
|
|
|
19
19
|
},
|
|
20
20
|
|
|
21
|
-
label: function label() {
|
|
22
|
-
return (0, _Emotion.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["\n vertical-align: middle;\n display: inline-block;\n "]))
|
|
21
|
+
label: function label(t) {
|
|
22
|
+
return (0, _Emotion.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["\n color: ", ";\n vertical-align: middle;\n display: inline-block;\n "])),
|
|
23
|
+
t.switcherTextColor);
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Switcher.styles.ts"],"names":["styles","wrap","css","input","label","
|
|
1
|
+
{"version":3,"sources":["Switcher.styles.ts"],"names":["styles","wrap","css","input","label","t","switcherTextColor","labelSmall","switcherLabelGapSmall","switcherLabelFontSizeSmall","switcherLabelLineHeightSmall","labelMedium","switcherLabelGapMedium","switcherLabelFontSizeMedium","switcherLabelLineHeightMedium","labelLarge","switcherLabelGapLarge","switcherLabelFontSizeLarge","switcherLabelLineHeightLarge","error","switcherOutlineWidth","borderColorError"],"mappings":"4QAAA,oD;;;AAGO,IAAMA,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,kBAC1B;AACL,eAAOC,YAAP;;;;AAID,GANgC;;AAQjCC,EAAAA,KARiC,mBAQzB;AACN,eAAOD,YAAP;;;;;;AAMD,GAfgC;;AAiBjCE,EAAAA,KAjBiC,iBAiB3BC,CAjB2B,EAiBjB;AACd,eAAOH,YAAP;AACWG,IAAAA,CAAC,CAACC,iBADb;;;;AAKD,GAvBgC;;AAyBjCC,EAAAA,UAzBiC,sBAyBtBF,CAzBsB,EAyBZ;AACnB,eAAOH,YAAP;AACkBG,IAAAA,CAAC,CAACG,qBADpB;AAEeH,IAAAA,CAAC,CAACI,0BAFjB;AAGiBJ,IAAAA,CAAC,CAACK,4BAHnB;;AAKD,GA/BgC;;AAiCjCC,EAAAA,WAjCiC,uBAiCrBN,CAjCqB,EAiCX;AACpB,eAAOH,YAAP;AACkBG,IAAAA,CAAC,CAACO,sBADpB;AAEeP,IAAAA,CAAC,CAACQ,2BAFjB;AAGiBR,IAAAA,CAAC,CAACS,6BAHnB;;AAKD,GAvCgC;;AAyCjCC,EAAAA,UAzCiC,sBAyCtBV,CAzCsB,EAyCZ;AACnB,eAAOH,YAAP;AACkBG,IAAAA,CAAC,CAACW,qBADpB;AAEeX,IAAAA,CAAC,CAACY,0BAFjB;AAGiBZ,IAAAA,CAAC,CAACa,4BAHnB;;AAKD,GA/CgC;;AAiDjCC,EAAAA,KAjDiC,iBAiD3Bd,CAjD2B,EAiDjB;AACd,eAAOH,YAAP;;AAEsBG,IAAAA,CAAC,CAACe,oBAFxB,EAEgDf,CAAC,CAACgB,gBAFlD;;AAID,GAtDgC,EAAb,CAAf,C","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const styles = memoizeStyle({\n wrap() {\n return css`\n display: inline-block;\n vertical-align: middle;\n `;\n },\n\n input() {\n return css`\n height: 0;\n opacity: 0;\n position: absolute;\n width: 0;\n `;\n },\n\n label(t: Theme) {\n return css`\n color: ${t.switcherTextColor};\n vertical-align: middle;\n display: inline-block;\n `;\n },\n\n labelSmall(t: Theme) {\n return css`\n margin-right: ${t.switcherLabelGapSmall};\n font-size: ${t.switcherLabelFontSizeSmall};\n line-height: ${t.switcherLabelLineHeightSmall};\n `;\n },\n\n labelMedium(t: Theme) {\n return css`\n margin-right: ${t.switcherLabelGapMedium};\n font-size: ${t.switcherLabelFontSizeMedium};\n line-height: ${t.switcherLabelLineHeightMedium};\n `;\n },\n\n labelLarge(t: Theme) {\n return css`\n margin-right: ${t.switcherLabelGapLarge};\n font-size: ${t.switcherLabelFontSizeLarge};\n line-height: ${t.switcherLabelLineHeightLarge};\n `;\n },\n\n error(t: Theme) {\n return css`\n border-radius: 2px;\n box-shadow: 0 0 0 ${t.switcherOutlineWidth} ${t.borderColorError};\n `;\n },\n});\n"]}
|
|
@@ -12,10 +12,10 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
12
12
|
root: function root(t) {
|
|
13
13
|
var paddingTop = (0, _ThemeHelpers.is8pxTheme)(t) ? t.tabPaddingY : (0, _DimensionFunctions.shift)(t.tabPaddingY, '-1px');
|
|
14
14
|
var paddingBottom = (0, _ThemeHelpers.is8pxTheme)(t) ? "calc(" + t.tabPaddingY + " - " + t.tabBorderWidth + ")" : (0, _DimensionFunctions.shift)(t.tabPaddingY, '1px');
|
|
15
|
-
return (0, _Emotion.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["\n border-bottom: ", " solid transparent;\n box-sizing: border-box;\n color:
|
|
15
|
+
return (0, _Emotion.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteralLoose2.default)(["\n border-bottom: ", " solid transparent;\n box-sizing: border-box;\n color: ", ";\n cursor: pointer;\n display: inline-block;\n font-size: ", ";\n line-height: ", ";\n margin-left: ", ";\n margin-right: ", ";\n padding-bottom: ", ";\n padding-top: ", ";\n position: relative;\n text-decoration: inherit;\n transition: border-bottom 0.2s ease-out;\n\n &:hover {\n outline: inherit;\n border-bottom: ", " solid ", ";\n }\n\n &:focus {\n outline: inherit;\n }\n "])),
|
|
16
16
|
t.tabBorderWidth,
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
t.tabTextColorDefault,
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
t.tabFontSize,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Tab.styles.ts"],"names":["globalClasses","focus","styles","root","t","paddingTop","tabPaddingY","paddingBottom","tabBorderWidth","css","tabFontSize","tabLineHeight","tabPaddingX","tabColorHover","vertical","tabOutlineWidth","tabColorFocus","disabled","ColorFunctions","red","
|
|
1
|
+
{"version":3,"sources":["Tab.styles.ts"],"names":["globalClasses","focus","styles","root","t","paddingTop","tabPaddingY","paddingBottom","tabBorderWidth","css","tabTextColorDefault","tabFontSize","tabLineHeight","tabPaddingX","tabColorHover","vertical","tabOutlineWidth","tabColorFocus","disabled","ColorFunctions","red","green","blue","active","horizontalStyles","primary","tabColorHoverPrimary","success","tabColorHoverSuccess","warning","tabColorHoverWarning","error","tabColorHoverError","verticalStyles"],"mappings":"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","sourcesContent":["import { css, memoizeStyle, prefix } from '../../lib/theming/Emotion';\nimport { shift } from '../../lib/styles/DimensionFunctions';\nimport * as ColorFunctions from '../../lib/styles/ColorFunctions';\nimport { Theme } from '../../lib/theming/Theme';\nimport { is8pxTheme } from '../../lib/theming/ThemeHelpers';\n\nexport const globalClasses = prefix('tab')({\n focus: 'focus',\n});\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n const paddingTop = is8pxTheme(t) ? t.tabPaddingY : shift(t.tabPaddingY, '-1px');\n const paddingBottom = is8pxTheme(t) ? `calc(${t.tabPaddingY} - ${t.tabBorderWidth})` : shift(t.tabPaddingY, '1px');\n return css`\n border-bottom: ${t.tabBorderWidth} solid transparent;\n box-sizing: border-box;\n color: ${t.tabTextColorDefault};\n cursor: pointer;\n display: inline-block;\n font-size: ${t.tabFontSize};\n line-height: ${t.tabLineHeight};\n margin-left: ${t.tabPaddingX};\n margin-right: ${t.tabPaddingX};\n padding-bottom: ${paddingBottom};\n padding-top: ${paddingTop};\n position: relative;\n text-decoration: inherit;\n transition: border-bottom 0.2s ease-out;\n\n &:hover {\n outline: inherit;\n border-bottom: ${t.tabBorderWidth} solid ${t.tabColorHover};\n }\n\n &:focus {\n outline: inherit;\n }\n `;\n },\n\n vertical(t: Theme) {\n return css`\n border-bottom: none;\n border-left: ${t.tabBorderWidth} solid transparent;\n display: block;\n margin-left: 0;\n margin-right: 0;\n padding-left: ${shift(t.tabPaddingX, `-${t.tabBorderWidth}`)};\n padding-right: ${t.tabPaddingX};\n\n &:hover {\n border-bottom: none;\n border-left: ${t.tabBorderWidth} solid ${t.tabColorHover};\n }\n\n .${globalClasses.focus} {\n bottom: 0;\n left: -${t.tabBorderWidth};\n right: 0;\n }\n `;\n },\n\n focus(t: Theme) {\n return css`\n border: ${t.tabOutlineWidth} solid ${t.tabColorFocus};\n bottom: -${t.tabBorderWidth};\n left: -${t.tabPaddingX};\n position: absolute;\n right: -${t.tabPaddingX};\n top: 0;\n `;\n },\n\n disabled(t: Theme) {\n return css`\n color: rgba(\n ${ColorFunctions.red(t.tabTextColorDefault)},\n ${ColorFunctions.green(t.tabTextColorDefault)},\n ${ColorFunctions.blue(t.tabTextColorDefault)},\n 0.5\n );\n cursor: default;\n `;\n },\n\n active() {\n return css`\n cursor: default;\n `;\n },\n});\n\nexport const horizontalStyles = memoizeStyle({\n active(t: Theme) {\n return css`\n &:hover {\n border-bottom: ${t.tabBorderWidth} solid transparent;\n }\n `;\n },\n\n disabled() {\n return css`\n &:hover {\n border-bottom-color: transparent;\n }\n `;\n },\n\n primary(t: Theme) {\n return css`\n &:hover {\n border-bottom-color: ${t.tabColorHoverPrimary};\n }\n `;\n },\n\n success(t: Theme) {\n return css`\n &:hover {\n border-bottom-color: ${t.tabColorHoverSuccess};\n }\n `;\n },\n\n warning(t: Theme) {\n return css`\n &:hover {\n border-bottom-color: ${t.tabColorHoverWarning};\n }\n `;\n },\n\n error(t: Theme) {\n return css`\n &:hover {\n border-bottom-color: ${t.tabColorHoverError};\n }\n `;\n },\n});\n\nexport const verticalStyles = memoizeStyle({\n active(t: Theme) {\n return css`\n &:hover {\n border-left: ${t.tabBorderWidth} solid transparent;\n }\n `;\n },\n\n disabled() {\n return css`\n &:hover {\n border-left-color: transparent;\n }\n `;\n },\n\n primary(t: Theme) {\n return css`\n &:hover {\n border-left-color: ${t.tabColorHoverPrimary};\n }\n `;\n },\n\n success(t: Theme) {\n return css`\n &:hover {\n border-left-color: ${t.tabColorHoverSuccess};\n }\n `;\n },\n\n warning(t: Theme) {\n return css`\n &:hover {\n border-left-color: ${t.tabColorHoverWarning};\n }\n `;\n },\n\n error(t: Theme) {\n return css`\n &:hover {\n border-left-color: ${t.tabColorHoverError};\n }\n `;\n },\n});\n"]}
|
|
@@ -67,7 +67,6 @@ export interface TextareaProps extends CommonProps, Override<React.TextareaHTMLA
|
|
|
67
67
|
}
|
|
68
68
|
export interface TextareaState {
|
|
69
69
|
polyfillPlaceholder: boolean;
|
|
70
|
-
rows: number | string;
|
|
71
70
|
isCounterVisible: boolean;
|
|
72
71
|
}
|
|
73
72
|
/**
|
|
@@ -130,7 +129,6 @@ export declare class Textarea extends React.Component<TextareaProps, TextareaSta
|
|
|
130
129
|
};
|
|
131
130
|
state: {
|
|
132
131
|
polyfillPlaceholder: boolean;
|
|
133
|
-
rows: number;
|
|
134
132
|
isCounterVisible: boolean;
|
|
135
133
|
};
|
|
136
134
|
private reflowCounter;
|
|
@@ -104,7 +104,6 @@ var AUTORESIZE_THROTTLE_DEFAULT_WAIT = 100;
|
|
|
104
104
|
|
|
105
105
|
|
|
106
106
|
|
|
107
|
-
|
|
108
107
|
|
|
109
108
|
|
|
110
109
|
/**
|
|
@@ -180,7 +179,6 @@ Textarea = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
180
179
|
|
|
181
180
|
state = {
|
|
182
181
|
polyfillPlaceholder: _polyfillPlaceholder.polyfillPlaceholder,
|
|
183
|
-
rows: 1,
|
|
184
182
|
isCounterVisible: false };_this.
|
|
185
183
|
|
|
186
184
|
reflowCounter = function () {
|
|
@@ -264,6 +262,11 @@ Textarea = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
264
262
|
|
|
265
263
|
|
|
266
264
|
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
|
|
267
270
|
|
|
268
271
|
|
|
269
272
|
|
|
@@ -520,7 +523,7 @@ Textarea = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
520
523
|
}
|
|
521
524
|
};return _this;}var _proto = Textarea.prototype;_proto.getAutoResizeThrottleWait = function getAutoResizeThrottleWait(props) {if (props === void 0) {props = this.props;} // NOTE: При отключении анимации остается эффект дергания при авто-ресайзе из-за троттлинга расчета высоты
|
|
522
525
|
// Поэтому выставляем таймаут троттла в ноль. Подробности - https://github.com/skbkontur/retail-ui/issues/2120
|
|
523
|
-
return this.isAnimationsDisabled(props) ? 0 : AUTORESIZE_THROTTLE_DEFAULT_WAIT;};_proto.isAnimationsDisabled = function isAnimationsDisabled(_temp) {var _ref2 = _temp === void 0 ? this.props : _temp,disableAnimations = _ref2.disableAnimations,extraRow = _ref2.extraRow;return disableAnimations || !extraRow;};_proto.componentDidMount = function componentDidMount() {if (this.props.autoResize) {this.autoResize();this.layoutEvents = LayoutEvents.addListener(this.autoResize);}if (this.node && this.props.showLengthCounter && this.textareaObserver) {this.textareaObserver.observe(this.node, { attributes: true });}};_proto.componentWillUnmount = function componentWillUnmount() {if (this.layoutEvents) {this.layoutEvents.remove();}if (this.props.showLengthCounter && this.textareaObserver) {this.textareaObserver.disconnect();}this.cancelDelayedSelectAll();};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {if (this.getAutoResizeThrottleWait() !== this.getAutoResizeThrottleWait(prevProps)) {this.autoResize.cancel();this.autoResize = (0, _lodash.default)(this.autoResizeHandler, this.getAutoResizeThrottleWait());}if (this.props.autoResize && this.props.rows
|
|
526
|
+
return this.isAnimationsDisabled(props) ? 0 : AUTORESIZE_THROTTLE_DEFAULT_WAIT;};_proto.isAnimationsDisabled = function isAnimationsDisabled(_temp) {var _ref2 = _temp === void 0 ? this.props : _temp,disableAnimations = _ref2.disableAnimations,extraRow = _ref2.extraRow;return disableAnimations || !extraRow;};_proto.componentDidMount = function componentDidMount() {if (this.props.autoResize) {this.autoResize();this.layoutEvents = LayoutEvents.addListener(this.autoResize);}if (this.node && this.props.showLengthCounter && this.textareaObserver) {this.textareaObserver.observe(this.node, { attributes: true });}};_proto.componentWillUnmount = function componentWillUnmount() {if (this.layoutEvents) {this.layoutEvents.remove();}if (this.props.showLengthCounter && this.textareaObserver) {this.textareaObserver.disconnect();}this.cancelDelayedSelectAll();};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {if (this.getAutoResizeThrottleWait() !== this.getAutoResizeThrottleWait(prevProps)) {this.autoResize.cancel();this.autoResize = (0, _lodash.default)(this.autoResizeHandler, this.getAutoResizeThrottleWait());}if (this.props.autoResize && (this.props.rows !== prevProps.rows || this.props.maxRows !== prevProps.maxRows || this.props.value !== prevProps.value)) {this.autoResize();}};_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(_CommonWrapper.CommonWrapper, _this2.props, _this2.renderMain);});} /**
|
|
524
527
|
* @public
|
|
525
528
|
*/;_proto.focus = function focus() {if (this.node) {this.node.focus();}} /**
|
|
526
529
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Textarea.tsx"],"names":["DEFAULT_WIDTH","AUTORESIZE_THROTTLE_DEFAULT_WAIT","Textarea","state","polyfillPlaceholder","rows","isCounterVisible","reflowCounter","counter","reflow","theme","selectAllId","node","fakeNode","layoutEvents","textareaObserver","isBrowser","MutationObserver","setSelectionRange","start","end","Error","document","activeElement","focus","selectAll","value","length","delaySelectAll","cancelDelayedSelectAll","raf","cancel","renderMain","props","width","error","warning","autoResize","resize","onCut","onPaste","maxRows","onFocus","selectAllOnFocus","placeholder","onValueChange","showLengthCounter","lengthCounter","counterHelp","extraRow","disableAnimations","textareaProps","rootProps","style","textareaClassNames","styles","textarea","isAnimationsDisabled","textareaStyle","placeholderPolyfill","fakeTextarea","fakeProps","defaultValue","className","fake","readOnly","refFake","maxLength","handleCloseCounterHelp","refCounter","root","undefined","ref","handleChange","handleCut","handlePaste","handleFocus","handleKeyDown","children","setState","e","toString","isBlockEnter","preventDefault","onKeyDown","fieldIsEmpty","target","onChange","element","autoResizeHandler","minRows","parseInt","height","exceededMaxHeight","overflowY","getAutoResizeThrottleWait","event","isIE11","componentDidMount","LayoutEvents","addListener","observe","attributes","componentWillUnmount","remove","disconnect","componentDidUpdate","prevProps","render","blur","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","disabled","oneOfType","string","number","id","name","title","spellCheck","role","tabIndex","func","onMouseEnter","onMouseLeave","onMouseOver","onMouseMove","onMouseOut","onMouseUp","onMouseDown","onClick","onDoubleClick","onKeyPress","onKeyUp","onInput","onBlur","onScroll","onWheel","onCopy","defaultProps","isTestEnv"],"mappings":"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","sourcesContent":["import React, { ReactNode } from 'react';\nimport PropTypes from 'prop-types';\nimport throttle from 'lodash.throttle';\nimport raf from 'raf';\n\nimport { isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { polyfillPlaceholder } from '../../lib/polyfillPlaceholder';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { isBrowser, isIE11 } from '../../lib/client';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { getTextAreaHeight } from './TextareaHelpers';\nimport { styles } from './Textarea.styles';\nimport { TextareaCounter, TextareaCounterRef } from './TextareaCounter';\n\nconst DEFAULT_WIDTH = 250;\nconst AUTORESIZE_THROTTLE_DEFAULT_WAIT = 100;\n\nexport interface TextareaProps\n extends CommonProps,\n Override<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n {\n /** Ошибка */\n error?: boolean;\n /** Предупреждение */\n warning?: boolean;\n /** Не активное состояние */\n disabled?: boolean;\n\n /**\n * Атоматический ресайз\n * в зависимости от содержимого\n */\n autoResize?: boolean;\n /**\n * Число строк\n */\n rows: number;\n /**\n * Максимальное число строк при\n * автоматическом ресайзе\n */\n maxRows: string | number;\n\n /**\n * Стандартный ресайз\n * Попадает в `style`\n */\n resize?: React.CSSProperties['resize'];\n\n /**\n * Ширина\n */\n width?: React.CSSProperties['width'];\n\n /**\n * Вызывается при изменении `value`\n */\n onValueChange?: (value: string) => void;\n\n /** Выделение значения при фокусе */\n selectAllOnFocus?: boolean;\n\n /** Показывать счетчик символов */\n showLengthCounter?: boolean;\n\n /** Допустимое количество символов в поле. Отображается в счетчике.\n * Если не указано, равно `maxLength`\n */\n lengthCounter?: number;\n\n /** Подсказка к счетчику символов.\n *\n * По умолчанию - тултип с содежимым из пропа, если передан`ReactNode`.\n *\n * Передав функцию, можно переопределить подсказку целиком, вместе с иконкой. Например,\n *\n * ```\n * counterHelp={() => <Tooltip render={...}><HelpIcon /></Tooltip>}\n * ```\n * */\n counterHelp?: ReactNode | (() => ReactNode);\n\n /** Добавлять дополнительную свободную строку при авто-ресайзе.\n * @see https://guides.kontur.ru/components/textarea/#04\n * */\n extraRow: boolean;\n\n /** Отключать анимацию при авто-ресайзе.\n * Автоматически отключается когда в `extraRow` передан `false`.\n */\n disableAnimations: boolean;\n }\n > {}\n\nexport interface TextareaState {\n polyfillPlaceholder: boolean;\n rows: number | string;\n isCounterVisible: boolean;\n}\n\n/**\n * Компонент для ввода многострочного текста.\n *\n * Принимает все атрибуты `React.TextareaHTMLAttributes<HTMLTextAreaElement>`\n *\n * ** `className` и `style` игнорируются**\n */\nexport class Textarea extends React.Component<TextareaProps, TextareaState> {\n public static __KONTUR_REACT_UI__ = 'Textarea';\n\n public static propTypes = {\n error: PropTypes.bool,\n warning: PropTypes.bool,\n disabled: PropTypes.bool,\n\n autoResize: PropTypes.bool,\n extraRow: PropTypes.bool,\n disableAnimations: PropTypes.bool,\n maxRows: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n resize: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n id: PropTypes.string,\n name: PropTypes.string,\n title: PropTypes.string,\n spellCheck: PropTypes.bool,\n role: PropTypes.string,\n maxLength: PropTypes.number,\n tabIndex: PropTypes.number,\n rows: PropTypes.number,\n placeholder: PropTypes.string,\n\n value: PropTypes.string,\n defaultValue: PropTypes.string,\n onValueChange: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onMouseMove: PropTypes.func,\n onMouseOut: PropTypes.func,\n\n onMouseUp: PropTypes.func,\n onMouseDown: PropTypes.func,\n onClick: PropTypes.func,\n onDoubleClick: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n onKeyPress: PropTypes.func,\n onKeyUp: PropTypes.func,\n onInput: PropTypes.func,\n\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n\n onScroll: PropTypes.func,\n onWheel: PropTypes.func,\n\n onCut: PropTypes.func,\n onPaste: PropTypes.func,\n onCopy: PropTypes.func,\n };\n\n public static defaultProps = {\n rows: 3,\n maxRows: 15,\n extraRow: true,\n disableAnimations: isTestEnv,\n };\n\n public state = {\n polyfillPlaceholder,\n rows: 1,\n isCounterVisible: false,\n };\n private reflowCounter = () => {\n if (this.counter) {\n this.counter.reflow();\n }\n };\n\n private theme!: Theme;\n private selectAllId: number | null = null;\n private node: Nullable<HTMLTextAreaElement>;\n private fakeNode: Nullable<HTMLTextAreaElement>;\n private counter: Nullable<TextareaCounterRef>;\n private layoutEvents: Nullable<{ remove: () => void }>;\n private textareaObserver = isBrowser ? new MutationObserver(this.reflowCounter) : null;\n private getAutoResizeThrottleWait(props: TextareaProps = this.props): number {\n // NOTE: При отключении анимации остается эффект дергания при авто-ресайзе из-за троттлинга расчета высоты\n // Поэтому выставляем таймаут троттла в ноль. Подробности - https://github.com/skbkontur/retail-ui/issues/2120\n return this.isAnimationsDisabled(props) ? 0 : AUTORESIZE_THROTTLE_DEFAULT_WAIT;\n }\n private isAnimationsDisabled({ disableAnimations, extraRow }: TextareaProps = this.props): boolean {\n return disableAnimations || !extraRow;\n }\n\n public componentDidMount() {\n if (this.props.autoResize) {\n this.autoResize();\n this.layoutEvents = LayoutEvents.addListener(this.autoResize);\n }\n\n if (this.node && this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.observe(this.node, { attributes: true });\n }\n }\n\n public componentWillUnmount() {\n if (this.layoutEvents) {\n this.layoutEvents.remove();\n }\n if (this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.disconnect();\n }\n this.cancelDelayedSelectAll();\n }\n\n public componentDidUpdate(prevProps: TextareaProps) {\n if (this.getAutoResizeThrottleWait() !== this.getAutoResizeThrottleWait(prevProps)) {\n this.autoResize.cancel();\n this.autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n }\n if ((this.props.autoResize && this.props.rows > this.state.rows) || this.props.value !== prevProps.value) {\n this.autoResize();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return <CommonWrapper {...this.props}>{this.renderMain}</CommonWrapper>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.node) {\n this.node.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.node) {\n this.node.blur();\n }\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange = (start: number, end: number) => {\n if (!this.node) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (document.activeElement !== this.node) {\n this.focus();\n }\n\n this.node.setSelectionRange(start, end);\n };\n\n /**\n * @public\n */\n public selectAll = () => {\n if (this.node) {\n this.setSelectionRange(0, this.node.value.length);\n }\n };\n\n private delaySelectAll = (): number => (this.selectAllId = raf(this.selectAll));\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n raf.cancel(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<TextareaProps>) => {\n const {\n width = DEFAULT_WIDTH,\n error,\n warning,\n autoResize,\n resize,\n onCut,\n onPaste,\n maxRows,\n onFocus,\n selectAllOnFocus,\n placeholder,\n onValueChange,\n showLengthCounter,\n lengthCounter,\n counterHelp,\n extraRow,\n disableAnimations,\n ...textareaProps\n } = props;\n\n const { isCounterVisible } = this.state;\n\n const rootProps = {\n style: {\n width,\n },\n };\n\n const textareaClassNames = cx({\n [styles.textarea(this.theme)]: true,\n [styles.error(this.theme)]: !!error,\n [styles.warning(this.theme)]: !!warning,\n [styles.disableAnimations()]: this.isAnimationsDisabled(),\n });\n\n const textareaStyle = {\n resize: autoResize ? 'none' : resize,\n };\n\n let placeholderPolyfill = null;\n\n if (this.state.polyfillPlaceholder && !textareaProps.value) {\n placeholderPolyfill = <span className={styles.placeholder()}>{placeholder}</span>;\n }\n\n let fakeTextarea = null;\n if (autoResize) {\n const fakeProps = {\n value: this.props.value,\n defaultValue: this.props.defaultValue,\n className: cx(textareaClassNames, styles.fake()),\n readOnly: true,\n };\n fakeTextarea = <textarea {...fakeProps} ref={this.refFake} />;\n }\n\n const counter = showLengthCounter && isCounterVisible && this.node && (\n <TextareaCounter\n textarea={this.node}\n help={counterHelp}\n value={textareaProps.value}\n length={textareaProps.maxLength ?? lengthCounter ?? 0}\n onCloseHelp={this.handleCloseCounterHelp}\n ref={this.refCounter}\n />\n );\n\n return (\n <RenderLayer\n onFocusOutside={this.handleCloseCounterHelp}\n onClickOutside={this.handleCloseCounterHelp}\n active={this.state.isCounterVisible}\n >\n <label {...rootProps} className={styles.root(this.theme)}>\n {placeholderPolyfill}\n <ResizeDetector onResize={this.reflowCounter}>\n <textarea\n {...textareaProps}\n className={textareaClassNames}\n style={textareaStyle}\n placeholder={!placeholderPolyfill ? placeholder : undefined}\n ref={this.ref}\n onChange={this.handleChange}\n onCut={this.handleCut}\n onPaste={this.handlePaste}\n onFocus={this.handleFocus}\n onKeyDown={this.handleKeyDown}\n >\n {this.props.children}\n </textarea>\n </ResizeDetector>\n {fakeTextarea}\n {counter}\n </label>\n </RenderLayer>\n );\n };\n\n private handleCloseCounterHelp = () => this.setState({ isCounterVisible: false });\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Edge bug: textarea maxlength doesn't work after new line\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18833616/\n const value = this.props.value !== undefined ? this.props.value.toString() : null;\n const isBlockEnter = isKeyEnter(e) && value !== null && value.length === this.props.maxLength;\n\n if (isBlockEnter) {\n e.preventDefault();\n }\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (polyfillPlaceholder) {\n const fieldIsEmpty = e.target.value === '';\n\n if (this.state.polyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ polyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(e.target.value);\n }\n\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n\n this.reflowCounter();\n };\n\n private ref = (element: HTMLTextAreaElement) => {\n this.node = element;\n };\n\n private refFake = (element: HTMLTextAreaElement) => {\n this.fakeNode = element;\n };\n\n private refCounter = (ref: TextareaCounterRef | null) => {\n this.counter = ref;\n };\n\n private autoResizeHandler = () => {\n const fakeNode = this.fakeNode;\n if (!fakeNode) {\n return;\n }\n const node = this.node;\n if (!node) {\n return;\n }\n if (this.props.value === undefined) {\n fakeNode.value = node.value;\n }\n\n const { rows, maxRows, extraRow } = this.props;\n if (rows === undefined || maxRows === undefined) {\n return;\n }\n const { height, exceededMaxHeight } = getTextAreaHeight({\n node: fakeNode,\n minRows: typeof rows === 'number' ? rows : parseInt(rows, 10),\n maxRows: typeof maxRows === 'number' ? maxRows : parseInt(maxRows, 10),\n extraRow,\n });\n node.style.height = height + 'px';\n node.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n fakeNode.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n };\n\n private autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n\n private handleCut = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onCut) {\n this.props.onCut(event);\n }\n\n this.reflowCounter();\n };\n\n private handlePaste = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onPaste) {\n this.props.onPaste(event);\n }\n\n this.reflowCounter();\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLTextAreaElement>) => {\n this.setState({ isCounterVisible: true });\n\n if (this.props.selectAllOnFocus) {\n // https://github.com/facebook/react/issues/7769\n this.node && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Textarea.tsx"],"names":["DEFAULT_WIDTH","AUTORESIZE_THROTTLE_DEFAULT_WAIT","Textarea","state","polyfillPlaceholder","isCounterVisible","reflowCounter","counter","reflow","theme","selectAllId","node","fakeNode","layoutEvents","textareaObserver","isBrowser","MutationObserver","setSelectionRange","start","end","Error","document","activeElement","focus","selectAll","value","length","delaySelectAll","cancelDelayedSelectAll","raf","cancel","renderMain","props","width","error","warning","autoResize","resize","onCut","onPaste","maxRows","onFocus","selectAllOnFocus","placeholder","onValueChange","showLengthCounter","lengthCounter","counterHelp","extraRow","disableAnimations","textareaProps","rootProps","style","textareaClassNames","styles","textarea","isAnimationsDisabled","textareaStyle","placeholderPolyfill","fakeTextarea","fakeProps","defaultValue","className","fake","readOnly","refFake","maxLength","handleCloseCounterHelp","refCounter","root","undefined","ref","handleChange","handleCut","handlePaste","handleFocus","handleKeyDown","children","setState","e","toString","isBlockEnter","preventDefault","onKeyDown","fieldIsEmpty","target","onChange","element","autoResizeHandler","rows","minRows","parseInt","height","exceededMaxHeight","overflowY","getAutoResizeThrottleWait","event","isIE11","componentDidMount","LayoutEvents","addListener","observe","attributes","componentWillUnmount","remove","disconnect","componentDidUpdate","prevProps","render","blur","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","disabled","oneOfType","string","number","id","name","title","spellCheck","role","tabIndex","func","onMouseEnter","onMouseLeave","onMouseOver","onMouseMove","onMouseOut","onMouseUp","onMouseDown","onClick","onDoubleClick","onKeyPress","onKeyUp","onInput","onBlur","onScroll","onWheel","onCopy","defaultProps","isTestEnv"],"mappings":"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","sourcesContent":["import React, { ReactNode } from 'react';\nimport PropTypes from 'prop-types';\nimport throttle from 'lodash.throttle';\nimport raf from 'raf';\n\nimport { isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { polyfillPlaceholder } from '../../lib/polyfillPlaceholder';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { isBrowser, isIE11 } from '../../lib/client';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { getTextAreaHeight } from './TextareaHelpers';\nimport { styles } from './Textarea.styles';\nimport { TextareaCounter, TextareaCounterRef } from './TextareaCounter';\n\nconst DEFAULT_WIDTH = 250;\nconst AUTORESIZE_THROTTLE_DEFAULT_WAIT = 100;\n\nexport interface TextareaProps\n extends CommonProps,\n Override<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n {\n /** Ошибка */\n error?: boolean;\n /** Предупреждение */\n warning?: boolean;\n /** Не активное состояние */\n disabled?: boolean;\n\n /**\n * Атоматический ресайз\n * в зависимости от содержимого\n */\n autoResize?: boolean;\n /**\n * Число строк\n */\n rows: number;\n /**\n * Максимальное число строк при\n * автоматическом ресайзе\n */\n maxRows: string | number;\n\n /**\n * Стандартный ресайз\n * Попадает в `style`\n */\n resize?: React.CSSProperties['resize'];\n\n /**\n * Ширина\n */\n width?: React.CSSProperties['width'];\n\n /**\n * Вызывается при изменении `value`\n */\n onValueChange?: (value: string) => void;\n\n /** Выделение значения при фокусе */\n selectAllOnFocus?: boolean;\n\n /** Показывать счетчик символов */\n showLengthCounter?: boolean;\n\n /** Допустимое количество символов в поле. Отображается в счетчике.\n * Если не указано, равно `maxLength`\n */\n lengthCounter?: number;\n\n /** Подсказка к счетчику символов.\n *\n * По умолчанию - тултип с содежимым из пропа, если передан`ReactNode`.\n *\n * Передав функцию, можно переопределить подсказку целиком, вместе с иконкой. Например,\n *\n * ```\n * counterHelp={() => <Tooltip render={...}><HelpIcon /></Tooltip>}\n * ```\n * */\n counterHelp?: ReactNode | (() => ReactNode);\n\n /** Добавлять дополнительную свободную строку при авто-ресайзе.\n * @see https://guides.kontur.ru/components/textarea/#04\n * */\n extraRow: boolean;\n\n /** Отключать анимацию при авто-ресайзе.\n * Автоматически отключается когда в `extraRow` передан `false`.\n */\n disableAnimations: boolean;\n }\n > {}\n\nexport interface TextareaState {\n polyfillPlaceholder: boolean;\n isCounterVisible: boolean;\n}\n\n/**\n * Компонент для ввода многострочного текста.\n *\n * Принимает все атрибуты `React.TextareaHTMLAttributes<HTMLTextAreaElement>`\n *\n * ** `className` и `style` игнорируются**\n */\nexport class Textarea extends React.Component<TextareaProps, TextareaState> {\n public static __KONTUR_REACT_UI__ = 'Textarea';\n\n public static propTypes = {\n error: PropTypes.bool,\n warning: PropTypes.bool,\n disabled: PropTypes.bool,\n\n autoResize: PropTypes.bool,\n extraRow: PropTypes.bool,\n disableAnimations: PropTypes.bool,\n maxRows: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n resize: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n id: PropTypes.string,\n name: PropTypes.string,\n title: PropTypes.string,\n spellCheck: PropTypes.bool,\n role: PropTypes.string,\n maxLength: PropTypes.number,\n tabIndex: PropTypes.number,\n rows: PropTypes.number,\n placeholder: PropTypes.string,\n\n value: PropTypes.string,\n defaultValue: PropTypes.string,\n onValueChange: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onMouseMove: PropTypes.func,\n onMouseOut: PropTypes.func,\n\n onMouseUp: PropTypes.func,\n onMouseDown: PropTypes.func,\n onClick: PropTypes.func,\n onDoubleClick: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n onKeyPress: PropTypes.func,\n onKeyUp: PropTypes.func,\n onInput: PropTypes.func,\n\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n\n onScroll: PropTypes.func,\n onWheel: PropTypes.func,\n\n onCut: PropTypes.func,\n onPaste: PropTypes.func,\n onCopy: PropTypes.func,\n };\n\n public static defaultProps = {\n rows: 3,\n maxRows: 15,\n extraRow: true,\n disableAnimations: isTestEnv,\n };\n\n public state = {\n polyfillPlaceholder,\n isCounterVisible: false,\n };\n private reflowCounter = () => {\n if (this.counter) {\n this.counter.reflow();\n }\n };\n\n private theme!: Theme;\n private selectAllId: number | null = null;\n private node: Nullable<HTMLTextAreaElement>;\n private fakeNode: Nullable<HTMLTextAreaElement>;\n private counter: Nullable<TextareaCounterRef>;\n private layoutEvents: Nullable<{ remove: () => void }>;\n private textareaObserver = isBrowser ? new MutationObserver(this.reflowCounter) : null;\n private getAutoResizeThrottleWait(props: TextareaProps = this.props): number {\n // NOTE: При отключении анимации остается эффект дергания при авто-ресайзе из-за троттлинга расчета высоты\n // Поэтому выставляем таймаут троттла в ноль. Подробности - https://github.com/skbkontur/retail-ui/issues/2120\n return this.isAnimationsDisabled(props) ? 0 : AUTORESIZE_THROTTLE_DEFAULT_WAIT;\n }\n private isAnimationsDisabled({ disableAnimations, extraRow }: TextareaProps = this.props): boolean {\n return disableAnimations || !extraRow;\n }\n\n public componentDidMount() {\n if (this.props.autoResize) {\n this.autoResize();\n this.layoutEvents = LayoutEvents.addListener(this.autoResize);\n }\n\n if (this.node && this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.observe(this.node, { attributes: true });\n }\n }\n\n public componentWillUnmount() {\n if (this.layoutEvents) {\n this.layoutEvents.remove();\n }\n if (this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.disconnect();\n }\n this.cancelDelayedSelectAll();\n }\n\n public componentDidUpdate(prevProps: TextareaProps) {\n if (this.getAutoResizeThrottleWait() !== this.getAutoResizeThrottleWait(prevProps)) {\n this.autoResize.cancel();\n this.autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n }\n if (\n this.props.autoResize &&\n (this.props.rows !== prevProps.rows ||\n this.props.maxRows !== prevProps.maxRows ||\n this.props.value !== prevProps.value)\n ) {\n this.autoResize();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return <CommonWrapper {...this.props}>{this.renderMain}</CommonWrapper>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.node) {\n this.node.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.node) {\n this.node.blur();\n }\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange = (start: number, end: number) => {\n if (!this.node) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (document.activeElement !== this.node) {\n this.focus();\n }\n\n this.node.setSelectionRange(start, end);\n };\n\n /**\n * @public\n */\n public selectAll = () => {\n if (this.node) {\n this.setSelectionRange(0, this.node.value.length);\n }\n };\n\n private delaySelectAll = (): number => (this.selectAllId = raf(this.selectAll));\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n raf.cancel(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<TextareaProps>) => {\n const {\n width = DEFAULT_WIDTH,\n error,\n warning,\n autoResize,\n resize,\n onCut,\n onPaste,\n maxRows,\n onFocus,\n selectAllOnFocus,\n placeholder,\n onValueChange,\n showLengthCounter,\n lengthCounter,\n counterHelp,\n extraRow,\n disableAnimations,\n ...textareaProps\n } = props;\n\n const { isCounterVisible } = this.state;\n\n const rootProps = {\n style: {\n width,\n },\n };\n\n const textareaClassNames = cx({\n [styles.textarea(this.theme)]: true,\n [styles.error(this.theme)]: !!error,\n [styles.warning(this.theme)]: !!warning,\n [styles.disableAnimations()]: this.isAnimationsDisabled(),\n });\n\n const textareaStyle = {\n resize: autoResize ? 'none' : resize,\n };\n\n let placeholderPolyfill = null;\n\n if (this.state.polyfillPlaceholder && !textareaProps.value) {\n placeholderPolyfill = <span className={styles.placeholder()}>{placeholder}</span>;\n }\n\n let fakeTextarea = null;\n if (autoResize) {\n const fakeProps = {\n value: this.props.value,\n defaultValue: this.props.defaultValue,\n className: cx(textareaClassNames, styles.fake()),\n readOnly: true,\n };\n fakeTextarea = <textarea {...fakeProps} ref={this.refFake} />;\n }\n\n const counter = showLengthCounter && isCounterVisible && this.node && (\n <TextareaCounter\n textarea={this.node}\n help={counterHelp}\n value={textareaProps.value}\n length={textareaProps.maxLength ?? lengthCounter ?? 0}\n onCloseHelp={this.handleCloseCounterHelp}\n ref={this.refCounter}\n />\n );\n\n return (\n <RenderLayer\n onFocusOutside={this.handleCloseCounterHelp}\n onClickOutside={this.handleCloseCounterHelp}\n active={this.state.isCounterVisible}\n >\n <label {...rootProps} className={styles.root(this.theme)}>\n {placeholderPolyfill}\n <ResizeDetector onResize={this.reflowCounter}>\n <textarea\n {...textareaProps}\n className={textareaClassNames}\n style={textareaStyle}\n placeholder={!placeholderPolyfill ? placeholder : undefined}\n ref={this.ref}\n onChange={this.handleChange}\n onCut={this.handleCut}\n onPaste={this.handlePaste}\n onFocus={this.handleFocus}\n onKeyDown={this.handleKeyDown}\n >\n {this.props.children}\n </textarea>\n </ResizeDetector>\n {fakeTextarea}\n {counter}\n </label>\n </RenderLayer>\n );\n };\n\n private handleCloseCounterHelp = () => this.setState({ isCounterVisible: false });\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Edge bug: textarea maxlength doesn't work after new line\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18833616/\n const value = this.props.value !== undefined ? this.props.value.toString() : null;\n const isBlockEnter = isKeyEnter(e) && value !== null && value.length === this.props.maxLength;\n\n if (isBlockEnter) {\n e.preventDefault();\n }\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (polyfillPlaceholder) {\n const fieldIsEmpty = e.target.value === '';\n\n if (this.state.polyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ polyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(e.target.value);\n }\n\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n\n this.reflowCounter();\n };\n\n private ref = (element: HTMLTextAreaElement) => {\n this.node = element;\n };\n\n private refFake = (element: HTMLTextAreaElement) => {\n this.fakeNode = element;\n };\n\n private refCounter = (ref: TextareaCounterRef | null) => {\n this.counter = ref;\n };\n\n private autoResizeHandler = () => {\n const fakeNode = this.fakeNode;\n if (!fakeNode) {\n return;\n }\n const node = this.node;\n if (!node) {\n return;\n }\n if (this.props.value === undefined) {\n fakeNode.value = node.value;\n }\n\n const { rows, maxRows, extraRow } = this.props;\n if (rows === undefined || maxRows === undefined) {\n return;\n }\n const { height, exceededMaxHeight } = getTextAreaHeight({\n node: fakeNode,\n minRows: typeof rows === 'number' ? rows : parseInt(rows, 10),\n maxRows: typeof maxRows === 'number' ? maxRows : parseInt(maxRows, 10),\n extraRow,\n });\n node.style.height = height + 'px';\n node.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n fakeNode.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n };\n\n private autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n\n private handleCut = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onCut) {\n this.props.onCut(event);\n }\n\n this.reflowCounter();\n };\n\n private handlePaste = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onPaste) {\n this.props.onPaste(event);\n }\n\n this.reflowCounter();\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLTextAreaElement>) => {\n this.setState({ isCounterVisible: true });\n\n if (this.props.selectAllOnFocus) {\n // https://github.com/facebook/react/issues/7769\n this.node && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n}\n"]}
|