@skbkontur/react-ui 4.0.1 → 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/cjs/components/Button/Button.d.ts +2 -2
- package/cjs/components/Button/Button.js +1 -1
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.d.ts +2 -2
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/ComboBox/ComboBox.d.ts +3 -3
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/CurrencyInput/CurrencyInput.d.ts +1 -1
- package/cjs/components/CurrencyInput/CurrencyInput.js +3 -3
- package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
- package/cjs/components/DateInput/DateInput.d.ts +2 -2
- package/cjs/components/DateInput/DateInput.js.map +1 -1
- package/cjs/components/DatePicker/DatePicker.d.ts +2 -2
- package/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/cjs/components/Dropdown/Dropdown.d.ts +2 -2
- package/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/cjs/components/Hint/Hint.d.ts +1 -1
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +3 -3
- package/cjs/components/Input/Input.js +1 -1
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Modal/Modal.d.ts +1 -1
- package/cjs/components/Modal/Modal.js +1 -1
- package/cjs/components/Modal/Modal.js.map +1 -1
- package/cjs/components/Radio/Radio.d.ts +2 -2
- package/cjs/components/Radio/Radio.js.map +1 -1
- package/cjs/components/RadioGroup/RadioGroup.d.ts +1 -1
- package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +3 -3
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePage.styles.js +2 -2
- package/cjs/components/SidePage/SidePage.styles.js.map +1 -1
- package/cjs/components/Tabs/Tab.d.ts +2 -2
- package/cjs/components/Tabs/Tab.js.map +1 -1
- package/cjs/components/Textarea/Textarea.d.ts +4 -4
- package/cjs/components/Textarea/Textarea.js.map +1 -1
- package/cjs/components/Toast/Toast.styles.js +2 -2
- package/cjs/components/Toast/Toast.styles.js.map +1 -1
- package/cjs/components/Toggle/Toggle.d.ts +2 -2
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/components/Token/Token.d.ts +2 -2
- package/cjs/components/Token/Token.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +2 -2
- package/cjs/components/TokenInput/TokenInput.js +1 -1
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/internal/Popup/Popup.js +1 -1
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/ThemePlayground/ThemeContextPlayground.js +3 -12
- package/cjs/internal/ThemePlayground/ThemeContextPlayground.js.map +1 -1
- package/cjs/lib/theming/ThemeFactory.d.ts +1 -1
- package/cjs/lib/theming/ThemeFactory.js +4 -3
- package/cjs/lib/theming/ThemeFactory.js.map +1 -1
- package/cjs/lib/theming/ThemeHelpers.d.ts +1 -0
- package/cjs/lib/theming/ThemeHelpers.js +11 -2
- package/cjs/lib/theming/ThemeHelpers.js.map +1 -1
- package/components/Button/Button/Button.js +1 -2
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +2 -2
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +2 -2
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +3 -3
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +3 -3
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
- package/components/CurrencyInput/CurrencyInput.d.ts +1 -1
- package/components/DateInput/DateInput/DateInput.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +2 -2
- package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +2 -2
- package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +2 -2
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +1 -1
- package/components/Input/Input/Input.js +1 -1
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +3 -3
- package/components/Modal/Modal/Modal.js +1 -1
- package/components/Modal/Modal/Modal.js.map +1 -1
- package/components/Modal/Modal.d.ts +1 -1
- package/components/Radio/Radio/Radio.js.map +1 -1
- package/components/Radio/Radio.d.ts +2 -2
- package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +1 -1
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +3 -3
- package/components/SidePage/SidePage.styles/SidePage.styles.js +2 -2
- package/components/SidePage/SidePage.styles/SidePage.styles.js.map +1 -1
- package/components/Tabs/Tab/Tab.js.map +1 -1
- package/components/Tabs/Tab.d.ts +2 -2
- package/components/Textarea/Textarea/Textarea.js.map +1 -1
- package/components/Textarea/Textarea.d.ts +4 -4
- package/components/Toast/Toast.styles/Toast.styles.js +2 -2
- package/components/Toast/Toast.styles/Toast.styles.js.map +1 -1
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +2 -2
- package/components/Token/Token/Token.js.map +1 -1
- package/components/Token/Token.d.ts +2 -2
- package/components/TokenInput/TokenInput/TokenInput.js +1 -1
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +2 -2
- package/internal/Popup/Popup/Popup.js +1 -1
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/ThemePlayground/ThemeContextPlayground/ThemeContextPlayground.js +2 -11
- package/internal/ThemePlayground/ThemeContextPlayground/ThemeContextPlayground.js.map +1 -1
- package/lib/theming/ThemeFactory/ThemeFactory.js +3 -2
- package/lib/theming/ThemeFactory/ThemeFactory.js.map +1 -1
- package/lib/theming/ThemeFactory.d.ts +1 -1
- package/lib/theming/ThemeHelpers/ThemeHelpers.js +10 -1
- package/lib/theming/ThemeHelpers/ThemeHelpers.js.map +1 -1
- package/lib/theming/ThemeHelpers.d.ts +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,41 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [4.0.4](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.0.3...@skbkontur/react-ui@4.0.4) (2022-04-01)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **Tooltip:** do not call onOpen after close ([#2848](https://github.com/skbkontur/retail-ui/issues/2848)) ([a3e0772](https://github.com/skbkontur/retail-ui/commit/a3e07728e9ed25b48afcc5a995acfbb7f5d7c93a))
|
|
12
|
+
* corrected ThemeFactory.overrideDefaultTheme ([#2845](https://github.com/skbkontur/retail-ui/issues/2845)) ([2cc964f](https://github.com/skbkontur/retail-ui/commit/2cc964f5a7f052a442893e1312de1cf9115e131f))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## [4.0.3](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.0.2...@skbkontur/react-ui@4.0.3) (2022-03-22)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* **SidePage:** fix animation styles ([#2837](https://github.com/skbkontur/retail-ui/issues/2837)) ([2eeebb0](https://github.com/skbkontur/retail-ui/commit/2eeebb00fb651da8062d6b672f8bd71ae0fa7587))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
## [4.0.2](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.0.1...@skbkontur/react-ui@4.0.2) (2022-03-22)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Bug Fixes
|
|
33
|
+
|
|
34
|
+
* **Button:** use default prop when "use"={null} ([#2833](https://github.com/skbkontur/retail-ui/issues/2833)) ([#2834](https://github.com/skbkontur/retail-ui/issues/2834)) ([cc2b506](https://github.com/skbkontur/retail-ui/commit/cc2b506d976e678857cbeed1582b76e952b62169))
|
|
35
|
+
* **SidePage,Toast:** fix animation bugs ([#2835](https://github.com/skbkontur/retail-ui/issues/2835)) ([3c8e77d](https://github.com/skbkontur/retail-ui/commit/3c8e77dc67710b342d8df96043333f2cbf012c73))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
6
41
|
## [4.0.1](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.0.0...@skbkontur/react-ui@4.0.1) (2022-03-18)
|
|
7
42
|
|
|
8
43
|
|
|
@@ -42,7 +42,7 @@ export interface ButtonProps extends CommonProps {
|
|
|
42
42
|
/** @ignore */
|
|
43
43
|
disableFocus?: boolean;
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
45
|
+
* Состояние валидации при ошибке.
|
|
46
46
|
*/
|
|
47
47
|
error?: boolean;
|
|
48
48
|
/**
|
|
@@ -108,7 +108,7 @@ export interface ButtonProps extends CommonProps {
|
|
|
108
108
|
/** @ignore */
|
|
109
109
|
visuallyFocused?: boolean;
|
|
110
110
|
/**
|
|
111
|
-
*
|
|
111
|
+
* Состояние валидации при предупреждении.
|
|
112
112
|
*/
|
|
113
113
|
warning?: boolean;
|
|
114
114
|
/**
|
|
@@ -469,7 +469,7 @@ Button = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functi
|
|
|
469
469
|
* @public
|
|
470
470
|
*/;_proto.focus = function focus() {var _this$node;(_this$node = this.node) == null ? void 0 : _this$node.focus();} /**
|
|
471
471
|
* @public
|
|
472
|
-
*/;_proto.blur = function blur() {var _this$node2;(_this$node2 = this.node) == null ? void 0 : _this$node2.blur();};_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 _cx, _cx2, _cx7, _cx8;var _this$props = this.props,_this$props$corners = _this$props.corners,corners = _this$props$corners === void 0 ? 0 : _this$props$corners,active = _this$props.active,disabled = _this$props.disabled,borderless = _this$props.borderless,checked = _this$props.checked,error = _this$props.error,warning = _this$props.warning,loading = _this$props.loading,arrow = _this$props.arrow,narrow = _this$props.narrow,icon = _this$props.icon,_noPadding = _this$props._noPadding,_noRightPadding = _this$props._noRightPadding,
|
|
472
|
+
*/;_proto.blur = function blur() {var _this$node2;(_this$node2 = this.node) == null ? void 0 : _this$node2.blur();};_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 _cx, _cx2, _cx7, _cx8;var _this$props = this.props,_this$props$corners = _this$props.corners,corners = _this$props$corners === void 0 ? 0 : _this$props$corners,active = _this$props.active,disabled = _this$props.disabled,borderless = _this$props.borderless,checked = _this$props.checked,error = _this$props.error,warning = _this$props.warning,loading = _this$props.loading,arrow = _this$props.arrow,narrow = _this$props.narrow,icon = _this$props.icon,_noPadding = _this$props._noPadding,_noRightPadding = _this$props._noRightPadding,visuallyFocused = _this$props.visuallyFocused,align = _this$props.align,disableFocus = _this$props.disableFocus,onMouseEnter = _this$props.onMouseEnter,onMouseLeave = _this$props.onMouseLeave,onMouseOver = _this$props.onMouseOver,onKeyDown = _this$props.onKeyDown,onClick = _this$props.onClick,width = _this$props.width,children = _this$props.children;var use = this.props.use || Button.defaultProps.use;var sizeClass = this.getSizeClassName();var isFocused = this.state.focusedByTab || visuallyFocused;var isLink = use === 'link';var rootProps = { // By default the type attribute is 'submit'. IE8 will fire a click event
|
|
473
473
|
// on this button if somewhere on the page user presses Enter while some
|
|
474
474
|
// input is focused. So we set type to 'button' by default.
|
|
475
475
|
type: this.props.type, className: (0, _Emotion.cx)((_cx = {}, _cx[_Button.styles.root(this.theme)] = true, _cx[_Button.styles[use](this.theme)] = true, _cx[_Button.activeStyles[use](this.theme)] = active, _cx[sizeClass] = true, _cx[_Button.styles.focus(this.theme)] = isFocused, _cx[_Button.styles.checked(this.theme)] = checked, _cx[_Button.styles.checkedFocused(this.theme)] = checked && isFocused, _cx[_Button.styles.disabled(this.theme)] = disabled || loading, _cx[_Button.styles.checkedDisabled(this.theme)] = checked && disabled, _cx[_Button.styles.borderless()] = borderless && !disabled && !loading && !checked && !isFocused && !active, _cx[_Button.styles.narrow()] = narrow, _cx[_Button.styles.noPadding()] = _noPadding, _cx[_Button.styles.noRightPadding()] = _noRightPadding, _cx)), style: { borderTopLeftRadius: corners & _Corners.Corners.TOP_LEFT ? 0 : undefined, borderTopRightRadius: corners & _Corners.Corners.TOP_RIGHT ? 0 : undefined, borderBottomRightRadius: corners & _Corners.Corners.BOTTOM_RIGHT ? 0 : undefined, borderBottomLeftRadius: corners & _Corners.Corners.BOTTOM_LEFT ? 0 : undefined, textAlign: align }, disabled: disabled || loading, onClick: onClick, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyDown: onKeyDown, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, onMouseOver: onMouseOver, tabIndex: disableFocus ? -1 : 0, title: this.props.title };var wrapProps = { className: (0, _Emotion.cx)((_cx2 = {}, _cx2[_Button.styles.wrap(this.theme)] = true, _cx2[_Button.styles.wrapArrow()] = arrow === true, _cx2[_Button.styles.wrapArrowLeft()] = arrow === 'left', _cx2[this.getSizeWrapClassName()] = true, _cx2)), style: { width: width } };var innerShadowNode = /*#__PURE__*/_react.default.createElement("div", { className: _Button.globalClasses.innerShadow });var outlineNode = null;if (!isFocused || isLink) {var _cx3;outlineNode = /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Button.styles.outline(), (_cx3 = {}, _cx3[_Button.styles.outlineWarning(this.theme)] = warning, _cx3[_Button.styles.outlineError(this.theme)] = error, _cx3[_Button.styles.outlineLink()] = isLink, _cx3[_Button.styles.outlineLinkWarning(this.theme)] = isLink && warning, _cx3[_Button.styles.outlineLinkError(this.theme)] = isLink && error, _cx3)) });}var loadingNode = null;if (loading && !icon) {loadingNode = /*#__PURE__*/_react.default.createElement("div", { className: _Button.styles.loading() }, this.getLoadingSpinner());}var iconNode = null;if (icon) {var _cx4;iconNode = /*#__PURE__*/_react.default.createElement("span", { className: (0, _Emotion.cx)(_Button.styles.icon(), this.getSizeIconClassName(), (_cx4 = {}, _cx4[_Button.styles.iconNoRightPadding()] = !children, _cx4[_Button.styles.iconLink(this.theme)] = isLink, _cx4)) }, loading ? this.getLoadingSpinner() : icon);}var arrowNode = null;if (arrow) {var _cx5;arrowNode = /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)((_cx5 = {}, _cx5[_Button.styles.arrow()] = true, _cx5[_Button.styles.arrowWarning(this.theme)] = !checked && warning, _cx5[_Button.styles.arrowError(this.theme)] = !checked && error, _cx5[_Button.styles.arrowFocus(this.theme)] = !checked && isFocused, _cx5[_Button.styles.arrowLeft()] = arrow === 'left', _cx5)) }, /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Button.globalClasses.arrowHelper, _Button.globalClasses.arrowHelperTop) }), /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Button.globalClasses.arrowHelper, _Button.globalClasses.arrowHelperBottom) }));} // Force disable all props and features, that cannot be use with Link
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Button.tsx"],"names":["Button","rootNode","state","focusedByTab","node","handleFocus","e","props","disabled","disableFocus","requestAnimationFrame","keyListener","isTabPressed","setState","onFocus","handleBlur","onBlur","_ref","componentDidMount","autoFocus","focus","getDerivedStateFromProps","loading","blur","render","theme","renderMain","corners","active","borderless","checked","error","warning","arrow","narrow","icon","_noPadding","_noRightPadding","use","defaultProps","visuallyFocused","align","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onClick","width","children","sizeClass","getSizeClassName","isFocused","isLink","rootProps","type","className","styles","root","activeStyles","checkedFocused","checkedDisabled","noPadding","noRightPadding","style","borderTopLeftRadius","Corners","TOP_LEFT","undefined","borderTopRightRadius","TOP_RIGHT","borderBottomRightRadius","BOTTOM_RIGHT","borderBottomLeftRadius","BOTTOM_LEFT","textAlign","tabIndex","title","wrapProps","wrap","wrapArrow","wrapArrowLeft","getSizeWrapClassName","innerShadowNode","globalClasses","innerShadow","outlineNode","outline","outlineWarning","outlineError","outlineLink","outlineLinkWarning","outlineLinkError","loadingNode","getLoadingSpinner","iconNode","getSizeIconClassName","iconNoRightPadding","iconLink","arrowNode","arrowWarning","arrowError","arrowFocus","arrowLeft","arrowHelper","arrowHelperTop","arrowHelperBottom","link","linkFocus","linkDisabled","Object","assign","wrapLink","setRootNode","caption","captionTranslated","captionLink","captionDisabled","visibilityHidden","size","sizeLarge","sizeLargeIE11","isIE11","isEdge","sizeMedium","sizeMediumIE11","sizeSmall","sizeSmallIE11","iconLarge","iconMedium","iconSmall","wrapLarge","wrapMedium","wrapSmall","React","Component","__KONTUR_REACT_UI__","__BUTTON__","isButton"],"mappings":"uVAAA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0JaA,M,OADZC,kB;;;;;;;;;;;;;;AAeQC,IAAAA,K,GAAQ;AACbC,MAAAA,YAAY,EAAE,KADD,E;;;;AAKPC,IAAAA,I,GAAiC,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmQjCC,IAAAA,W,GAAc,UAACC,CAAD,EAA4C;AAChE,UAAI,CAAC,MAAKC,KAAL,CAAWC,QAAZ,IAAwB,CAAC,MAAKD,KAAL,CAAWE,YAAxC,EAAsD;AACpD;AACA;AACAC,QAAAA,qBAAqB,CAAC,YAAM;AAC1B,cAAIC,yBAAYC,YAAhB,EAA8B;AAC5B,kBAAKC,QAAL,CAAc,EAAEV,YAAY,EAAE,IAAhB,EAAd;AACD;AACF,SAJoB,CAArB;AAKA,cAAKI,KAAL,CAAWO,OAAX,0BAAKP,KAAL,CAAWO,OAAX,CAAqBR,CAArB;AACD;AACF,K;;AAEOS,IAAAA,U,GAAa,UAACT,CAAD,EAA4C;AAC/D,YAAKO,QAAL,CAAc,EAAEV,YAAY,EAAE,KAAhB,EAAd;AACA,UAAI,CAAC,MAAKI,KAAL,CAAWC,QAAZ,IAAwB,CAAC,MAAKD,KAAL,CAAWE,YAAxC,EAAsD;AACpD,cAAKF,KAAL,CAAWS,MAAX,0BAAKT,KAAL,CAAWS,MAAX,CAAoBV,CAApB;AACD;AACF,K;;AAEOW,IAAAA,I,GAAO,UAACb,IAAD,EAAoC;AACjD,YAAKA,IAAL,GAAYA,IAAZ;AACD,K,oDAtRMc,iB,GAAP,6BAA2B,CACzB,IAAI,KAAKX,KAAL,CAAWY,SAAf,EAA0B,CACxBR,yBAAYC,YAAZ,GAA2B,IAA3B,CACA,KAAKQ,KAAL,GACD,CACF,C,QAEaC,wB,GAAd,kCAAuCd,KAAvC,EAA2D,CACzD,IAAIA,KAAK,CAACe,OAAN,IAAiBf,KAAK,CAACC,QAA3B,EAAqC,CACnC,OAAO,EAAEL,YAAY,EAAE,KAAhB,EAAP,CACD,CACD,OAAO,IAAP,CACD,C,CAED;AACF;AACA,K,QACSiB,K,GAAP,iBAAe,gBACb,mBAAKhB,IAAL,gCAAWgB,KAAX,GACD,C,CAED;AACF;AACA,K,QACSG,I,GAAP,gBAAc,iBACZ,oBAAKnB,IAAL,iCAAWmB,IAAX,GACD,C,QAEMC,M,GAAP,kBAA6B,mBAC3B,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAACC,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAACC,UAAL,EAAP,CACD,CAJH,CADF,CAQD,C,QAEOA,U,GAAR,sBAAqB,2BACnB,kBAyBI,KAAKnB,KAzBT,mCACEoB,OADF,CACEA,OADF,oCACY,CADZ,uBAEEC,MAFF,eAEEA,MAFF,CAGEpB,QAHF,eAGEA,QAHF,CAIEqB,UAJF,eAIEA,UAJF,CAKEC,OALF,eAKEA,OALF,CAMEC,KANF,eAMEA,KANF,CAOEC,OAPF,eAOEA,OAPF,CAQEV,OARF,eAQEA,OARF,CASEW,KATF,eASEA,KATF,CAUEC,MAVF,eAUEA,MAVF,CAWEC,IAXF,eAWEA,IAXF,CAYEC,UAZF,eAYEA,UAZF,CAaEC,eAbF,eAaEA,eAbF,+BAcEC,GAdF,CAcEA,GAdF,gCAcQtC,MAAM,CAACuC,YAAP,CAAoBD,GAd5B,mBAeEE,eAfF,eAeEA,eAfF,CAgBEC,KAhBF,eAgBEA,KAhBF,CAiBEhC,YAjBF,eAiBEA,YAjBF,CAkBEiC,YAlBF,eAkBEA,YAlBF,CAmBEC,YAnBF,eAmBEA,YAnBF,CAoBEC,WApBF,eAoBEA,WApBF,CAqBEC,SArBF,eAqBEA,SArBF,CAsBEC,OAtBF,eAsBEA,OAtBF,CAuBEC,KAvBF,eAuBEA,KAvBF,CAwBEC,QAxBF,eAwBEA,QAxBF,CA0BA,IAAMC,SAAS,GAAG,KAAKC,gBAAL,EAAlB,CAEA,IAAMC,SAAS,GAAG,KAAKjD,KAAL,CAAWC,YAAX,IAA2BqC,eAA7C,CACA,IAAMY,MAAM,GAAGd,GAAG,KAAK,MAAvB,CACA,IAAMe,SAAS,GAAG,EAChB;AACA;AACA;AACAC,MAAAA,IAAI,EAAE,KAAK/C,KAAL,CAAW+C,IAJD,EAKhBC,SAAS,EAAE,gCACRC,eAAOC,IAAP,CAAY,KAAKhC,KAAjB,CADQ,IACkB,IADlB,MAER+B,eAAOlB,GAAP,EAAY,KAAKb,KAAjB,CAFQ,IAEkB,IAFlB,MAGRiC,qBAAapB,GAAb,EAAkB,KAAKb,KAAvB,CAHQ,IAGwBG,MAHxB,MAIRqB,SAJQ,IAII,IAJJ,MAKRO,eAAOpC,KAAP,CAAa,KAAKK,KAAlB,CALQ,IAKmB0B,SALnB,MAMRK,eAAO1B,OAAP,CAAe,KAAKL,KAApB,CANQ,IAMqBK,OANrB,MAOR0B,eAAOG,cAAP,CAAsB,KAAKlC,KAA3B,CAPQ,IAO4BK,OAAO,IAAIqB,SAPvC,MAQRK,eAAOhD,QAAP,CAAgB,KAAKiB,KAArB,CARQ,IAQsBjB,QAAQ,IAAIc,OARlC,MASRkC,eAAOI,eAAP,CAAuB,KAAKnC,KAA5B,CATQ,IAS6BK,OAAO,IAAItB,QATxC,MAURgD,eAAO3B,UAAP,EAVQ,IAUcA,UAAU,IAAI,CAACrB,QAAf,IAA2B,CAACc,OAA5B,IAAuC,CAACQ,OAAxC,IAAmD,CAACqB,SAApD,IAAiE,CAACvB,MAVhF,MAWR4B,eAAOtB,MAAP,EAXQ,IAWUA,MAXV,MAYRsB,eAAOK,SAAP,EAZQ,IAYazB,UAZb,MAaRoB,eAAOM,cAAP,EAbQ,IAakBzB,eAblB,OALK,EAoBhB0B,KAAK,EAAE,EACLC,mBAAmB,EAAErC,OAAO,GAAGsC,iBAAQC,QAAlB,GAA6B,CAA7B,GAAiCC,SADjD,EAELC,oBAAoB,EAAEzC,OAAO,GAAGsC,iBAAQI,SAAlB,GAA8B,CAA9B,GAAkCF,SAFnD,EAGLG,uBAAuB,EAAE3C,OAAO,GAAGsC,iBAAQM,YAAlB,GAAiC,CAAjC,GAAqCJ,SAHzD,EAILK,sBAAsB,EAAE7C,OAAO,GAAGsC,iBAAQQ,WAAlB,GAAgC,CAAhC,GAAoCN,SAJvD,EAKLO,SAAS,EAAEjC,KALN,EApBS,EA2BhBjC,QAAQ,EAAEA,QAAQ,IAAIc,OA3BN,EA4BhBwB,OAAO,EAAEA,OA5BO,EA6BhBhC,OAAO,EAAE,KAAKT,WA7BE,EA8BhBW,MAAM,EAAE,KAAKD,UA9BG,EA+BhB8B,SAAS,EAAEA,SA/BK,EAgChBH,YAAY,EAAEA,YAhCE,EAiChBC,YAAY,EAAEA,YAjCE,EAkChBC,WAAW,EAAEA,WAlCG,EAmChB+B,QAAQ,EAAElE,YAAY,GAAG,CAAC,CAAJ,GAAQ,CAnCd,EAoChBmE,KAAK,EAAE,KAAKrE,KAAL,CAAWqE,KApCF,EAAlB,CAuCA,IAAMC,SAAS,GAAG,EAChBtB,SAAS,EAAE,kCACRC,eAAOsB,IAAP,CAAY,KAAKrD,KAAjB,CADQ,IACkB,IADlB,OAER+B,eAAOuB,SAAP,EAFQ,IAEa9C,KAAK,KAAK,IAFvB,OAGRuB,eAAOwB,aAAP,EAHQ,IAGiB/C,KAAK,KAAK,MAH3B,OAIR,KAAKgD,oBAAL,EAJQ,IAIsB,IAJtB,QADK,EAOhBlB,KAAK,EAAE,EACLhB,KAAK,EAAEA,KADF,EAPS,EAAlB,CAYA,IAAMmC,eAAe,gBAAG,sCAAK,SAAS,EAAEC,sBAAcC,WAA9B,GAAxB,CAEA,IAAIC,WAAW,GAAG,IAAlB,CACA,IAAI,CAAClC,SAAD,IAAcC,MAAlB,EAA0B,UACxBiC,WAAW,gBACT,sCACE,SAAS,EAAE,iBAAG7B,eAAO8B,OAAP,EAAH,mBACR9B,eAAO+B,cAAP,CAAsB,KAAK9D,KAA3B,CADQ,IAC4BO,OAD5B,OAERwB,eAAOgC,YAAP,CAAoB,KAAK/D,KAAzB,CAFQ,IAE0BM,KAF1B,OAGRyB,eAAOiC,WAAP,EAHQ,IAGerC,MAHf,OAIRI,eAAOkC,kBAAP,CAA0B,KAAKjE,KAA/B,CAJQ,IAIgC2B,MAAM,IAAIpB,OAJ1C,OAKRwB,eAAOmC,gBAAP,CAAwB,KAAKlE,KAA7B,CALQ,IAK8B2B,MAAM,IAAIrB,KALxC,QADb,GADF,CAWD,CAED,IAAI6D,WAAW,GAAG,IAAlB,CACA,IAAItE,OAAO,IAAI,CAACa,IAAhB,EAAsB,CACpByD,WAAW,gBAAG,sCAAK,SAAS,EAAEpC,eAAOlC,OAAP,EAAhB,IAAmC,KAAKuE,iBAAL,EAAnC,CAAd,CACD,CAED,IAAIC,QAAQ,GAAG,IAAf,CACA,IAAI3D,IAAJ,EAAU,UACR2D,QAAQ,gBACN,uCACE,SAAS,EAAE,iBAAGtC,eAAOrB,IAAP,EAAH,EAAkB,KAAK4D,oBAAL,EAAlB,mBACRvC,eAAOwC,kBAAP,EADQ,IACsB,CAAChD,QADvB,OAERQ,eAAOyC,QAAP,CAAgB,KAAKxE,KAArB,CAFQ,IAEsB2B,MAFtB,QADb,IAMG9B,OAAO,GAAG,KAAKuE,iBAAL,EAAH,GAA8B1D,IANxC,CADF,CAUD,CAED,IAAI+D,SAAS,GAAG,IAAhB,CACA,IAAIjE,KAAJ,EAAW,UACTiE,SAAS,gBACP,sCACE,SAAS,EAAE,kCACR1C,eAAOvB,KAAP,EADQ,IACS,IADT,OAERuB,eAAO2C,YAAP,CAAoB,KAAK1E,KAAzB,CAFQ,IAE0B,CAACK,OAAD,IAAYE,OAFtC,OAGRwB,eAAO4C,UAAP,CAAkB,KAAK3E,KAAvB,CAHQ,IAGwB,CAACK,OAAD,IAAYC,KAHpC,OAIRyB,eAAO6C,UAAP,CAAkB,KAAK5E,KAAvB,CAJQ,IAIwB,CAACK,OAAD,IAAYqB,SAJpC,OAKRK,eAAO8C,SAAP,EALQ,IAKarE,KAAK,KAAK,MALvB,QADb,iBASE,sCAAK,SAAS,EAAE,iBAAGkD,sBAAcoB,WAAjB,EAA8BpB,sBAAcqB,cAA5C,CAAhB,GATF,eAUE,sCAAK,SAAS,EAAE,iBAAGrB,sBAAcoB,WAAjB,EAA8BpB,sBAAcsB,iBAA5C,CAAhB,GAVF,CADF,CAcD,CAtIkB,CAwInB;AACA,QAAIrD,MAAJ,EAAY,UACVC,SAAS,CAACE,SAAV,GAAsB,kCACnBC,eAAOC,IAAP,CAAY,KAAKhC,KAAjB,CADmB,IACO,IADP,OAEnBwB,SAFmB,IAEP,IAFO,OAGnBO,eAAOkD,IAAP,CAAY,KAAKjF,KAAjB,CAHmB,IAGO,IAHP,OAInB+B,eAAOmD,SAAP,CAAiB,KAAKlF,KAAtB,CAJmB,IAIY0B,SAJZ,OAKnBK,eAAOoD,YAAP,CAAoB,KAAKnF,KAAzB,CALmB,IAKejB,QAAQ,IAAIc,OAL3B,QAAtB,CAOAuF,MAAM,CAACC,MAAP,CAAcjC,SAAd,EAAyB,EACvBtB,SAAS,EAAE,iBAAGC,eAAOsB,IAAP,CAAY,KAAKrD,KAAjB,CAAH,EAA4B+B,eAAOuD,QAAP,EAA5B,CADY,EAEvBhD,KAAK,EAAE,EAAEhB,KAAK,EAAE8B,SAAS,CAACd,KAAV,CAAgBhB,KAAzB,EAFgB,EAAzB,EAIAM,SAAS,CAACU,KAAV,CAAgBW,SAAhB,GAA4BP,SAA5B,CACA+B,SAAS,GAAG,IAAZ,CACD,CAED,oBACE,6BAAC,4BAAD,2BAAe,WAAW,EAAE,KAAKc,WAAjC,IAAkD,KAAKzG,KAAvD,gBACE,qCAAUsE,SAAV,eACE,gEAAQ,GAAG,EAAE,KAAK5D,IAAlB,IAA4BoC,SAA5B,GACG6B,eADH,EAEGG,WAFH,EAGGO,WAHH,EAIGM,SAJH,eAKE,sCACE,SAAS,EAAE,iBAAG1C,eAAOyD,OAAP,EAAH,EAAqB9B,sBAAc8B,OAAnC,mBACRzD,eAAO0D,iBAAP,EADQ,IACqBtF,MAAM,IAAIE,OAD/B,OAER0B,eAAO2D,WAAP,EAFQ,IAEe/D,MAFf,OAGRI,eAAO4D,eAAP,EAHQ,IAGmB,CAACtF,OAAD,IAAYtB,QAH/B,QADb,IAOGsF,QAPH,eAQE,uCAAM,SAAS,EAAE,kCAAMtC,eAAO6D,gBAAP,EAAN,IAAkC,CAAC,CAACzB,WAApC,QAAjB,IAAsE5C,QAAtE,CARF,CALF,CADF,CADF,CADF,CAsBD,C,QAEO6C,iB,GAAR,6BAA4B,CAC1B,oBAAO,6BAAC,gBAAD,IAAS,OAAO,EAAE,IAAlB,EAAwB,MAAM,MAA9B,EAA+B,IAAI,EAAC,MAApC,GAAP,CACD,C,QAEO3C,gB,GAAR,4BAA2B,wBACzB,QAAQ,KAAK3C,KAAL,CAAW+G,IAAnB,GACE,KAAK,OAAL,CACE,OAAO,iBAAG9D,eAAO+D,SAAP,CAAiB,KAAK9F,KAAtB,CAAH,mBAAoC+B,eAAOgE,aAAP,CAAqB,KAAK/F,KAA1B,CAApC,IAAuEgG,kBAAUC,cAAjF,QAAP,CACF,KAAK,QAAL,CACE,OAAO,iBAAGlE,eAAOmE,UAAP,CAAkB,KAAKlG,KAAvB,CAAH,qBAAqC+B,eAAOoE,cAAP,CAAsB,KAAKnG,KAA3B,CAArC,IAAyEgG,kBAAUC,cAAnF,SAAP,CACF,KAAK,OAAL,CACA,QACE,OAAO,iBAAGlE,eAAOqE,SAAP,CAAiB,KAAKpG,KAAtB,CAAH,qBAAoC+B,eAAOsE,aAAP,CAAqB,KAAKrG,KAA1B,CAApC,IAAuEgG,kBAAUC,cAAjF,SAAP,CAPJ,CASD,C,QAEO3B,oB,GAAR,gCAA+B,CAC7B,QAAQ,KAAKxF,KAAL,CAAW+G,IAAnB,GACE,KAAK,OAAL,CACE,OAAO9D,eAAOuE,SAAP,CAAiB,KAAKtG,KAAtB,CAAP,CACF,KAAK,QAAL,CACE,OAAO+B,eAAOwE,UAAP,CAAkB,KAAKvG,KAAvB,CAAP,CACF,KAAK,OAAL,CACA,QACE,OAAO+B,eAAOyE,SAAP,CAAiB,KAAKxG,KAAtB,CAAP,CAPJ,CASD,C,QAEOwD,oB,GAAR,gCAA+B,CAC7B,QAAQ,KAAK1E,KAAL,CAAW+G,IAAnB,GACE,KAAK,OAAL,CACE,OAAO9D,eAAO0E,SAAP,CAAiB,KAAKzG,KAAtB,CAAP,CACF,KAAK,QAAL,CACE,OAAO+B,eAAO2E,UAAP,CAAkB,KAAK1G,KAAvB,CAAP,CACF,KAAK,OAAL,CACA,QACE,OAAO+B,eAAO4E,SAAP,CAAiB,KAAK3G,KAAtB,CAAP,CAPJ,CASD,C,iBApRyB4G,eAAMC,S,WAClBC,mB,GAAsB,Q,UACtBC,U,GAAa,I,UACbtE,Q,GAAWD,iBAAQC,Q,UACnBG,S,GAAYJ,iBAAQI,S,UACpBE,Y,GAAeN,iBAAQM,Y,UACvBE,W,GAAcR,iBAAQQ,W,UAEtBlC,Y,GAAe,EAC3BD,GAAG,EAAE,SADsB,EAE3BgF,IAAI,EAAE,OAFqB,EAG3BhE,IAAI,EAAE,QAHqB,E,4CAuSxB,IAAMmF,QAAQ,GAAG,+BAAgC,QAAhC,CAAjB,C","sourcesContent":["import React from 'react';\n\nimport { isReactUIComponent } from '../../lib/utils';\nimport { isIE11, isEdge } from '../../lib/client';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Spinner } from '../Spinner';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles, activeStyles, globalClasses } from './Button.styles';\nimport { Corners } from './Corners';\n\nexport type ButtonSize = 'small' | 'medium' | 'large';\nexport type ButtonType = 'button' | 'submit' | 'reset';\nexport type ButtonUse = 'default' | 'primary' | 'success' | 'danger' | 'pay' | 'link';\n\nexport interface ButtonProps extends CommonProps {\n /** @ignore */\n _noPadding?: boolean;\n\n /** @ignore */\n _noRightPadding?: boolean;\n\n /**\n * Применяет к кнопке стили псевдокласса `:active`.\n */\n active?: boolean;\n\n /**\n * CSS-свойство `text-align`.\n */\n align?: React.CSSProperties['textAlign'];\n\n /**\n * Превращает обычную кнопку в кнопку со стрелкой.\n */\n arrow?: boolean | 'left';\n\n /**\n * Даёт кнопке фокус после окончания загрузки страницы.\n */\n autoFocus?: boolean;\n\n /**\n * Убирает обводку у кнопки.\n */\n borderless?: boolean;\n\n /**\n * @ignore\n */\n checked?: boolean;\n\n children?: React.ReactNode;\n\n /** @ignore */\n corners?: number;\n\n /**\n * Отключенное состояние кнопки.\n */\n disabled?: boolean;\n\n /** @ignore */\n disableFocus?: boolean;\n\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n\n /**\n * Иконка слева от текста кнопки.\n */\n icon?: React.ReactElement<any>;\n\n /**\n * Переводит кнопку в состояние загрузки.\n */\n loading?: boolean;\n\n /**\n * Сужает кнопку.\n */\n narrow?: boolean;\n\n /**\n * HTML-событие `onblur`.\n */\n onBlur?: React.FocusEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onclick`.\n */\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onfocus`.\n */\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `keydown`.\n */\n onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onmouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onmouseover`.\n */\n onMouseOver?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * Задаёт размер кнопки.\n *\n * **Допустимые значения**: `\"small\"`, `\"medium\"`, `\"large\"`.\n */\n size?: ButtonSize;\n\n /**\n * HTML-атрибут `type`.\n */\n type?: ButtonType;\n\n /**\n * HTML-атрибут `title`.\n */\n title?: string;\n\n /**\n * Стиль кнопки.\n *\n * **Допустимые значения**: `\"default\"`, `\"primary\"`, `\"success\"`, `\"danger\"`, `\"pay\"`, `\"link\"`.\n */\n use?: ButtonUse;\n\n /** @ignore */\n visuallyFocused?: boolean;\n\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n\n /**\n * CSS-свойство `width`.\n */\n width?: number | string;\n}\n\nexport interface ButtonState {\n focusedByTab: boolean;\n}\n\n@rootNode\nexport class Button extends React.Component<ButtonProps, ButtonState> {\n public static __KONTUR_REACT_UI__ = 'Button';\n public static __BUTTON__ = true;\n public static TOP_LEFT = Corners.TOP_LEFT;\n public static TOP_RIGHT = Corners.TOP_RIGHT;\n public static BOTTOM_RIGHT = Corners.BOTTOM_RIGHT;\n public static BOTTOM_LEFT = Corners.BOTTOM_LEFT;\n\n public static defaultProps = {\n use: 'default' as ButtonUse,\n size: 'small' as ButtonSize,\n type: 'button' as ButtonType,\n };\n\n public state = {\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private node: HTMLButtonElement | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.autoFocus) {\n keyListener.isTabPressed = true;\n this.focus();\n }\n }\n\n public static getDerivedStateFromProps(props: ButtonProps) {\n if (props.loading || props.disabled) {\n return { focusedByTab: false };\n }\n return null;\n }\n\n /**\n * @public\n */\n public focus() {\n this.node?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.node?.blur();\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 {\n corners = 0,\n active,\n disabled,\n borderless,\n checked,\n error,\n warning,\n loading,\n arrow,\n narrow,\n icon,\n _noPadding,\n _noRightPadding,\n use = Button.defaultProps.use,\n visuallyFocused,\n align,\n disableFocus,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onKeyDown,\n onClick,\n width,\n children,\n } = this.props;\n const sizeClass = this.getSizeClassName();\n\n const isFocused = this.state.focusedByTab || visuallyFocused;\n const isLink = use === 'link';\n const rootProps = {\n // By default the type attribute is 'submit'. IE8 will fire a click event\n // on this button if somewhere on the page user presses Enter while some\n // input is focused. So we set type to 'button' by default.\n type: this.props.type,\n className: cx({\n [styles.root(this.theme)]: true,\n [styles[use](this.theme)]: true,\n [activeStyles[use](this.theme)]: active,\n [sizeClass]: true,\n [styles.focus(this.theme)]: isFocused,\n [styles.checked(this.theme)]: checked,\n [styles.checkedFocused(this.theme)]: checked && isFocused,\n [styles.disabled(this.theme)]: disabled || loading,\n [styles.checkedDisabled(this.theme)]: checked && disabled,\n [styles.borderless()]: borderless && !disabled && !loading && !checked && !isFocused && !active,\n [styles.narrow()]: narrow,\n [styles.noPadding()]: _noPadding,\n [styles.noRightPadding()]: _noRightPadding,\n }),\n style: {\n borderTopLeftRadius: corners & Corners.TOP_LEFT ? 0 : undefined,\n borderTopRightRadius: corners & Corners.TOP_RIGHT ? 0 : undefined,\n borderBottomRightRadius: corners & Corners.BOTTOM_RIGHT ? 0 : undefined,\n borderBottomLeftRadius: corners & Corners.BOTTOM_LEFT ? 0 : undefined,\n textAlign: align,\n },\n disabled: disabled || loading,\n onClick: onClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onKeyDown: onKeyDown,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n onMouseOver: onMouseOver,\n tabIndex: disableFocus ? -1 : 0,\n title: this.props.title,\n };\n\n const wrapProps = {\n className: cx({\n [styles.wrap(this.theme)]: true,\n [styles.wrapArrow()]: arrow === true,\n [styles.wrapArrowLeft()]: arrow === 'left',\n [this.getSizeWrapClassName()]: true,\n }),\n style: {\n width: width,\n },\n };\n\n const innerShadowNode = <div className={globalClasses.innerShadow} />;\n\n let outlineNode = null;\n if (!isFocused || isLink) {\n outlineNode = (\n <div\n className={cx(styles.outline(), {\n [styles.outlineWarning(this.theme)]: warning,\n [styles.outlineError(this.theme)]: error,\n [styles.outlineLink()]: isLink,\n [styles.outlineLinkWarning(this.theme)]: isLink && warning,\n [styles.outlineLinkError(this.theme)]: isLink && error,\n })}\n />\n );\n }\n\n let loadingNode = null;\n if (loading && !icon) {\n loadingNode = <div className={styles.loading()}>{this.getLoadingSpinner()}</div>;\n }\n\n let iconNode = null;\n if (icon) {\n iconNode = (\n <span\n className={cx(styles.icon(), this.getSizeIconClassName(), {\n [styles.iconNoRightPadding()]: !children,\n [styles.iconLink(this.theme)]: isLink,\n })}\n >\n {loading ? this.getLoadingSpinner() : icon}\n </span>\n );\n }\n\n let arrowNode = null;\n if (arrow) {\n arrowNode = (\n <div\n className={cx({\n [styles.arrow()]: true,\n [styles.arrowWarning(this.theme)]: !checked && warning,\n [styles.arrowError(this.theme)]: !checked && error,\n [styles.arrowFocus(this.theme)]: !checked && isFocused,\n [styles.arrowLeft()]: arrow === 'left',\n })}\n >\n <div className={cx(globalClasses.arrowHelper, globalClasses.arrowHelperTop)} />\n <div className={cx(globalClasses.arrowHelper, globalClasses.arrowHelperBottom)} />\n </div>\n );\n }\n\n // Force disable all props and features, that cannot be use with Link\n if (isLink) {\n rootProps.className = cx({\n [styles.root(this.theme)]: true,\n [sizeClass]: true,\n [styles.link(this.theme)]: true,\n [styles.linkFocus(this.theme)]: isFocused,\n [styles.linkDisabled(this.theme)]: disabled || loading,\n });\n Object.assign(wrapProps, {\n className: cx(styles.wrap(this.theme), styles.wrapLink()),\n style: { width: wrapProps.style.width },\n });\n rootProps.style.textAlign = undefined;\n arrowNode = null;\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <span {...wrapProps}>\n <button ref={this._ref} {...rootProps}>\n {innerShadowNode}\n {outlineNode}\n {loadingNode}\n {arrowNode}\n <div\n className={cx(styles.caption(), globalClasses.caption, {\n [styles.captionTranslated()]: active || checked,\n [styles.captionLink()]: isLink,\n [styles.captionDisabled()]: !checked && disabled,\n })}\n >\n {iconNode}\n <span className={cx({ [styles.visibilityHidden()]: !!loadingNode })}>{children}</span>\n </div>\n </button>\n </span>\n </CommonWrapper>\n );\n }\n\n private getLoadingSpinner() {\n return <Spinner caption={null} dimmed type=\"mini\" />;\n }\n\n private getSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return cx(styles.sizeLarge(this.theme), { [styles.sizeLargeIE11(this.theme)]: isIE11 || isEdge });\n case 'medium':\n return cx(styles.sizeMedium(this.theme), { [styles.sizeMediumIE11(this.theme)]: isIE11 || isEdge });\n case 'small':\n default:\n return cx(styles.sizeSmall(this.theme), { [styles.sizeSmallIE11(this.theme)]: isIE11 || isEdge });\n }\n }\n\n private getSizeIconClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.iconLarge(this.theme);\n case 'medium':\n return styles.iconMedium(this.theme);\n case 'small':\n default:\n return styles.iconSmall(this.theme);\n }\n }\n\n private getSizeWrapClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.wrapLarge(this.theme);\n case 'medium':\n return styles.wrapMedium(this.theme);\n case 'small':\n default:\n return styles.wrapSmall(this.theme);\n }\n }\n\n private handleFocus = (e: React.FocusEvent<HTMLButtonElement>) => {\n if (!this.props.disabled && !this.props.disableFocus) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n this.props.onFocus?.(e);\n }\n };\n\n private handleBlur = (e: React.FocusEvent<HTMLButtonElement>) => {\n this.setState({ focusedByTab: false });\n if (!this.props.disabled && !this.props.disableFocus) {\n this.props.onBlur?.(e);\n }\n };\n\n private _ref = (node: HTMLButtonElement | null) => {\n this.node = node;\n };\n}\n\nexport const isButton = isReactUIComponent<ButtonProps>('Button');\n"]}
|
|
1
|
+
{"version":3,"sources":["Button.tsx"],"names":["Button","rootNode","state","focusedByTab","node","handleFocus","e","props","disabled","disableFocus","requestAnimationFrame","keyListener","isTabPressed","setState","onFocus","handleBlur","onBlur","_ref","componentDidMount","autoFocus","focus","getDerivedStateFromProps","loading","blur","render","theme","renderMain","corners","active","borderless","checked","error","warning","arrow","narrow","icon","_noPadding","_noRightPadding","visuallyFocused","align","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onClick","width","children","use","defaultProps","sizeClass","getSizeClassName","isFocused","isLink","rootProps","type","className","styles","root","activeStyles","checkedFocused","checkedDisabled","noPadding","noRightPadding","style","borderTopLeftRadius","Corners","TOP_LEFT","undefined","borderTopRightRadius","TOP_RIGHT","borderBottomRightRadius","BOTTOM_RIGHT","borderBottomLeftRadius","BOTTOM_LEFT","textAlign","tabIndex","title","wrapProps","wrap","wrapArrow","wrapArrowLeft","getSizeWrapClassName","innerShadowNode","globalClasses","innerShadow","outlineNode","outline","outlineWarning","outlineError","outlineLink","outlineLinkWarning","outlineLinkError","loadingNode","getLoadingSpinner","iconNode","getSizeIconClassName","iconNoRightPadding","iconLink","arrowNode","arrowWarning","arrowError","arrowFocus","arrowLeft","arrowHelper","arrowHelperTop","arrowHelperBottom","link","linkFocus","linkDisabled","Object","assign","wrapLink","setRootNode","caption","captionTranslated","captionLink","captionDisabled","visibilityHidden","size","sizeLarge","sizeLargeIE11","isIE11","isEdge","sizeMedium","sizeMediumIE11","sizeSmall","sizeSmallIE11","iconLarge","iconMedium","iconSmall","wrapLarge","wrapMedium","wrapSmall","React","Component","__KONTUR_REACT_UI__","__BUTTON__","isButton"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isReactUIComponent } from '../../lib/utils';\nimport { isIE11, isEdge } from '../../lib/client';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Spinner } from '../Spinner';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles, activeStyles, globalClasses } from './Button.styles';\nimport { Corners } from './Corners';\n\nexport type ButtonSize = 'small' | 'medium' | 'large';\nexport type ButtonType = 'button' | 'submit' | 'reset';\nexport type ButtonUse = 'default' | 'primary' | 'success' | 'danger' | 'pay' | 'link';\n\nexport interface ButtonProps extends CommonProps {\n /** @ignore */\n _noPadding?: boolean;\n\n /** @ignore */\n _noRightPadding?: boolean;\n\n /**\n * Применяет к кнопке стили псевдокласса `:active`.\n */\n active?: boolean;\n\n /**\n * CSS-свойство `text-align`.\n */\n align?: React.CSSProperties['textAlign'];\n\n /**\n * Превращает обычную кнопку в кнопку со стрелкой.\n */\n arrow?: boolean | 'left';\n\n /**\n * Даёт кнопке фокус после окончания загрузки страницы.\n */\n autoFocus?: boolean;\n\n /**\n * Убирает обводку у кнопки.\n */\n borderless?: boolean;\n\n /**\n * @ignore\n */\n checked?: boolean;\n\n children?: React.ReactNode;\n\n /** @ignore */\n corners?: number;\n\n /**\n * Отключенное состояние кнопки.\n */\n disabled?: boolean;\n\n /** @ignore */\n disableFocus?: boolean;\n\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n\n /**\n * Иконка слева от текста кнопки.\n */\n icon?: React.ReactElement<any>;\n\n /**\n * Переводит кнопку в состояние загрузки.\n */\n loading?: boolean;\n\n /**\n * Сужает кнопку.\n */\n narrow?: boolean;\n\n /**\n * HTML-событие `onblur`.\n */\n onBlur?: React.FocusEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onclick`.\n */\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onfocus`.\n */\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `keydown`.\n */\n onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onmouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onmouseover`.\n */\n onMouseOver?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * Задаёт размер кнопки.\n *\n * **Допустимые значения**: `\"small\"`, `\"medium\"`, `\"large\"`.\n */\n size?: ButtonSize;\n\n /**\n * HTML-атрибут `type`.\n */\n type?: ButtonType;\n\n /**\n * HTML-атрибут `title`.\n */\n title?: string;\n\n /**\n * Стиль кнопки.\n *\n * **Допустимые значения**: `\"default\"`, `\"primary\"`, `\"success\"`, `\"danger\"`, `\"pay\"`, `\"link\"`.\n */\n use?: ButtonUse;\n\n /** @ignore */\n visuallyFocused?: boolean;\n\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n\n /**\n * CSS-свойство `width`.\n */\n width?: number | string;\n}\n\nexport interface ButtonState {\n focusedByTab: boolean;\n}\n\n@rootNode\nexport class Button extends React.Component<ButtonProps, ButtonState> {\n public static __KONTUR_REACT_UI__ = 'Button';\n public static __BUTTON__ = true;\n public static TOP_LEFT = Corners.TOP_LEFT;\n public static TOP_RIGHT = Corners.TOP_RIGHT;\n public static BOTTOM_RIGHT = Corners.BOTTOM_RIGHT;\n public static BOTTOM_LEFT = Corners.BOTTOM_LEFT;\n\n public static defaultProps = {\n use: 'default' as ButtonUse,\n size: 'small' as ButtonSize,\n type: 'button' as ButtonType,\n };\n\n public state = {\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private node: HTMLButtonElement | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.autoFocus) {\n keyListener.isTabPressed = true;\n this.focus();\n }\n }\n\n public static getDerivedStateFromProps(props: ButtonProps) {\n if (props.loading || props.disabled) {\n return { focusedByTab: false };\n }\n return null;\n }\n\n /**\n * @public\n */\n public focus() {\n this.node?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.node?.blur();\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 {\n corners = 0,\n active,\n disabled,\n borderless,\n checked,\n error,\n warning,\n loading,\n arrow,\n narrow,\n icon,\n _noPadding,\n _noRightPadding,\n visuallyFocused,\n align,\n disableFocus,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onKeyDown,\n onClick,\n width,\n children,\n } = this.props;\n const use = this.props.use || Button.defaultProps.use;\n const sizeClass = this.getSizeClassName();\n\n const isFocused = this.state.focusedByTab || visuallyFocused;\n const isLink = use === 'link';\n const rootProps = {\n // By default the type attribute is 'submit'. IE8 will fire a click event\n // on this button if somewhere on the page user presses Enter while some\n // input is focused. So we set type to 'button' by default.\n type: this.props.type,\n className: cx({\n [styles.root(this.theme)]: true,\n [styles[use](this.theme)]: true,\n [activeStyles[use](this.theme)]: active,\n [sizeClass]: true,\n [styles.focus(this.theme)]: isFocused,\n [styles.checked(this.theme)]: checked,\n [styles.checkedFocused(this.theme)]: checked && isFocused,\n [styles.disabled(this.theme)]: disabled || loading,\n [styles.checkedDisabled(this.theme)]: checked && disabled,\n [styles.borderless()]: borderless && !disabled && !loading && !checked && !isFocused && !active,\n [styles.narrow()]: narrow,\n [styles.noPadding()]: _noPadding,\n [styles.noRightPadding()]: _noRightPadding,\n }),\n style: {\n borderTopLeftRadius: corners & Corners.TOP_LEFT ? 0 : undefined,\n borderTopRightRadius: corners & Corners.TOP_RIGHT ? 0 : undefined,\n borderBottomRightRadius: corners & Corners.BOTTOM_RIGHT ? 0 : undefined,\n borderBottomLeftRadius: corners & Corners.BOTTOM_LEFT ? 0 : undefined,\n textAlign: align,\n },\n disabled: disabled || loading,\n onClick: onClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onKeyDown: onKeyDown,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n onMouseOver: onMouseOver,\n tabIndex: disableFocus ? -1 : 0,\n title: this.props.title,\n };\n\n const wrapProps = {\n className: cx({\n [styles.wrap(this.theme)]: true,\n [styles.wrapArrow()]: arrow === true,\n [styles.wrapArrowLeft()]: arrow === 'left',\n [this.getSizeWrapClassName()]: true,\n }),\n style: {\n width: width,\n },\n };\n\n const innerShadowNode = <div className={globalClasses.innerShadow} />;\n\n let outlineNode = null;\n if (!isFocused || isLink) {\n outlineNode = (\n <div\n className={cx(styles.outline(), {\n [styles.outlineWarning(this.theme)]: warning,\n [styles.outlineError(this.theme)]: error,\n [styles.outlineLink()]: isLink,\n [styles.outlineLinkWarning(this.theme)]: isLink && warning,\n [styles.outlineLinkError(this.theme)]: isLink && error,\n })}\n />\n );\n }\n\n let loadingNode = null;\n if (loading && !icon) {\n loadingNode = <div className={styles.loading()}>{this.getLoadingSpinner()}</div>;\n }\n\n let iconNode = null;\n if (icon) {\n iconNode = (\n <span\n className={cx(styles.icon(), this.getSizeIconClassName(), {\n [styles.iconNoRightPadding()]: !children,\n [styles.iconLink(this.theme)]: isLink,\n })}\n >\n {loading ? this.getLoadingSpinner() : icon}\n </span>\n );\n }\n\n let arrowNode = null;\n if (arrow) {\n arrowNode = (\n <div\n className={cx({\n [styles.arrow()]: true,\n [styles.arrowWarning(this.theme)]: !checked && warning,\n [styles.arrowError(this.theme)]: !checked && error,\n [styles.arrowFocus(this.theme)]: !checked && isFocused,\n [styles.arrowLeft()]: arrow === 'left',\n })}\n >\n <div className={cx(globalClasses.arrowHelper, globalClasses.arrowHelperTop)} />\n <div className={cx(globalClasses.arrowHelper, globalClasses.arrowHelperBottom)} />\n </div>\n );\n }\n\n // Force disable all props and features, that cannot be use with Link\n if (isLink) {\n rootProps.className = cx({\n [styles.root(this.theme)]: true,\n [sizeClass]: true,\n [styles.link(this.theme)]: true,\n [styles.linkFocus(this.theme)]: isFocused,\n [styles.linkDisabled(this.theme)]: disabled || loading,\n });\n Object.assign(wrapProps, {\n className: cx(styles.wrap(this.theme), styles.wrapLink()),\n style: { width: wrapProps.style.width },\n });\n rootProps.style.textAlign = undefined;\n arrowNode = null;\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <span {...wrapProps}>\n <button ref={this._ref} {...rootProps}>\n {innerShadowNode}\n {outlineNode}\n {loadingNode}\n {arrowNode}\n <div\n className={cx(styles.caption(), globalClasses.caption, {\n [styles.captionTranslated()]: active || checked,\n [styles.captionLink()]: isLink,\n [styles.captionDisabled()]: !checked && disabled,\n })}\n >\n {iconNode}\n <span className={cx({ [styles.visibilityHidden()]: !!loadingNode })}>{children}</span>\n </div>\n </button>\n </span>\n </CommonWrapper>\n );\n }\n\n private getLoadingSpinner() {\n return <Spinner caption={null} dimmed type=\"mini\" />;\n }\n\n private getSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return cx(styles.sizeLarge(this.theme), { [styles.sizeLargeIE11(this.theme)]: isIE11 || isEdge });\n case 'medium':\n return cx(styles.sizeMedium(this.theme), { [styles.sizeMediumIE11(this.theme)]: isIE11 || isEdge });\n case 'small':\n default:\n return cx(styles.sizeSmall(this.theme), { [styles.sizeSmallIE11(this.theme)]: isIE11 || isEdge });\n }\n }\n\n private getSizeIconClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.iconLarge(this.theme);\n case 'medium':\n return styles.iconMedium(this.theme);\n case 'small':\n default:\n return styles.iconSmall(this.theme);\n }\n }\n\n private getSizeWrapClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.wrapLarge(this.theme);\n case 'medium':\n return styles.wrapMedium(this.theme);\n case 'small':\n default:\n return styles.wrapSmall(this.theme);\n }\n }\n\n private handleFocus = (e: React.FocusEvent<HTMLButtonElement>) => {\n if (!this.props.disabled && !this.props.disableFocus) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n this.props.onFocus?.(e);\n }\n };\n\n private handleBlur = (e: React.FocusEvent<HTMLButtonElement>) => {\n this.setState({ focusedByTab: false });\n if (!this.props.disabled && !this.props.disableFocus) {\n this.props.onBlur?.(e);\n }\n };\n\n private _ref = (node: HTMLButtonElement | null) => {\n this.node = node;\n };\n}\n\nexport const isButton = isReactUIComponent<ButtonProps>('Button');\n"]}
|
|
@@ -8,11 +8,11 @@ export interface CheckboxProps extends CommonProps, Override<React.InputHTMLAttr
|
|
|
8
8
|
*/
|
|
9
9
|
children?: React.ReactNode;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Состояние валидации при ошибке.
|
|
12
12
|
*/
|
|
13
13
|
error?: boolean;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Состояние валидации при предупреждении.
|
|
16
16
|
*/
|
|
17
17
|
warning?: boolean;
|
|
18
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Checkbox.tsx"],"names":["Checkbox","rootNode","state","focusedByTab","indeterminate","props","initialIndeterminate","input","React","createRef","componentDidMount","current","setIndeterminate","setState","resetIndeterminate","renderMain","error","warning","onMouseEnter","onMouseLeave","onMouseOver","onValueChange","type","rest","isIndeterminate","rootClass","styles","root","theme","rootFallback","isIE11","isEdge","rootChecked","checked","disabled","Boolean","inputProps","className","onChange","handleChange","onFocus","handleFocus","onBlur","handleBlur","onClick","handleClick","ref","caption","children","captionClass","captionIE11","iconClass","icon","iconUnchecked","box","boxWrapper","globalClasses","boxChecked","boxFocus","boxError","boxWarning","boxDisabled","e","requestAnimationFrame","keyListener","isTabPressed","event","currentTarget","undefined","componentDidUpdate","prevProps","render","setRootNode","focus","blur","PureComponent","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { OkIcon, SquareIcon } from '../../internal/icons/16px';\nimport { isEdge, isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { fixFirefoxModifiedClickOnLabel } from '../../lib/events/fixFirefoxModifiedClickOnLabel';\n\nimport { styles, globalClasses } from './Checkbox.styles';\n\nexport interface CheckboxProps\n extends CommonProps,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Контент `label`\n */\n children?: React.ReactNode;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseover`.\n */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * Функция, вызываемая при изменении `value`.\n */\n onValueChange?: (value: boolean) => void;\n /**\n * HTML-событие `onblur`.\n */\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /**\n * [Неопределённое состояние](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#attr-indeterminate) чекбокса из HTML.\n */\n initialIndeterminate?: boolean;\n }\n > {}\n\nexport interface CheckboxState {\n focusedByTab: boolean;\n indeterminate: boolean;\n}\n@rootNode\nexport class Checkbox extends React.PureComponent<CheckboxProps, CheckboxState> {\n public static __KONTUR_REACT_UI__ = 'Checkbox';\n\n public static propTypes = {\n checked: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n warning: PropTypes.bool,\n onValueChange: PropTypes.func,\n onBlur: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n };\n\n public state = {\n focusedByTab: false,\n indeterminate: this.props.initialIndeterminate || false,\n };\n\n private theme!: Theme;\n private input = React.createRef<HTMLInputElement>();\n\n public componentDidMount = () => {\n if (this.state.indeterminate && this.input.current) {\n this.input.current.indeterminate = true;\n }\n };\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(prevProps: CheckboxProps) {\n if (prevProps.checked !== this.props.checked) {\n this.resetIndeterminate();\n }\n }\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 /**\n * Программная установка фокуса чекбоксу.\n * @public\n */\n public focus() {\n keyListener.isTabPressed = true;\n this.input.current?.focus();\n }\n\n /**\n * Программное снятие фокуса с чекбокса.\n * @public\n */\n public blur() {\n this.input.current?.blur();\n }\n\n /**\n * Устанавливает чекбокс в HTML-состояние `indeterminate`.\n * @public\n */\n public setIndeterminate = () => {\n this.setState({\n indeterminate: true,\n });\n if (this.input.current) {\n this.input.current.indeterminate = true;\n }\n };\n\n /**\n * Снимает с чекбокса HTML-состояние `indeterminate`.\n * @public\n */\n public resetIndeterminate = () => {\n this.setState({\n indeterminate: false,\n });\n if (this.input.current) {\n this.input.current.indeterminate = false;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<CheckboxProps>) => {\n const {\n error,\n warning,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onValueChange,\n type,\n initialIndeterminate,\n ...rest\n } = props;\n const isIndeterminate = this.state.indeterminate;\n\n const rootClass = cx({\n [styles.root(this.theme)]: true,\n [styles.rootFallback()]: isIE11 || isEdge,\n [styles.rootChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n\n const inputProps = {\n ...rest,\n type: 'checkbox',\n className: styles.input(),\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onClick: this.handleClick,\n ref: this.input,\n };\n\n let caption = null;\n if (this.props.children) {\n const captionClass = cx({\n [styles.caption(this.theme)]: true,\n [styles.captionIE11()]: isIE11 || isEdge,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n caption = <span className={captionClass}>{this.props.children}</span>;\n }\n\n const iconClass = cx({\n [styles.icon(this.theme)]: true,\n [styles.iconUnchecked()]: !props.checked && !isIndeterminate,\n });\n\n const box = (\n <div className={cx(styles.boxWrapper(this.theme))}>\n <div\n className={cx(styles.box(this.theme), globalClasses.box, {\n [styles.boxChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.boxFocus(this.theme)]: this.state.focusedByTab,\n [styles.boxError(this.theme)]: props.error,\n [styles.boxWarning(this.theme)]: props.warning,\n [styles.boxDisabled(this.theme)]: props.disabled,\n })}\n >\n {(isIndeterminate && <SquareIcon className={iconClass} />) || <OkIcon className={iconClass} />}\n </div>\n </div>\n );\n\n return (\n <label\n className={rootClass}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n onClick={fixFirefoxModifiedClickOnLabel(this.input)}\n >\n <input {...inputProps} />\n {box}\n {caption}\n </label>\n );\n };\n\n private handleFocus = (e: React.FocusEvent<any>) => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(e);\n }\n }\n };\n\n private handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n this.props.onBlur?.(e);\n this.setState({ focusedByTab: false });\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const checked = event.currentTarget.checked;\n this.props.onValueChange?.(checked);\n\n this.resetIndeterminate();\n\n this.props.onChange?.(event);\n };\n\n private handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n this.props.onClick?.(e);\n // support IE11's and old Edge's special behavior\n // https://github.com/jquery/jquery/issues/1698\n if (this.state.indeterminate && (isIE11 || isEdge)) {\n this.resetIndeterminate();\n // simulate correct behavior only if onValueChange is used\n // because we cant simulate real native onChange event\n if (this.props.onValueChange && this.input.current) {\n const checked = !this.input.current.checked;\n\n if (this.props.checked === undefined) {\n // in case of uncontrolled mode\n this.input.current.checked = checked;\n }\n\n this.props.onValueChange(checked);\n }\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Checkbox.tsx"],"names":["Checkbox","rootNode","state","focusedByTab","indeterminate","props","initialIndeterminate","input","React","createRef","componentDidMount","current","setIndeterminate","setState","resetIndeterminate","renderMain","error","warning","onMouseEnter","onMouseLeave","onMouseOver","onValueChange","type","rest","isIndeterminate","rootClass","styles","root","theme","rootFallback","isIE11","isEdge","rootChecked","checked","disabled","Boolean","inputProps","className","onChange","handleChange","onFocus","handleFocus","onBlur","handleBlur","onClick","handleClick","ref","caption","children","captionClass","captionIE11","iconClass","icon","iconUnchecked","box","boxWrapper","globalClasses","boxChecked","boxFocus","boxError","boxWarning","boxDisabled","e","requestAnimationFrame","keyListener","isTabPressed","event","currentTarget","undefined","componentDidUpdate","prevProps","render","setRootNode","focus","blur","PureComponent","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { OkIcon, SquareIcon } from '../../internal/icons/16px';\nimport { isEdge, isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { fixFirefoxModifiedClickOnLabel } from '../../lib/events/fixFirefoxModifiedClickOnLabel';\n\nimport { styles, globalClasses } from './Checkbox.styles';\n\nexport interface CheckboxProps\n extends CommonProps,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Контент `label`\n */\n children?: React.ReactNode;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseover`.\n */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * Функция, вызываемая при изменении `value`.\n */\n onValueChange?: (value: boolean) => void;\n /**\n * HTML-событие `onblur`.\n */\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /**\n * [Неопределённое состояние](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#attr-indeterminate) чекбокса из HTML.\n */\n initialIndeterminate?: boolean;\n }\n > {}\n\nexport interface CheckboxState {\n focusedByTab: boolean;\n indeterminate: boolean;\n}\n@rootNode\nexport class Checkbox extends React.PureComponent<CheckboxProps, CheckboxState> {\n public static __KONTUR_REACT_UI__ = 'Checkbox';\n\n public static propTypes = {\n checked: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n warning: PropTypes.bool,\n onValueChange: PropTypes.func,\n onBlur: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n };\n\n public state = {\n focusedByTab: false,\n indeterminate: this.props.initialIndeterminate || false,\n };\n\n private theme!: Theme;\n private input = React.createRef<HTMLInputElement>();\n\n public componentDidMount = () => {\n if (this.state.indeterminate && this.input.current) {\n this.input.current.indeterminate = true;\n }\n };\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(prevProps: CheckboxProps) {\n if (prevProps.checked !== this.props.checked) {\n this.resetIndeterminate();\n }\n }\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 /**\n * Программная установка фокуса чекбоксу.\n * @public\n */\n public focus() {\n keyListener.isTabPressed = true;\n this.input.current?.focus();\n }\n\n /**\n * Программное снятие фокуса с чекбокса.\n * @public\n */\n public blur() {\n this.input.current?.blur();\n }\n\n /**\n * Устанавливает чекбокс в HTML-состояние `indeterminate`.\n * @public\n */\n public setIndeterminate = () => {\n this.setState({\n indeterminate: true,\n });\n if (this.input.current) {\n this.input.current.indeterminate = true;\n }\n };\n\n /**\n * Снимает с чекбокса HTML-состояние `indeterminate`.\n * @public\n */\n public resetIndeterminate = () => {\n this.setState({\n indeterminate: false,\n });\n if (this.input.current) {\n this.input.current.indeterminate = false;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<CheckboxProps>) => {\n const {\n error,\n warning,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onValueChange,\n type,\n initialIndeterminate,\n ...rest\n } = props;\n const isIndeterminate = this.state.indeterminate;\n\n const rootClass = cx({\n [styles.root(this.theme)]: true,\n [styles.rootFallback()]: isIE11 || isEdge,\n [styles.rootChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n\n const inputProps = {\n ...rest,\n type: 'checkbox',\n className: styles.input(),\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onClick: this.handleClick,\n ref: this.input,\n };\n\n let caption = null;\n if (this.props.children) {\n const captionClass = cx({\n [styles.caption(this.theme)]: true,\n [styles.captionIE11()]: isIE11 || isEdge,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n caption = <span className={captionClass}>{this.props.children}</span>;\n }\n\n const iconClass = cx({\n [styles.icon(this.theme)]: true,\n [styles.iconUnchecked()]: !props.checked && !isIndeterminate,\n });\n\n const box = (\n <div className={cx(styles.boxWrapper(this.theme))}>\n <div\n className={cx(styles.box(this.theme), globalClasses.box, {\n [styles.boxChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.boxFocus(this.theme)]: this.state.focusedByTab,\n [styles.boxError(this.theme)]: props.error,\n [styles.boxWarning(this.theme)]: props.warning,\n [styles.boxDisabled(this.theme)]: props.disabled,\n })}\n >\n {(isIndeterminate && <SquareIcon className={iconClass} />) || <OkIcon className={iconClass} />}\n </div>\n </div>\n );\n\n return (\n <label\n className={rootClass}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n onClick={fixFirefoxModifiedClickOnLabel(this.input)}\n >\n <input {...inputProps} />\n {box}\n {caption}\n </label>\n );\n };\n\n private handleFocus = (e: React.FocusEvent<any>) => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(e);\n }\n }\n };\n\n private handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n this.props.onBlur?.(e);\n this.setState({ focusedByTab: false });\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const checked = event.currentTarget.checked;\n this.props.onValueChange?.(checked);\n\n this.resetIndeterminate();\n\n this.props.onChange?.(event);\n };\n\n private handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n this.props.onClick?.(e);\n // support IE11's and old Edge's special behavior\n // https://github.com/jquery/jquery/issues/1698\n if (this.state.indeterminate && (isIE11 || isEdge)) {\n this.resetIndeterminate();\n // simulate correct behavior only if onValueChange is used\n // because we cant simulate real native onChange event\n if (this.props.onValueChange && this.input.current) {\n const checked = !this.input.current.checked;\n\n if (this.props.checked === undefined) {\n // in case of uncontrolled mode\n this.input.current.checked = checked;\n }\n\n this.props.onValueChange(checked);\n }\n }\n };\n}\n"]}
|
|
@@ -25,7 +25,7 @@ export interface ComboBoxProps<T> extends CommonProps {
|
|
|
25
25
|
disablePortal?: boolean;
|
|
26
26
|
disabled?: boolean;
|
|
27
27
|
/**
|
|
28
|
-
*
|
|
28
|
+
* Состояние валидации при ошибке.
|
|
29
29
|
*/
|
|
30
30
|
error?: boolean;
|
|
31
31
|
leftIcon?: InputIconType;
|
|
@@ -52,7 +52,7 @@ export interface ComboBoxProps<T> extends CommonProps {
|
|
|
52
52
|
/**
|
|
53
53
|
* Вызывается при изменении текста в поле ввода,
|
|
54
54
|
* если результатом функции будет строка,
|
|
55
|
-
* то она станет следующим
|
|
55
|
+
* то она станет следующим состоянием полем ввода
|
|
56
56
|
*/
|
|
57
57
|
onInputValueChange?: (value: string) => Nullable<string> | void;
|
|
58
58
|
/**
|
|
@@ -113,7 +113,7 @@ export interface ComboBoxProps<T> extends CommonProps {
|
|
|
113
113
|
valueToString: (item: T) => string;
|
|
114
114
|
size?: 'small' | 'medium' | 'large';
|
|
115
115
|
/**
|
|
116
|
-
*
|
|
116
|
+
* Состояние валидации при предупреждении.
|
|
117
117
|
*/
|
|
118
118
|
warning?: boolean;
|
|
119
119
|
width?: string | number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ComboBox.tsx"],"names":["ComboBox","rootNode","comboboxElement","customComboBoxRef","element","setRootNode","focus","blur","search","query","cancelSearch","open","close","selectInputText","reset","render","props","React","Component","__KONTUR_REACT_UI__","defaultProps","itemToValue","item","value","valueToString","label","renderValue","renderItem","menuAlign","searchOnFocus","drawArrow"],"mappings":"sUAAA;;AAEA;;;;;AAKA,8C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkKaA,Q,OADZC,kB;;;;;;;;;;;;;AAcSC,IAAAA,e,GAA+C,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqF/CC,IAAAA,iB,GAAoB,UAACC,OAAD,EAA0C;AACpE,YAAKC,WAAL,CAAiBD,OAAjB;AACA,YAAKF,eAAL,GAAuBE,OAAvB;AACD,K,gDArFD;AACF;AACA,K,OACSE,K,GAAP,iBAAe,CACb,IAAI,KAAKJ,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBI,KAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,I,GAAP,gBAAc,CACZ,IAAI,KAAKL,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBK,IAArB,GACD,CACF,C,CAED;AACF;AACA;AACA;AACA;AACA;AACA,K,QACSC,M,GAAP,gBAAcC,KAAd,EAA8B,CAC5B,IAAI,KAAKP,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBM,MAArB,CAA4BC,KAA5B,EACD,CACF,C,CAED;AACF;AACA,K,QACSC,Y,GAAP,wBAAsB,CACpB,IAAI,KAAKR,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBQ,YAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,I,GAAP,gBAAc,CACZ,IAAI,KAAKT,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBS,IAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,K,GAAP,iBAAe,CACb,IAAI,KAAKV,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBU,KAArB,GACD,CACF,C,CAED;AACF;AACA;AACA,K,QACSC,e,GAAP,2BAAyB,CACvB,IAAI,KAAKX,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBW,eAArB,GACD,CACF,C,CAED;AACF;AACA;AACA,K,QACSC,K,GAAP,iBAAe,CACb,IAAI,KAAKZ,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBY,KAArB,GACD,CACF,C,QAEMC,M,GAAP,kBAAgB,CACd,oBAAO,6BAAC,8BAAD,6BAAoB,KAAKC,KAAzB,IAAgC,GAAG,EAAE,KAAKb,iBAA1C,IAAP,CACD,C,mBAhG6Cc,eAAMC,S,WACtCC,mB,GAAsB,U,UAEtBC,Y,GAAe,EAC3BC,WAAW,EAAE,qBAACC,IAAD,UAAwBA,IAAI,CAACC,KAA7B,EADc,EAE3BC,aAAa,EAAE,uBAACF,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAFY,EAG3BC,WAAW,EAAE,qBAACJ,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAHc,EAI3BE,UAAU,EAAE,oBAACL,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAJe,EAK3BG,SAAS,EAAE,MALgB,EAM3BC,aAAa,EAAE,IANY,EAO3BC,SAAS,EAAE,IAPgB,E","sourcesContent":["import React from 'react';\n\nimport { CustomComboBox } from '../../internal/CustomComboBox';\nimport { Nullable } from '../../typings/utility-types';\nimport { MenuItemState } from '../MenuItem';\nimport { InputIconType } from '../Input';\nimport { CommonProps } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nexport interface ComboBoxProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n /**\n * Вызывает функцию поиска `getItems` при фокусе и очистке поля ввода\n * @default true\n */\n searchOnFocus?: boolean;\n /**\n * Рисует справа иконку в виде стрелки\n * @default true\n */\n drawArrow?: boolean;\n\n autoFocus?: boolean;\n\n borderless?: boolean;\n\n /**\n * Не использовать Portal для рендеринга меню.\n * См. https://github.com/skbkontur/retail-ui/issues/15\n * @default false\n */\n disablePortal?: boolean;\n\n disabled?: boolean;\n /**\n *
|
|
1
|
+
{"version":3,"sources":["ComboBox.tsx"],"names":["ComboBox","rootNode","comboboxElement","customComboBoxRef","element","setRootNode","focus","blur","search","query","cancelSearch","open","close","selectInputText","reset","render","props","React","Component","__KONTUR_REACT_UI__","defaultProps","itemToValue","item","value","valueToString","label","renderValue","renderItem","menuAlign","searchOnFocus","drawArrow"],"mappings":"sUAAA;;AAEA;;;;;AAKA,8C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkKaA,Q,OADZC,kB;;;;;;;;;;;;;AAcSC,IAAAA,e,GAA+C,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqF/CC,IAAAA,iB,GAAoB,UAACC,OAAD,EAA0C;AACpE,YAAKC,WAAL,CAAiBD,OAAjB;AACA,YAAKF,eAAL,GAAuBE,OAAvB;AACD,K,gDArFD;AACF;AACA,K,OACSE,K,GAAP,iBAAe,CACb,IAAI,KAAKJ,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBI,KAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,I,GAAP,gBAAc,CACZ,IAAI,KAAKL,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBK,IAArB,GACD,CACF,C,CAED;AACF;AACA;AACA;AACA;AACA;AACA,K,QACSC,M,GAAP,gBAAcC,KAAd,EAA8B,CAC5B,IAAI,KAAKP,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBM,MAArB,CAA4BC,KAA5B,EACD,CACF,C,CAED;AACF;AACA,K,QACSC,Y,GAAP,wBAAsB,CACpB,IAAI,KAAKR,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBQ,YAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,I,GAAP,gBAAc,CACZ,IAAI,KAAKT,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBS,IAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,K,GAAP,iBAAe,CACb,IAAI,KAAKV,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBU,KAArB,GACD,CACF,C,CAED;AACF;AACA;AACA,K,QACSC,e,GAAP,2BAAyB,CACvB,IAAI,KAAKX,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBW,eAArB,GACD,CACF,C,CAED;AACF;AACA;AACA,K,QACSC,K,GAAP,iBAAe,CACb,IAAI,KAAKZ,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBY,KAArB,GACD,CACF,C,QAEMC,M,GAAP,kBAAgB,CACd,oBAAO,6BAAC,8BAAD,6BAAoB,KAAKC,KAAzB,IAAgC,GAAG,EAAE,KAAKb,iBAA1C,IAAP,CACD,C,mBAhG6Cc,eAAMC,S,WACtCC,mB,GAAsB,U,UAEtBC,Y,GAAe,EAC3BC,WAAW,EAAE,qBAACC,IAAD,UAAwBA,IAAI,CAACC,KAA7B,EADc,EAE3BC,aAAa,EAAE,uBAACF,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAFY,EAG3BC,WAAW,EAAE,qBAACJ,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAHc,EAI3BE,UAAU,EAAE,oBAACL,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAJe,EAK3BG,SAAS,EAAE,MALgB,EAM3BC,aAAa,EAAE,IANY,EAO3BC,SAAS,EAAE,IAPgB,E","sourcesContent":["import React from 'react';\n\nimport { CustomComboBox } from '../../internal/CustomComboBox';\nimport { Nullable } from '../../typings/utility-types';\nimport { MenuItemState } from '../MenuItem';\nimport { InputIconType } from '../Input';\nimport { CommonProps } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nexport interface ComboBoxProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n /**\n * Вызывает функцию поиска `getItems` при фокусе и очистке поля ввода\n * @default true\n */\n searchOnFocus?: boolean;\n /**\n * Рисует справа иконку в виде стрелки\n * @default true\n */\n drawArrow?: boolean;\n\n autoFocus?: boolean;\n\n borderless?: boolean;\n\n /**\n * Не использовать Portal для рендеринга меню.\n * См. https://github.com/skbkontur/retail-ui/issues/15\n * @default false\n */\n disablePortal?: boolean;\n\n disabled?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n\n leftIcon?: InputIconType;\n\n rightIcon?: InputIconType;\n\n /**\n * Функция поиска элементов, должна возвращать Promise с массивом элементов.\n * По умолчанию ожидаются объекты с типом `{ value: string, label: string }`.\n *\n * Элементы могут быть любого типа. В этом случае необходимо определить\n * свойства `itemToValue`, `renderValue`, `renderItem`, `valueToString`\n */\n getItems: (query: string) => Promise<T[]>;\n\n /**\n * Необходим для сравнения полученных результатов с `value`\n * @default item => item.label\n */\n itemToValue: (item: T) => string | number;\n\n maxLength?: number;\n\n menuAlign?: 'left' | 'right';\n\n onBlur?: () => void;\n\n /** Вызывается при изменении `value` */\n onValueChange?: (value: T) => void;\n\n onFocus?: () => void;\n\n /**\n * Вызывается при изменении текста в поле ввода,\n * если результатом функции будет строка,\n * то она станет следующим состоянием полем ввода\n */\n onInputValueChange?: (value: string) => Nullable<string> | void;\n\n /**\n * Функция для обработки ситуации, когда была введена\n * строка в инпут и был потерян фокус с элемента.\n *\n * Если при потере фокуса в выпадающем списке будет только один\n * элемент и результат `renderValue` с этим элементом будет\n * совпадать со значение в текстовом поле, то\n * сработает onValueChange со значением данного элемента\n *\n * Сама функция также может вернуть значение,\n * неравное `undefined`,\n * с которым будет вызван onValueChange.\n */\n onUnexpectedInput?: (value: string) => void | null | T;\n\n placeholder?: string;\n\n /**\n * Функция отрисовки элементов результата поиска.\n * Не применяется если элемент является функцией или React-элементом\n * @default item => item.label\n */\n renderItem: (item: T, state?: MenuItemState) => React.ReactNode;\n\n /**\n * Функция для отрисовки сообщения о пустом результате поиска\n * Если есть renderAddButton - не работает\n */\n renderNotFound?: () => React.ReactNode;\n\n /**\n * Функция отображающая сообщение об общем количестве элементов.\n * `found` учитывает только компонент `MenuItem`. Им \"оборачиваются\" элементы, возвращаемые `getItems()`.\n */\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n\n /**\n * Функция отрисовки выбранного значения\n * @default item => item.label\n */\n renderValue: (item: T) => React.ReactNode;\n\n /**\n * Функция отрисовки кнопки добавления в выпадающем списке\n */\n renderAddButton?: (query?: string) => React.ReactNode;\n\n /**\n * Общее количество элементов.\n * Необходим для работы `renderTotalCount`\n */\n totalCount?: number;\n\n /**\n * Выбранное значение\n * Ожидается, что `value` того же типа что и элементы в массиве,\n * возвращаемом в `getItems`\n */\n value?: Nullable<T>;\n\n /**\n * Необходим для преобразования `value` в строку при фокусировке\n * @default item => item.label\n */\n valueToString: (item: T) => string;\n\n size?: 'small' | 'medium' | 'large';\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n\n width?: string | number;\n\n maxMenuHeight?: number | string;\n\n onMouseEnter?: (e: React.MouseEvent) => void;\n\n onMouseOver?: (e: React.MouseEvent) => void;\n\n onMouseLeave?: (e: React.MouseEvent) => void;\n\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface ComboBoxItem {\n value: string;\n label: string;\n}\n\n@rootNode\nexport class ComboBox<T = ComboBoxItem> extends React.Component<ComboBoxProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBox';\n\n public static defaultProps = {\n itemToValue: (item: ComboBoxItem) => item.value,\n valueToString: (item: ComboBoxItem) => item.label,\n renderValue: (item: ComboBoxItem) => item.label,\n renderItem: (item: ComboBoxItem) => item.label,\n menuAlign: 'left',\n searchOnFocus: true,\n drawArrow: true,\n };\n\n private comboboxElement: Nullable<CustomComboBox<T>> = null;\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public focus() {\n if (this.comboboxElement) {\n this.comboboxElement.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.comboboxElement) {\n this.comboboxElement.blur();\n }\n }\n\n /**\n * Открывает выпадающий список и запускает поиск элементов\n *\n * @public\n * @param {string} [query] Текст поиска. По умолчанию берется\n * текст из инпута или результат `valueToString(value)`\n */\n public search(query?: string) {\n if (this.comboboxElement) {\n this.comboboxElement.search(query);\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.comboboxElement) {\n this.comboboxElement.cancelSearch();\n }\n }\n\n /**\n * @public Открывает выпадающий список\n */\n public open() {\n if (this.comboboxElement) {\n this.comboboxElement.open();\n }\n }\n\n /**\n * @public Закрывает выпадающий список\n */\n public close() {\n if (this.comboboxElement) {\n this.comboboxElement.close();\n }\n }\n\n /**\n * Выделяет текст внутри input\n * @public\n */\n public selectInputText() {\n if (this.comboboxElement) {\n this.comboboxElement.selectInputText();\n }\n }\n\n /**\n * Сбрасывает введенное пользователем значение\n * @public\n */\n public reset() {\n if (this.comboboxElement) {\n this.comboboxElement.reset();\n }\n }\n\n public render() {\n return <CustomComboBox {...this.props} ref={this.customComboBoxRef} />;\n }\n\n private customComboBoxRef = (element: Nullable<CustomComboBox<T>>) => {\n this.setRootNode(element);\n this.comboboxElement = element;\n };\n}\n"]}
|
|
@@ -9,7 +9,7 @@ export interface CurrencyInputProps extends CommonProps, Override<InputProps, {
|
|
|
9
9
|
value: Nullable<number>;
|
|
10
10
|
/** Убрать лишние нули после запятой */
|
|
11
11
|
hideTrailingZeros: boolean;
|
|
12
|
-
/** Кол-во цифр после
|
|
12
|
+
/** Кол-во цифр после запятой */
|
|
13
13
|
fractionDigits?: Nullable<number>;
|
|
14
14
|
/** Отрицательные значения */
|
|
15
15
|
signed?: boolean;
|
|
@@ -406,11 +406,11 @@ CurrencyInput = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*
|
|
|
406
406
|
|
|
407
407
|
handleFocus = function (event) {
|
|
408
408
|
var _event$target = event.target,selectionStart = _event$target.selectionStart,selectionEnd = _event$target.selectionEnd,selectionDirection = _event$target.selectionDirection;
|
|
409
|
-
var
|
|
409
|
+
var valueLength = event.target.value.length;
|
|
410
410
|
|
|
411
411
|
var selection = {
|
|
412
|
-
start: selectionStart !== selectionEnd ? selectionStart || 0 : selectionStart ||
|
|
413
|
-
end: selectionEnd !== selectionStart ? selectionEnd || 0 : selectionEnd ||
|
|
412
|
+
start: selectionStart !== selectionEnd ? selectionStart || 0 : selectionStart || valueLength,
|
|
413
|
+
end: selectionEnd !== selectionStart ? selectionEnd || 0 : selectionEnd || valueLength,
|
|
414
414
|
direction: selectionDirection || 'none' };
|
|
415
415
|
|
|
416
416
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CurrencyInput.tsx"],"names":["CurrencyInput","rootNode","state","getState","props","value","fractionDigits","hideTrailingZeros","focused","tempSelectionForOnChange","SelectionHelper","fromPosition","renderMain","signed","onSubmit","integerDigits","rest","placeholder","CurrencyHelper","format","formatted","handleBlur","handleFocus","handleMouseUp","handleKeyDown","handleValueChange","handlePaste","handleCopy","handleCut","onMouseEnter","onMouseLeave","onMouseOver","refInput","focus","input","blur","debouncedSetSelectionFromEvent","setSelectionFromEvent","event","isIE11","persist","selection","getSelection","target","onKeyDown","defaultPrevented","action","CURRENCY_INPUT_ACTIONS","Ignore","Unknown","preventDefault","Submit","Backspace","inputValue","CurrencyInputHelper","moveCursor","end","Delete","start","MoveCursorLeft","MoveCursorRight","Home","setState","End","length","ExtendSelectionLeft","extendSelection","ExtendSelectionRight","FullSelection","forward","ExtendSelectionToStart","backward","ExtendSelectionToEnd","inputEnd","scrollInput","node","getNode","scrollWidth","clientWidth","PAD","SHIFT","selected","position","direction","charsCount","charWidth","frame","Math","ceil","frameStart","scrollLeft","frameEnd","getInputSelectionFromEvent","step","extended","result","safeInsert","unsigned","parsedValue","parse","onValueChange","blink","getOnChangeDelta","oldValue","substring","substr","delta","data","clipboardData","getData","formatForClipboard","setData","selectionStart","selectionEnd","selectionDirection","valueLenght","onFocus","onBlur","element","componentDidMount","maxLength","undefined","MAX_SAFE_DIGITS","componentDidUpdate","prevProps","prevState","setSelectionRange","render","setRootNode","normilized","normalizeSelection","React","PureComponent","__KONTUR_REACT_UI__","propTypes","align","PropTypes","oneOf","autoFocus","bool","borderless","disabled","error","number","leftIcon","string","size","warning","width","oneOfType","func","isRequired","defaultProps","inputMode","HTMLInputElement","Error"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'warning';\nimport debounce from 'lodash.debounce';\n\nimport { isIE11 } from '../../lib/client';\nimport { Input, InputProps } from '../Input';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { TSetRootNode, rootNode } from '../../lib/rootNode';\n\nimport { MAX_SAFE_DIGITS } from './constants';\nimport { Selection, SelectionDirection, SelectionHelper } from './SelectionHelper';\nimport { CurrencyHelper } from './CurrencyHelper';\nimport { CurrencyInputHelper } from './CurrencyInputHelper';\nimport { CURRENCY_INPUT_ACTIONS, extractAction } from './CurrencyInputKeyboardActions';\n\nexport interface CurrencyInputProps\n extends CommonProps,\n Override<\n InputProps,\n {\n /** Значение */\n value: Nullable<number>;\n /** Убрать лишние нули после запятой */\n hideTrailingZeros: boolean;\n /** Кол-во цифр после зяпятой */\n fractionDigits?: Nullable<number>;\n /** Отрицательные значения */\n signed?: boolean;\n /**\n * Допустимое кол-во цифр целой части.\n * Если передан **0**, или `fractionDigits=15`, то и в целой части допускается только **0**.\n */\n integerDigits?: Nullable<number>;\n /** Вызывается при изменении `value` */\n onValueChange: (value: Nullable<number>) => void;\n /** onSubmit */\n onSubmit?: () => void;\n }\n > {}\n\nexport interface CurrencyInputState {\n formatted: string;\n selection: Selection;\n focused: boolean;\n}\n\n/**\n * Поле для денежных сумм (и других числовых значений).\n * Принимает любые свойства `Input`.\n *\n * Максимальная длина числа - **15 цифр** (с десятичным разделителем в любом месте).\n * <br/>\n * Если `fractionDigits=15`, то в целой части допускается **0**.\n */\n@rootNode\nexport class CurrencyInput extends React.PureComponent<CurrencyInputProps, CurrencyInputState> {\n public static __KONTUR_REACT_UI__ = 'CurrencyInput';\n\n public static propTypes = {\n align: PropTypes.oneOf(['left', 'center', 'right']),\n autoFocus: PropTypes.bool,\n borderless: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n fractionDigits: PropTypes.number,\n hideTrailingZeros: PropTypes.bool,\n leftIcon: PropTypes.element,\n placeholder: PropTypes.string,\n signed: PropTypes.bool,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n value: PropTypes.number,\n warning: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onBlur: PropTypes.func,\n onValueChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onSubmit: PropTypes.func,\n };\n\n public static defaultProps = {\n align: 'right',\n fractionDigits: 2,\n hideTrailingZeros: false,\n value: null,\n inputMode: 'decimal',\n };\n\n public state: CurrencyInputState = {\n ...this.getState(this.props.value, this.props.fractionDigits, this.props.hideTrailingZeros),\n focused: false,\n };\n\n private input: Nullable<Input>;\n private tempSelectionForOnChange: Selection = SelectionHelper.fromPosition(0);\n private setRootNode!: TSetRootNode;\n\n public componentDidMount(): void {\n const { maxLength, integerDigits, fractionDigits } = this.props;\n warning(\n maxLength === undefined,\n `[CurrencyInput]: Prop 'maxLength' has been deprecated. See 'integerDigits' and 'fractionDigits'`,\n );\n warning(\n (integerDigits || 0) + (fractionDigits || 0) <= MAX_SAFE_DIGITS,\n `[CurrencyInput]: Sum of 'integerDigits' and 'fractionDigits' exceeds ${MAX_SAFE_DIGITS}.` +\n `\\nSee https://tech.skbkontur.ru/react-ui/#/CurrencyInput?id=why15`,\n );\n }\n\n public componentDidUpdate(prevProps: CurrencyInputProps, prevState: CurrencyInputState) {\n const { value, fractionDigits, hideTrailingZeros } = this.props;\n if (value !== CurrencyHelper.parse(prevState.formatted) || prevProps.fractionDigits !== fractionDigits) {\n this.setState(this.getState(value, fractionDigits, hideTrailingZeros));\n }\n if (this.state.focused && this.input) {\n const { start, end } = this.state.selection;\n\n this.input.setSelectionRange(start, end);\n }\n if (prevState.selection !== this.state.selection) {\n this.scrollInput();\n }\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<CurrencyInputProps>) => {\n const { fractionDigits, signed, onSubmit, integerDigits, hideTrailingZeros, ...rest } = props;\n const placeholder =\n this.props.placeholder == null\n ? CurrencyHelper.format(0, { fractionDigits, hideTrailingZeros })\n : this.props.placeholder;\n\n return (\n <Input\n {...rest}\n value={this.state.formatted}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onMouseUp={this.handleMouseUp}\n onKeyDown={this.handleKeyDown}\n onValueChange={this.handleValueChange}\n onPaste={this.handlePaste}\n onCopy={this.handleCopy}\n onCut={this.handleCut}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n ref={this.refInput}\n placeholder={this.state.focused ? '' : placeholder}\n />\n );\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.input) {\n this.input.focus();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n if (this.input) {\n this.input.blur();\n }\n };\n\n private getState(value: Nullable<number>, fractionDigits: Nullable<number>, hideTrailingZeros: boolean) {\n return {\n formatted: CurrencyHelper.format(value, { fractionDigits, hideTrailingZeros }),\n selection: SelectionHelper.fromPosition(0),\n };\n }\n\n private setSelectionFromEvent(event: React.MouseEvent<HTMLInputElement>) {\n const selection = getInputSelectionFromEvent(event.target);\n const normilized = CurrencyInputHelper.normalizeSelection(this.state.formatted, selection);\n this.setState({ selection: normilized });\n }\n\n // for IE11\n private readonly debouncedSetSelectionFromEvent = debounce(this.setSelectionFromEvent, 300);\n\n private handleMouseUp = (event: React.MouseEvent<HTMLInputElement>) => {\n if (isIE11) {\n event.persist();\n this.debouncedSetSelectionFromEvent(event);\n } else {\n this.setSelectionFromEvent(event);\n }\n };\n\n private handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n this.tempSelectionForOnChange = selection;\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(event);\n if (event.defaultPrevented) {\n return;\n }\n }\n\n const action = extractAction(event);\n\n if (action === CURRENCY_INPUT_ACTIONS.Ignore) {\n return;\n }\n\n if (action !== CURRENCY_INPUT_ACTIONS.Unknown) {\n event.preventDefault();\n }\n\n switch (action) {\n case CURRENCY_INPUT_ACTIONS.Submit: {\n if (this.props.onSubmit) {\n this.props.onSubmit();\n }\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Backspace: {\n this.inputValue(CurrencyInputHelper.moveCursor(this.state.formatted, selection, -1), selection.end, '');\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Delete: {\n this.inputValue(selection.start, CurrencyInputHelper.moveCursor(this.state.formatted, selection, +1), '');\n return;\n }\n case CURRENCY_INPUT_ACTIONS.MoveCursorLeft: {\n this.moveCursor(selection, -1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.MoveCursorRight: {\n this.moveCursor(selection, +1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Home: {\n this.setState({ selection: SelectionHelper.fromPosition(0) });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.End: {\n const end = this.state.formatted.length;\n this.setState({ selection: SelectionHelper.fromPosition(end) });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionLeft: {\n this.extendSelection(selection, -1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionRight: {\n this.extendSelection(selection, +1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.FullSelection: {\n this.setState({\n selection: SelectionHelper.forward(0, this.state.formatted.length),\n });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionToStart: {\n this.setState({\n selection: SelectionHelper.backward(0, selection.start),\n });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionToEnd: {\n const inputEnd = this.state.formatted.length;\n this.setState({\n selection: SelectionHelper.forward(selection.start, inputEnd),\n });\n return;\n }\n }\n };\n\n private scrollInput = () => {\n const node = this.input?.getNode();\n if (!node || node.scrollWidth === node.clientWidth) {\n return;\n }\n const PAD = 1;\n const SHIFT = 3;\n\n const selection = this.state.selection;\n const selected = selection.start !== selection.end;\n const position = selected && selection.direction === 'forward' ? selection.end : selection.start;\n const charsCount = this.state.formatted.length;\n const charWidth = node.scrollWidth / charsCount;\n const frame = Math.ceil(node.clientWidth / charWidth);\n const frameStart = Math.ceil(node.scrollLeft / charWidth);\n const frameEnd = frameStart + frame;\n\n if (position < frameStart + PAD) {\n node.scrollLeft = (position - SHIFT) * charWidth;\n }\n if (position > frameEnd - PAD) {\n node.scrollLeft = (position - frame + SHIFT) * charWidth;\n }\n };\n\n private getSelection = (input: EventTarget): Selection => {\n const selection = getInputSelectionFromEvent(input);\n return {\n start: selection.start,\n end: selection.end,\n direction: this.state.selection.direction,\n };\n };\n\n private moveCursor = (selection: Selection, step: number) => {\n const position = CurrencyInputHelper.moveCursor(this.state.formatted, selection, step);\n this.setState({ selection: SelectionHelper.fromPosition(position) });\n };\n\n private extendSelection = (selection: Selection, step: number) => {\n const extended = CurrencyInputHelper.extendSelection(this.state.formatted, selection, step);\n this.setState({ selection: extended });\n };\n\n private inputValue = (start: number, end: number, value: string) => {\n const result = CurrencyInputHelper.safeInsert(this.state.formatted, start, end, value, {\n integerDigits: this.props.integerDigits,\n fractionDigits: this.props.fractionDigits,\n unsigned: !this.props.signed,\n });\n if (result) {\n const formatted = result.value;\n const selection = SelectionHelper.fromPosition(result.position);\n this.setState({ formatted, selection }, () => {\n const parsedValue = CurrencyHelper.parse(formatted);\n if (this.props.value !== parsedValue) {\n this.props.onValueChange(parsedValue);\n }\n });\n return true;\n }\n\n if (this.input) {\n this.input.blink();\n }\n return false;\n };\n\n private getOnChangeDelta = (value: string) => {\n const selection = this.tempSelectionForOnChange;\n const oldValue = this.state.formatted;\n if (selection.start !== selection.end) {\n return value.substring(selection.start, value.length - (oldValue.length - selection.end));\n } else if (value.length > oldValue.length) {\n return value.substr(selection.start, value.length - oldValue.length);\n }\n return null;\n };\n\n private handleValueChange = (value: string): void => {\n const selection = this.tempSelectionForOnChange;\n const delta = this.getOnChangeDelta(value);\n if (delta != null && !this.inputValue(selection.start, selection.end, delta)) {\n this.setState({ selection });\n }\n };\n\n private handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const data = event.clipboardData.getData('text');\n const selection = this.getSelection(event.target);\n this.inputValue(selection.start, selection.end, data);\n event.preventDefault();\n };\n\n private handleCopy = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n if (selection.start !== selection.end) {\n const substring = this.state.formatted.substring(selection.start, selection.end);\n const data = CurrencyHelper.formatForClipboard(substring);\n event.clipboardData.setData('text', data);\n }\n event.preventDefault();\n };\n\n private handleCut = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n if (selection.start !== selection.end) {\n const substring = this.state.formatted.substring(selection.start, selection.end);\n const data = CurrencyHelper.formatForClipboard(substring);\n event.clipboardData.setData('text', data);\n this.inputValue(selection.start, selection.end, '');\n }\n event.preventDefault();\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n const { selectionStart, selectionEnd, selectionDirection } = event.target;\n const valueLenght = event.target.value.length;\n\n const selection = {\n start: selectionStart !== selectionEnd ? selectionStart || 0 : selectionStart || valueLenght,\n end: selectionEnd !== selectionStart ? selectionEnd || 0 : selectionEnd || valueLenght,\n direction: (selectionDirection as SelectionDirection) || 'none',\n };\n\n this.setState({\n focused: true,\n selection,\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const value = CurrencyHelper.parse(this.state.formatted);\n\n this.setState({\n ...this.getState(value, this.props.fractionDigits, this.props.hideTrailingZeros),\n focused: false,\n });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private refInput = (element: Nullable<Input>) => {\n this.input = element;\n };\n}\n\nfunction getInputSelectionFromEvent(input: EventTarget): Selection {\n if (!(input instanceof HTMLInputElement)) {\n throw new Error('input is not HTMLInputElement');\n }\n\n return {\n start: input.selectionStart!,\n end: input.selectionEnd!,\n direction: input.selectionDirection as SelectionDirection,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["CurrencyInput.tsx"],"names":["CurrencyInput","rootNode","state","getState","props","value","fractionDigits","hideTrailingZeros","focused","tempSelectionForOnChange","SelectionHelper","fromPosition","renderMain","signed","onSubmit","integerDigits","rest","placeholder","CurrencyHelper","format","formatted","handleBlur","handleFocus","handleMouseUp","handleKeyDown","handleValueChange","handlePaste","handleCopy","handleCut","onMouseEnter","onMouseLeave","onMouseOver","refInput","focus","input","blur","debouncedSetSelectionFromEvent","setSelectionFromEvent","event","isIE11","persist","selection","getSelection","target","onKeyDown","defaultPrevented","action","CURRENCY_INPUT_ACTIONS","Ignore","Unknown","preventDefault","Submit","Backspace","inputValue","CurrencyInputHelper","moveCursor","end","Delete","start","MoveCursorLeft","MoveCursorRight","Home","setState","End","length","ExtendSelectionLeft","extendSelection","ExtendSelectionRight","FullSelection","forward","ExtendSelectionToStart","backward","ExtendSelectionToEnd","inputEnd","scrollInput","node","getNode","scrollWidth","clientWidth","PAD","SHIFT","selected","position","direction","charsCount","charWidth","frame","Math","ceil","frameStart","scrollLeft","frameEnd","getInputSelectionFromEvent","step","extended","result","safeInsert","unsigned","parsedValue","parse","onValueChange","blink","getOnChangeDelta","oldValue","substring","substr","delta","data","clipboardData","getData","formatForClipboard","setData","selectionStart","selectionEnd","selectionDirection","valueLength","onFocus","onBlur","element","componentDidMount","maxLength","undefined","MAX_SAFE_DIGITS","componentDidUpdate","prevProps","prevState","setSelectionRange","render","setRootNode","normilized","normalizeSelection","React","PureComponent","__KONTUR_REACT_UI__","propTypes","align","PropTypes","oneOf","autoFocus","bool","borderless","disabled","error","number","leftIcon","string","size","warning","width","oneOfType","func","isRequired","defaultProps","inputMode","HTMLInputElement","Error"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'warning';\nimport debounce from 'lodash.debounce';\n\nimport { isIE11 } from '../../lib/client';\nimport { Input, InputProps } from '../Input';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { TSetRootNode, rootNode } from '../../lib/rootNode';\n\nimport { MAX_SAFE_DIGITS } from './constants';\nimport { Selection, SelectionDirection, SelectionHelper } from './SelectionHelper';\nimport { CurrencyHelper } from './CurrencyHelper';\nimport { CurrencyInputHelper } from './CurrencyInputHelper';\nimport { CURRENCY_INPUT_ACTIONS, extractAction } from './CurrencyInputKeyboardActions';\n\nexport interface CurrencyInputProps\n extends CommonProps,\n Override<\n InputProps,\n {\n /** Значение */\n value: Nullable<number>;\n /** Убрать лишние нули после запятой */\n hideTrailingZeros: boolean;\n /** Кол-во цифр после запятой */\n fractionDigits?: Nullable<number>;\n /** Отрицательные значения */\n signed?: boolean;\n /**\n * Допустимое кол-во цифр целой части.\n * Если передан **0**, или `fractionDigits=15`, то и в целой части допускается только **0**.\n */\n integerDigits?: Nullable<number>;\n /** Вызывается при изменении `value` */\n onValueChange: (value: Nullable<number>) => void;\n /** onSubmit */\n onSubmit?: () => void;\n }\n > {}\n\nexport interface CurrencyInputState {\n formatted: string;\n selection: Selection;\n focused: boolean;\n}\n\n/**\n * Поле для денежных сумм (и других числовых значений).\n * Принимает любые свойства `Input`.\n *\n * Максимальная длина числа - **15 цифр** (с десятичным разделителем в любом месте).\n * <br/>\n * Если `fractionDigits=15`, то в целой части допускается **0**.\n */\n@rootNode\nexport class CurrencyInput extends React.PureComponent<CurrencyInputProps, CurrencyInputState> {\n public static __KONTUR_REACT_UI__ = 'CurrencyInput';\n\n public static propTypes = {\n align: PropTypes.oneOf(['left', 'center', 'right']),\n autoFocus: PropTypes.bool,\n borderless: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n fractionDigits: PropTypes.number,\n hideTrailingZeros: PropTypes.bool,\n leftIcon: PropTypes.element,\n placeholder: PropTypes.string,\n signed: PropTypes.bool,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n value: PropTypes.number,\n warning: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onBlur: PropTypes.func,\n onValueChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onSubmit: PropTypes.func,\n };\n\n public static defaultProps = {\n align: 'right',\n fractionDigits: 2,\n hideTrailingZeros: false,\n value: null,\n inputMode: 'decimal',\n };\n\n public state: CurrencyInputState = {\n ...this.getState(this.props.value, this.props.fractionDigits, this.props.hideTrailingZeros),\n focused: false,\n };\n\n private input: Nullable<Input>;\n private tempSelectionForOnChange: Selection = SelectionHelper.fromPosition(0);\n private setRootNode!: TSetRootNode;\n\n public componentDidMount(): void {\n const { maxLength, integerDigits, fractionDigits } = this.props;\n warning(\n maxLength === undefined,\n `[CurrencyInput]: Prop 'maxLength' has been deprecated. See 'integerDigits' and 'fractionDigits'`,\n );\n warning(\n (integerDigits || 0) + (fractionDigits || 0) <= MAX_SAFE_DIGITS,\n `[CurrencyInput]: Sum of 'integerDigits' and 'fractionDigits' exceeds ${MAX_SAFE_DIGITS}.` +\n `\\nSee https://tech.skbkontur.ru/react-ui/#/CurrencyInput?id=why15`,\n );\n }\n\n public componentDidUpdate(prevProps: CurrencyInputProps, prevState: CurrencyInputState) {\n const { value, fractionDigits, hideTrailingZeros } = this.props;\n if (value !== CurrencyHelper.parse(prevState.formatted) || prevProps.fractionDigits !== fractionDigits) {\n this.setState(this.getState(value, fractionDigits, hideTrailingZeros));\n }\n if (this.state.focused && this.input) {\n const { start, end } = this.state.selection;\n\n this.input.setSelectionRange(start, end);\n }\n if (prevState.selection !== this.state.selection) {\n this.scrollInput();\n }\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<CurrencyInputProps>) => {\n const { fractionDigits, signed, onSubmit, integerDigits, hideTrailingZeros, ...rest } = props;\n const placeholder =\n this.props.placeholder == null\n ? CurrencyHelper.format(0, { fractionDigits, hideTrailingZeros })\n : this.props.placeholder;\n\n return (\n <Input\n {...rest}\n value={this.state.formatted}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onMouseUp={this.handleMouseUp}\n onKeyDown={this.handleKeyDown}\n onValueChange={this.handleValueChange}\n onPaste={this.handlePaste}\n onCopy={this.handleCopy}\n onCut={this.handleCut}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n ref={this.refInput}\n placeholder={this.state.focused ? '' : placeholder}\n />\n );\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.input) {\n this.input.focus();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n if (this.input) {\n this.input.blur();\n }\n };\n\n private getState(value: Nullable<number>, fractionDigits: Nullable<number>, hideTrailingZeros: boolean) {\n return {\n formatted: CurrencyHelper.format(value, { fractionDigits, hideTrailingZeros }),\n selection: SelectionHelper.fromPosition(0),\n };\n }\n\n private setSelectionFromEvent(event: React.MouseEvent<HTMLInputElement>) {\n const selection = getInputSelectionFromEvent(event.target);\n const normilized = CurrencyInputHelper.normalizeSelection(this.state.formatted, selection);\n this.setState({ selection: normilized });\n }\n\n // for IE11\n private readonly debouncedSetSelectionFromEvent = debounce(this.setSelectionFromEvent, 300);\n\n private handleMouseUp = (event: React.MouseEvent<HTMLInputElement>) => {\n if (isIE11) {\n event.persist();\n this.debouncedSetSelectionFromEvent(event);\n } else {\n this.setSelectionFromEvent(event);\n }\n };\n\n private handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n this.tempSelectionForOnChange = selection;\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(event);\n if (event.defaultPrevented) {\n return;\n }\n }\n\n const action = extractAction(event);\n\n if (action === CURRENCY_INPUT_ACTIONS.Ignore) {\n return;\n }\n\n if (action !== CURRENCY_INPUT_ACTIONS.Unknown) {\n event.preventDefault();\n }\n\n switch (action) {\n case CURRENCY_INPUT_ACTIONS.Submit: {\n if (this.props.onSubmit) {\n this.props.onSubmit();\n }\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Backspace: {\n this.inputValue(CurrencyInputHelper.moveCursor(this.state.formatted, selection, -1), selection.end, '');\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Delete: {\n this.inputValue(selection.start, CurrencyInputHelper.moveCursor(this.state.formatted, selection, +1), '');\n return;\n }\n case CURRENCY_INPUT_ACTIONS.MoveCursorLeft: {\n this.moveCursor(selection, -1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.MoveCursorRight: {\n this.moveCursor(selection, +1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Home: {\n this.setState({ selection: SelectionHelper.fromPosition(0) });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.End: {\n const end = this.state.formatted.length;\n this.setState({ selection: SelectionHelper.fromPosition(end) });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionLeft: {\n this.extendSelection(selection, -1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionRight: {\n this.extendSelection(selection, +1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.FullSelection: {\n this.setState({\n selection: SelectionHelper.forward(0, this.state.formatted.length),\n });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionToStart: {\n this.setState({\n selection: SelectionHelper.backward(0, selection.start),\n });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionToEnd: {\n const inputEnd = this.state.formatted.length;\n this.setState({\n selection: SelectionHelper.forward(selection.start, inputEnd),\n });\n return;\n }\n }\n };\n\n private scrollInput = () => {\n const node = this.input?.getNode();\n if (!node || node.scrollWidth === node.clientWidth) {\n return;\n }\n const PAD = 1;\n const SHIFT = 3;\n\n const selection = this.state.selection;\n const selected = selection.start !== selection.end;\n const position = selected && selection.direction === 'forward' ? selection.end : selection.start;\n const charsCount = this.state.formatted.length;\n const charWidth = node.scrollWidth / charsCount;\n const frame = Math.ceil(node.clientWidth / charWidth);\n const frameStart = Math.ceil(node.scrollLeft / charWidth);\n const frameEnd = frameStart + frame;\n\n if (position < frameStart + PAD) {\n node.scrollLeft = (position - SHIFT) * charWidth;\n }\n if (position > frameEnd - PAD) {\n node.scrollLeft = (position - frame + SHIFT) * charWidth;\n }\n };\n\n private getSelection = (input: EventTarget): Selection => {\n const selection = getInputSelectionFromEvent(input);\n return {\n start: selection.start,\n end: selection.end,\n direction: this.state.selection.direction,\n };\n };\n\n private moveCursor = (selection: Selection, step: number) => {\n const position = CurrencyInputHelper.moveCursor(this.state.formatted, selection, step);\n this.setState({ selection: SelectionHelper.fromPosition(position) });\n };\n\n private extendSelection = (selection: Selection, step: number) => {\n const extended = CurrencyInputHelper.extendSelection(this.state.formatted, selection, step);\n this.setState({ selection: extended });\n };\n\n private inputValue = (start: number, end: number, value: string) => {\n const result = CurrencyInputHelper.safeInsert(this.state.formatted, start, end, value, {\n integerDigits: this.props.integerDigits,\n fractionDigits: this.props.fractionDigits,\n unsigned: !this.props.signed,\n });\n if (result) {\n const formatted = result.value;\n const selection = SelectionHelper.fromPosition(result.position);\n this.setState({ formatted, selection }, () => {\n const parsedValue = CurrencyHelper.parse(formatted);\n if (this.props.value !== parsedValue) {\n this.props.onValueChange(parsedValue);\n }\n });\n return true;\n }\n\n if (this.input) {\n this.input.blink();\n }\n return false;\n };\n\n private getOnChangeDelta = (value: string) => {\n const selection = this.tempSelectionForOnChange;\n const oldValue = this.state.formatted;\n if (selection.start !== selection.end) {\n return value.substring(selection.start, value.length - (oldValue.length - selection.end));\n } else if (value.length > oldValue.length) {\n return value.substr(selection.start, value.length - oldValue.length);\n }\n return null;\n };\n\n private handleValueChange = (value: string): void => {\n const selection = this.tempSelectionForOnChange;\n const delta = this.getOnChangeDelta(value);\n if (delta != null && !this.inputValue(selection.start, selection.end, delta)) {\n this.setState({ selection });\n }\n };\n\n private handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const data = event.clipboardData.getData('text');\n const selection = this.getSelection(event.target);\n this.inputValue(selection.start, selection.end, data);\n event.preventDefault();\n };\n\n private handleCopy = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n if (selection.start !== selection.end) {\n const substring = this.state.formatted.substring(selection.start, selection.end);\n const data = CurrencyHelper.formatForClipboard(substring);\n event.clipboardData.setData('text', data);\n }\n event.preventDefault();\n };\n\n private handleCut = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n if (selection.start !== selection.end) {\n const substring = this.state.formatted.substring(selection.start, selection.end);\n const data = CurrencyHelper.formatForClipboard(substring);\n event.clipboardData.setData('text', data);\n this.inputValue(selection.start, selection.end, '');\n }\n event.preventDefault();\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n const { selectionStart, selectionEnd, selectionDirection } = event.target;\n const valueLength = event.target.value.length;\n\n const selection = {\n start: selectionStart !== selectionEnd ? selectionStart || 0 : selectionStart || valueLength,\n end: selectionEnd !== selectionStart ? selectionEnd || 0 : selectionEnd || valueLength,\n direction: (selectionDirection as SelectionDirection) || 'none',\n };\n\n this.setState({\n focused: true,\n selection,\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const value = CurrencyHelper.parse(this.state.formatted);\n\n this.setState({\n ...this.getState(value, this.props.fractionDigits, this.props.hideTrailingZeros),\n focused: false,\n });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private refInput = (element: Nullable<Input>) => {\n this.input = element;\n };\n}\n\nfunction getInputSelectionFromEvent(input: EventTarget): Selection {\n if (!(input instanceof HTMLInputElement)) {\n throw new Error('input is not HTMLInputElement');\n }\n\n return {\n start: input.selectionStart!,\n end: input.selectionEnd!,\n direction: input.selectionDirection as SelectionDirection,\n };\n}\n"]}
|
|
@@ -12,11 +12,11 @@ export interface DateInputProps extends CommonProps {
|
|
|
12
12
|
autoFocus?: boolean;
|
|
13
13
|
value: string;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Состояние валидации при ошибке.
|
|
16
16
|
*/
|
|
17
17
|
error?: boolean;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Состояние валидации при предупреждении.
|
|
20
20
|
*/
|
|
21
21
|
warning?: boolean;
|
|
22
22
|
disabled?: boolean;
|