@skbkontur/react-ui 4.14.2-next.1 → 4.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/CHANGELOG.md +14 -12
  2. package/cjs/components/Button/ArrowLeftIcon.d.ts +1 -1
  3. package/cjs/components/Button/ArrowRightIcon.d.ts +1 -1
  4. package/cjs/components/Button/Button.d.ts +1 -0
  5. package/cjs/components/Button/Button.js +10 -1
  6. package/cjs/components/Button/Button.js.map +1 -1
  7. package/cjs/components/Button/ButtonIcon.d.ts +3 -1
  8. package/cjs/components/Button/ButtonIcon.js +18 -2
  9. package/cjs/components/Button/ButtonIcon.js.map +1 -1
  10. package/cjs/components/Checkbox/CheckedIcon.d.ts +1 -1
  11. package/cjs/components/Checkbox/IndeterminateIcon.d.ts +1 -1
  12. package/cjs/components/DateInput/CalendarIcon.d.ts +1 -1
  13. package/cjs/components/FileUploader/UploadIcon.d.ts +1 -1
  14. package/cjs/components/FxInput/MathFunctionIcon.d.ts +1 -1
  15. package/cjs/components/FxInput/UndoIcon.d.ts +1 -1
  16. package/cjs/components/Input/InputLayout/InputLayoutAsideIcon.js +15 -4
  17. package/cjs/components/Input/InputLayout/InputLayoutAsideIcon.js.map +1 -1
  18. package/cjs/components/Kebab/Kebab.js +18 -2
  19. package/cjs/components/Kebab/Kebab.js.map +1 -1
  20. package/cjs/components/Kebab/KebabIcon.d.ts +1 -1
  21. package/cjs/components/Paging/ForwardIcon.d.ts +1 -1
  22. package/cjs/components/PasswordInput/ClosedIcon.d.ts +1 -1
  23. package/cjs/components/PasswordInput/OpenedIcon.d.ts +1 -1
  24. package/cjs/components/Select/ArrowDownIcon.d.ts +1 -1
  25. package/cjs/components/Toast/Toast.md +16 -12
  26. package/cjs/internal/CloseButtonIcon/CrossIcon.d.ts +1 -1
  27. package/cjs/internal/CustomComboBox/ArrowDownIcon.d.ts +1 -1
  28. package/cjs/internal/FileUploaderControl/FileUploaderFile/DeleteIcon.d.ts +1 -1
  29. package/cjs/internal/FileUploaderControl/FileUploaderFile/ErrorIcon.d.ts +1 -1
  30. package/cjs/internal/FileUploaderControl/FileUploaderFile/OkIcon.d.ts +1 -1
  31. package/cjs/internal/icons2022/LoadingIcon.d.ts +1 -1
  32. package/cjs/internal/icons2022/iconSizer.d.ts +1 -1
  33. package/cjs/internal/icons2022/iconSizer.js +3 -1
  34. package/cjs/internal/icons2022/iconSizer.js.map +1 -1
  35. package/cjs/internal/themes/Theme2022.js +1 -1
  36. package/cjs/internal/themes/Theme2022.js.map +1 -1
  37. package/cjs/lib/forwardRefAndName.d.ts +4 -0
  38. package/cjs/lib/forwardRefAndName.js +22 -1
  39. package/cjs/lib/forwardRefAndName.js.map +1 -1
  40. package/cjs/lib/utils.d.ts +1 -0
  41. package/cjs/lib/utils.js +6 -2
  42. package/cjs/lib/utils.js.map +1 -1
  43. package/components/Button/ArrowLeftIcon.d.ts +1 -1
  44. package/components/Button/ArrowRightIcon.d.ts +1 -1
  45. package/components/Button/Button/Button.js +16 -3
  46. package/components/Button/Button/Button.js.map +1 -1
  47. package/components/Button/Button.d.ts +1 -0
  48. package/components/Button/ButtonIcon/ButtonIcon.js +20 -1
  49. package/components/Button/ButtonIcon/ButtonIcon.js.map +1 -1
  50. package/components/Button/ButtonIcon.d.ts +3 -1
  51. package/components/Checkbox/CheckedIcon.d.ts +1 -1
  52. package/components/Checkbox/IndeterminateIcon.d.ts +1 -1
  53. package/components/DateInput/CalendarIcon.d.ts +1 -1
  54. package/components/FileUploader/UploadIcon.d.ts +1 -1
  55. package/components/FxInput/MathFunctionIcon.d.ts +1 -1
  56. package/components/FxInput/UndoIcon.d.ts +1 -1
  57. package/components/Input/InputLayout/InputLayoutAsideIcon/InputLayoutAsideIcon.js +20 -4
  58. package/components/Input/InputLayout/InputLayoutAsideIcon/InputLayoutAsideIcon.js.map +1 -1
  59. package/components/Kebab/Kebab/Kebab.js +19 -5
  60. package/components/Kebab/Kebab/Kebab.js.map +1 -1
  61. package/components/Kebab/KebabIcon.d.ts +1 -1
  62. package/components/Paging/ForwardIcon.d.ts +1 -1
  63. package/components/PasswordInput/ClosedIcon.d.ts +1 -1
  64. package/components/PasswordInput/OpenedIcon.d.ts +1 -1
  65. package/components/Select/ArrowDownIcon.d.ts +1 -1
  66. package/components/Toast/Toast.md +16 -12
  67. package/internal/CloseButtonIcon/CrossIcon.d.ts +1 -1
  68. package/internal/CustomComboBox/ArrowDownIcon.d.ts +1 -1
  69. package/internal/FileUploaderControl/FileUploaderFile/DeleteIcon.d.ts +1 -1
  70. package/internal/FileUploaderControl/FileUploaderFile/ErrorIcon.d.ts +1 -1
  71. package/internal/FileUploaderControl/FileUploaderFile/OkIcon.d.ts +1 -1
  72. package/internal/icons2022/LoadingIcon.d.ts +1 -1
  73. package/internal/icons2022/iconSizer/iconSizer.js +2 -2
  74. package/internal/icons2022/iconSizer/iconSizer.js.map +1 -1
  75. package/internal/icons2022/iconSizer.d.ts +1 -1
  76. package/internal/themes/Theme2022/Theme2022.js +2 -2
  77. package/internal/themes/Theme2022/Theme2022.js.map +1 -1
  78. package/lib/forwardRefAndName/forwardRefAndName.js +11 -0
  79. package/lib/forwardRefAndName/forwardRefAndName.js.map +1 -1
  80. package/lib/forwardRefAndName.d.ts +4 -0
  81. package/lib/utils/utils.js +4 -1
  82. package/lib/utils/utils.js.map +1 -1
  83. package/lib/utils.d.ts +1 -0
  84. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -3,24 +3,14 @@
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.14.2-next.1](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.14.2-next.0...@skbkontur/react-ui@4.14.2-next.1) (2023-06-08)
7
-
8
-
9
- ### Features
10
-
11
- * **Calendar:** add new public component Calendar ([#2888](https://github.com/skbkontur/retail-ui/issues/2888)) ([d846750](https://github.com/skbkontur/retail-ui/commit/d846750cf4fd2553573a1598e71a775479a028fb))
12
-
13
-
14
-
15
-
16
-
17
- ## [4.14.2-next.0](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.14.1...@skbkontur/react-ui@4.14.2-next.0) (2023-06-07)
6
+ # [4.15.0](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.14.2...@skbkontur/react-ui@4.15.0) (2023-06-13)
18
7
 
19
8
 
20
9
  ### Bug Fixes
21
10
 
22
11
  * **Button:** correct link outline position (#IF-867) ([#3132](https://github.com/skbkontur/retail-ui/issues/3132)) ([49c7842](https://github.com/skbkontur/retail-ui/commit/49c7842d5e5a6e04788d0da084346461d424a2e2)), closes [#IF-867](https://github.com/skbkontur/retail-ui/issues/IF-867)
23
12
  * **ComboBox:** use flushSync due to auto-batching in React18 ([#3144](https://github.com/skbkontur/retail-ui/issues/3144)) ([16bac3c](https://github.com/skbkontur/retail-ui/commit/16bac3c6f41c15409c23f2e3adbade630fa247ea))
13
+ * **Link:** change color and hover color ([#3182](https://github.com/skbkontur/retail-ui/issues/3182)) ([6ed5bd4](https://github.com/skbkontur/retail-ui/commit/6ed5bd4bfe0a358b86739a72e67d09353c1a4511))
24
14
  * **Modal:** configure z-index to correctly work with other components ([#3104](https://github.com/skbkontur/retail-ui/issues/3104)) ([0532871](https://github.com/skbkontur/retail-ui/commit/05328718368c146100665f6b3aa5a03a2810b9c3))
25
15
  * **ScrollContainer:** scroll disappears after toggling disabled ([#3152](https://github.com/skbkontur/retail-ui/issues/3152)) ([f1c3444](https://github.com/skbkontur/retail-ui/commit/f1c34444d595b14dcd2d397e6a25c45d2c2bc62c))
26
16
  * **Spinner:** avoid circle clipping ([#3153](https://github.com/skbkontur/retail-ui/issues/3153)) ([80c2b59](https://github.com/skbkontur/retail-ui/commit/80c2b593da303f8e56feabc5d6d922c72a9175d7))
@@ -29,6 +19,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
29
19
  ### Features
30
20
 
31
21
  * **Button, Modal, SidePage, Switcher:** pass props for a11y ([#3163](https://github.com/skbkontur/retail-ui/issues/3163)) ([694e8d9](https://github.com/skbkontur/retail-ui/commit/694e8d97fb07842cc925cfdacc35b167fb1ff9b3))
22
+ * **Calendar:** add new public component Calendar ([#2888](https://github.com/skbkontur/retail-ui/issues/2888)) ([d6871c5](https://github.com/skbkontur/retail-ui/commit/d6871c5ee3ed9b3b553f7a1e89da6d37ccd3d211))
23
+
24
+
25
+
26
+
27
+
28
+ ## [4.14.2](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.14.1...@skbkontur/react-ui@4.14.2) (2023-06-09)
29
+
30
+
31
+ ### Bug Fixes
32
+
33
+ * **Button, Input, Kebab:** resize icons according to control's size ([#3183](https://github.com/skbkontur/retail-ui/issues/3183)) ([7dd6e9f](https://github.com/skbkontur/retail-ui/commit/7dd6e9fb0e5899f8fd092888082fd88c2e0e781f))
32
34
 
33
35
 
34
36
 
@@ -1,3 +1,3 @@
1
- export declare const ArrowLeftIcon: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
1
+ export declare const ArrowLeftIcon: import("../../lib/forwardRefAndName").ReactUIIconWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
2
2
  size?: number | "small" | "medium" | "large" | undefined;
3
3
  }>;
@@ -1,3 +1,3 @@
1
- export declare const ArrowRightIcon: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
1
+ export declare const ArrowRightIcon: import("../../lib/forwardRefAndName").ReactUIIconWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
2
2
  size?: number | "small" | "medium" | "large" | undefined;
3
3
  }>;
@@ -154,6 +154,7 @@ export declare class Button extends React.Component<ButtonProps, ButtonState> {
154
154
  blur(): void;
155
155
  render(): JSX.Element;
156
156
  private renderMain;
157
+ private renderIcon2022;
157
158
  private getSizeClassName;
158
159
  private getSizeWrapClassName;
159
160
  private handleFocus;
@@ -497,6 +497,15 @@ Button = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functi
497
497
 
498
498
 
499
499
 
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
500
509
 
501
510
 
502
511
 
@@ -538,4 +547,4 @@ Button = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functi
538
547
  // on this button if somewhere on the page user presses Enter while some
539
548
  // input is focused. So we set type to 'button' by default.
540
549
  type: type, role: role, 'aria-describedby': ariaDescribedby, 'aria-haspopup': ariaHasPopup, 'aria-controls': ariaControls, 'aria-label': ariaLabel, 'aria-checked': ariaChecked, className: rootClassName, style: (0, _extends2.default)({ textAlign: align }, corners), 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[wrapClassNameWithArrow] = true, _cx2[this.getSizeWrapClassName()] = true, _cx2)), style: { width: width } };var innerShadowNode = _isTheme2022 ? null : /*#__PURE__*/_react.default.createElement("div", { className: _Button.globalClasses.innerShadow });var outlineNode = null;var isDisabled2022 = _isTheme2022 && (disabled || loading);if ((!isFocused || isLink) && !isDisabled2022) {var _cx3;outlineNode = /*#__PURE__*/_react.default.createElement("div", { style: { zIndex: _isTheme2022 && isLink ? -1 : undefined }, 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 iconNode = icon && /*#__PURE__*/_react.default.createElement(_ButtonIcon.ButtonIcon, { icon: icon, size: size, hasChildren: Boolean(children), disabled: disabled || false, loading: loading || false, use: use });var loadingNode = null;if (loading && !icon) {var loadingIcon = _isTheme2022 ? /*#__PURE__*/_react.default.createElement(_LoadingIcon.LoadingIcon, { size: size }) : /*#__PURE__*/_react.default.createElement(_Spinner.Spinner, { caption: null, dimmed: true, type: "mini" });loadingNode = /*#__PURE__*/_react.default.createElement("div", { className: _Button.styles.loading() }, loadingIcon);} // Force disable all props and features, that cannot be use with Link
541
- if (isLink) {var _cx4;rootProps.className = (0, _Emotion.cx)((_cx4 = {}, _cx4[_Button.styles.root(this.theme)] = true, _cx4[sizeClass] = true, _cx4[_Button.styles.link(this.theme)] = true, _cx4[_Button.styles.linkLineHeight()] = !_client.isSafari || _client.isSafari && !_isTheme2022, _cx4[_Button.styles.linkLineHeightSafariFallback()] = _client.isSafari && _isTheme2022, _cx4[_Button.styles.linkFocus(this.theme)] = isFocused, _cx4[_Button.styles.linkDisabled(this.theme)] = disabled || loading, _cx4));Object.assign(wrapProps, { className: (0, _Emotion.cx)(_Button.styles.wrap(this.theme), _Button.styles.wrapLink()), style: { width: wrapProps.style.width } });rootProps.style.textAlign = undefined;}var captionNode = /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Button.styles.caption(), _Button.globalClasses.caption, (_cx5 = {}, _cx5[_Button.styles.captionTranslated()] = (active || checked) && !loading && !_isTheme2022, _cx5[_Button.styles.captionLink()] = isLink, _cx5[_Button.styles.captionDisabled()] = !checked && disabled, _cx5)) }, loadingNode, iconNode, /*#__PURE__*/_react.default.createElement("span", { className: (0, _Emotion.cx)(_Button.globalClasses.text, (_cx6 = {}, _cx6[_Button.styles.visibilityHidden()] = !!loadingNode, _cx6)) }, children));if (_isTheme2022 && isLink && !loading) {captionNode = /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: (0, _getInnerLinkTheme.getInnerLinkTheme)(this.theme) }, /*#__PURE__*/_react.default.createElement(_Link.Link, { focused: isFocused, disabled: disabled, icon: icon, as: "span", tabIndex: -1 }, children));}return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement("span", wrapProps, /*#__PURE__*/_react.default.createElement("button", (0, _extends2.default)({ "data-tid": ButtonDataTids.root, ref: this._ref }, rootProps), innerShadowNode, outlineNode, arrowNode, captionNode)));};_proto.getSizeClassName = function getSizeClassName() {var _cx7, _cx8, _cx9;var _isTheme2022 = (0, _ThemeHelpers.isTheme2022)(this.theme);switch (this.getProps().size) {case 'large':return (0, _Emotion.cx)(_Button.styles.sizeLarge(this.theme), (_cx7 = {}, _cx7[_Button.styles.sizeLargeIE11(this.theme)] = _client.isIE11 || _client.isEdge, _cx7[_Button.styles.sizeLargeWithIcon(this.theme)] = !!this.props.icon, _cx7[_Button.styles.sizeLargeWithIconWithoutText(this.theme)] = _isTheme2022 && !!this.props.icon && !this.props.children, _cx7));case 'medium':return (0, _Emotion.cx)(_Button.styles.sizeMedium(this.theme), (_cx8 = {}, _cx8[_Button.styles.sizeMediumIE11(this.theme)] = _client.isIE11 || _client.isEdge, _cx8[_Button.styles.sizeMediumWithIcon(this.theme)] = !!this.props.icon, _cx8[_Button.styles.sizeMediumWithIconWithoutText(this.theme)] = _isTheme2022 && !!this.props.icon && !this.props.children, _cx8));case 'small':default:return (0, _Emotion.cx)(_Button.styles.sizeSmall(this.theme), (_cx9 = {}, _cx9[_Button.styles.sizeSmallIE11(this.theme)] = _client.isIE11 || _client.isEdge, _cx9[_Button.styles.sizeSmallWithIcon(this.theme)] = !!this.props.icon, _cx9[_Button.styles.sizeSmallWithIconWithoutText(this.theme)] = _isTheme2022 && !!this.props.icon && !this.props.children, _cx9));}};_proto.getSizeWrapClassName = function getSizeWrapClassName() {switch (this.getProps().size) {case 'large':return _Button.styles.wrapLarge(this.theme);case 'medium':return _Button.styles.wrapMedium(this.theme);case 'small':default:return _Button.styles.wrapSmall(this.theme);}};return Button;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Button', _class2.__BUTTON__ = true, _class2.defaultProps = { use: 'default', size: 'small', type: 'button' }, _temp)) || _class;exports.Button = Button;var isButton = (0, _utils.isReactUIComponent)('Button');exports.isButton = isButton;
550
+ if (isLink) {var _cx4;rootProps.className = (0, _Emotion.cx)((_cx4 = {}, _cx4[_Button.styles.root(this.theme)] = true, _cx4[sizeClass] = true, _cx4[_Button.styles.link(this.theme)] = true, _cx4[_Button.styles.linkLineHeight()] = !_client.isSafari || _client.isSafari && !_isTheme2022, _cx4[_Button.styles.linkLineHeightSafariFallback()] = _client.isSafari && _isTheme2022, _cx4[_Button.styles.linkFocus(this.theme)] = isFocused, _cx4[_Button.styles.linkDisabled(this.theme)] = disabled || loading, _cx4));Object.assign(wrapProps, { className: (0, _Emotion.cx)(_Button.styles.wrap(this.theme), _Button.styles.wrapLink()), style: { width: wrapProps.style.width } });rootProps.style.textAlign = undefined;}var captionNode = /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Button.styles.caption(), _Button.globalClasses.caption, (_cx5 = {}, _cx5[_Button.styles.captionTranslated()] = (active || checked) && !loading && !_isTheme2022, _cx5[_Button.styles.captionLink()] = isLink, _cx5[_Button.styles.captionDisabled()] = !checked && disabled, _cx5)) }, loadingNode, iconNode, /*#__PURE__*/_react.default.createElement("span", { className: (0, _Emotion.cx)(_Button.globalClasses.text, (_cx6 = {}, _cx6[_Button.styles.visibilityHidden()] = !!loadingNode, _cx6)) }, children));if (_isTheme2022 && isLink && !loading) {captionNode = /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: (0, _getInnerLinkTheme.getInnerLinkTheme)(this.theme) }, /*#__PURE__*/_react.default.createElement(_Link.Link, { focused: isFocused, disabled: disabled, icon: this.renderIcon2022(icon), as: "span", tabIndex: -1 }, children));}return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement("span", wrapProps, /*#__PURE__*/_react.default.createElement("button", (0, _extends2.default)({ "data-tid": ButtonDataTids.root, ref: this._ref }, rootProps), innerShadowNode, outlineNode, arrowNode, captionNode)));};_proto.renderIcon2022 = function renderIcon2022(icon) {if (icon && (0, _utils.isKonturIcon)(icon)) {var _icon$props$size;var sizes = (0, _ButtonIcon.getButtonIconSizes)(this.theme);return /*#__PURE__*/_react.default.cloneElement(icon, { size: (_icon$props$size = icon.props.size) != null ? _icon$props$size : sizes[this.getProps().size] });}return icon;};_proto.getSizeClassName = function getSizeClassName() {var _cx7, _cx8, _cx9;var _isTheme2022 = (0, _ThemeHelpers.isTheme2022)(this.theme);switch (this.getProps().size) {case 'large':return (0, _Emotion.cx)(_Button.styles.sizeLarge(this.theme), (_cx7 = {}, _cx7[_Button.styles.sizeLargeIE11(this.theme)] = _client.isIE11 || _client.isEdge, _cx7[_Button.styles.sizeLargeWithIcon(this.theme)] = !!this.props.icon, _cx7[_Button.styles.sizeLargeWithIconWithoutText(this.theme)] = _isTheme2022 && !!this.props.icon && !this.props.children, _cx7));case 'medium':return (0, _Emotion.cx)(_Button.styles.sizeMedium(this.theme), (_cx8 = {}, _cx8[_Button.styles.sizeMediumIE11(this.theme)] = _client.isIE11 || _client.isEdge, _cx8[_Button.styles.sizeMediumWithIcon(this.theme)] = !!this.props.icon, _cx8[_Button.styles.sizeMediumWithIconWithoutText(this.theme)] = _isTheme2022 && !!this.props.icon && !this.props.children, _cx8));case 'small':default:return (0, _Emotion.cx)(_Button.styles.sizeSmall(this.theme), (_cx9 = {}, _cx9[_Button.styles.sizeSmallIE11(this.theme)] = _client.isIE11 || _client.isEdge, _cx9[_Button.styles.sizeSmallWithIcon(this.theme)] = !!this.props.icon, _cx9[_Button.styles.sizeSmallWithIconWithoutText(this.theme)] = _isTheme2022 && !!this.props.icon && !this.props.children, _cx9));}};_proto.getSizeWrapClassName = function getSizeWrapClassName() {switch (this.getProps().size) {case 'large':return _Button.styles.wrapLarge(this.theme);case 'medium':return _Button.styles.wrapMedium(this.theme);case 'small':default:return _Button.styles.wrapSmall(this.theme);}};return Button;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Button', _class2.__BUTTON__ = true, _class2.defaultProps = { use: 'default', size: 'small', type: 'button' }, _temp)) || _class;exports.Button = Button;var isButton = (0, _utils.isReactUIComponent)('Button');exports.isButton = isButton;
@@ -1 +1 @@
1
- {"version":3,"sources":["Button.tsx"],"names":["ButtonDataTids","root","Button","rootNode","getProps","defaultProps","state","focusedByTab","node","handleFocus","e","props","disabled","disableFocus","requestAnimationFrame","keyListener","isTabPressed","setState","onFocus","handleBlur","onBlur","_ref","componentDidMount","autoFocus","focus","getDerivedStateFromProps","loading","blur","render","theme","ThemeFactory","create","renderMain","corners","active","borderless","checked","error","warning","narrow","icon","_noPadding","_noRightPadding","visuallyFocused","align","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onClick","width","children","ariaDescribedby","ariaHasPopup","ariaControls","ariaLabel","ariaChecked","role","use","type","size","sizeClass","getSizeClassName","isFocused","isLink","_isTheme2022","Boolean","wrapClassNameWithArrow","rootClassNameWithArrow","arrowNode","rootClassName","trueDisabled","cx","styles","noPadding","noRightPadding","checkedDisabled","checkedDisabled2022","borderless2022","activeStyles","checked2022","checkedFocused","simulatedPress","rootProps","className","style","textAlign","tabIndex","title","wrapProps","wrap","getSizeWrapClassName","innerShadowNode","globalClasses","innerShadow","outlineNode","isDisabled2022","zIndex","undefined","outline","outlineWarning","outlineError","outlineLink","outlineLinkWarning","outlineLinkError","iconNode","loadingNode","loadingIcon","link","linkLineHeight","isSafari","linkLineHeightSafariFallback","linkFocus","linkDisabled","Object","assign","wrapLink","captionNode","caption","captionTranslated","captionLink","captionDisabled","text","visibilityHidden","setRootNode","sizeLarge","sizeLargeIE11","isIE11","isEdge","sizeLargeWithIcon","sizeLargeWithIconWithoutText","sizeMedium","sizeMediumIE11","sizeMediumWithIcon","sizeMediumWithIconWithoutText","sizeSmall","sizeSmallIE11","sizeSmallWithIcon","sizeSmallWithIconWithoutText","wrapLarge","wrapMedium","wrapSmall","React","Component","__KONTUR_REACT_UI__","__BUTTON__","isButton"],"mappings":"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","sourcesContent":["import React, { AriaAttributes, HTMLAttributes } from 'react';\n\nimport { isReactUIComponent } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { Link } from '../Link';\nimport { Spinner } from '../Spinner';\nimport { LoadingIcon } from '../../internal/icons2022/LoadingIcon';\n\nimport { styles, activeStyles, globalClasses } from './Button.styles';\nimport { ButtonIcon } from './ButtonIcon';\nimport { useButtonArrow } from './ButtonArrow';\nimport { getInnerLinkTheme } from './getInnerLinkTheme';\n\nexport type ButtonSize = 'small' | 'medium' | 'large';\nexport type ButtonType = 'button' | 'submit' | 'reset';\nexport type ButtonUse = 'default' | 'primary' | 'success' | 'danger' | 'pay' | 'link' | 'text' | 'backless';\n\nexport interface ButtonProps\n extends CommonProps,\n Pick<AriaAttributes, 'aria-haspopup' | 'aria-describedby' | 'aria-controls' | 'aria-label' | 'aria-checked'>,\n Pick<HTMLAttributes<unknown>, 'role'> {\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?: React.CSSProperties;\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\"`, `\"text\"`, `\"backless\"`.\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 /**\n * Обычный объект с переменными темы.\n * Он будет объединён с темой из контекста.\n */\n theme?: ThemeIn;\n}\n\nexport interface ButtonState {\n focusedByTab: boolean;\n}\n\nexport const ButtonDataTids = {\n root: 'Button__root',\n} as const;\n\ntype DefaultProps = Required<Pick<ButtonProps, 'use' | 'size' | 'type'>>;\n\n@rootNode\nexport class Button extends React.Component<ButtonProps, ButtonState> {\n public static __KONTUR_REACT_UI__ = 'Button';\n public static __BUTTON__ = true;\n\n public static defaultProps: DefaultProps = {\n use: 'default',\n size: 'small',\n type: 'button',\n };\n\n private getProps = createPropsGetter(Button.defaultProps);\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 = this.props.theme ? ThemeFactory.create(this.props.theme as Theme, theme) : theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const {\n corners,\n active,\n disabled,\n borderless,\n checked,\n error,\n warning,\n loading,\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 'aria-describedby': ariaDescribedby,\n 'aria-haspopup': ariaHasPopup,\n 'aria-controls': ariaControls,\n 'aria-label': ariaLabel,\n 'aria-checked': ariaChecked,\n role,\n } = this.props;\n const { use, type, size } = this.getProps();\n const sizeClass = this.getSizeClassName();\n\n const isFocused = this.state.focusedByTab || visuallyFocused;\n const isLink = use === 'link';\n const _isTheme2022 = isTheme2022(this.theme);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [wrapClassNameWithArrow, rootClassNameWithArrow, arrowNode] = useButtonArrow(\n { ...this.props, isFocused: Boolean(isFocused) },\n this.theme,\n );\n\n let rootClassName = '';\n if (_isTheme2022) {\n const trueDisabled = disabled || loading;\n rootClassName = cx(\n styles.root(this.theme),\n styles[use](this.theme),\n sizeClass,\n narrow && styles.narrow(),\n _noPadding && styles.noPadding(),\n _noRightPadding && styles.noRightPadding(),\n rootClassNameWithArrow,\n ...(trueDisabled\n ? [\n styles.disabled(this.theme),\n checked && styles.checkedDisabled(this.theme),\n checked && styles.checkedDisabled2022(this.theme),\n borderless && styles.borderless2022(),\n ]\n : [\n active && !checked && activeStyles[use](this.theme),\n isFocused && styles.focus(this.theme),\n checked && styles.checked2022(this.theme),\n checked && isFocused && styles.checkedFocused(this.theme),\n borderless && !checked && !isFocused && styles.borderless2022(),\n ]),\n );\n } else {\n rootClassName = cx({\n [styles.root(this.theme)]: true,\n [styles.simulatedPress()]: 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 }\n\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,\n role,\n 'aria-describedby': ariaDescribedby,\n 'aria-haspopup': ariaHasPopup,\n 'aria-controls': ariaControls,\n 'aria-label': ariaLabel,\n 'aria-checked': ariaChecked,\n className: rootClassName,\n style: {\n textAlign: align,\n ...corners,\n },\n disabled: disabled || loading,\n onClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onKeyDown,\n onMouseEnter,\n onMouseLeave,\n 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 [wrapClassNameWithArrow]: true,\n [this.getSizeWrapClassName()]: true,\n }),\n style: {\n width,\n },\n };\n\n const innerShadowNode = _isTheme2022 ? null : <div className={globalClasses.innerShadow} />;\n\n let outlineNode = null;\n const isDisabled2022 = _isTheme2022 && (disabled || loading);\n if ((!isFocused || isLink) && !isDisabled2022) {\n outlineNode = (\n <div\n style={{ zIndex: _isTheme2022 && isLink ? -1 : undefined }}\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 const iconNode = icon && (\n <ButtonIcon\n icon={icon}\n size={size}\n hasChildren={Boolean(children)}\n disabled={disabled || false}\n loading={loading || false}\n use={use}\n />\n );\n let loadingNode = null;\n if (loading && !icon) {\n const loadingIcon = _isTheme2022 ? <LoadingIcon size={size} /> : <Spinner caption={null} dimmed type=\"mini\" />;\n loadingNode = <div className={styles.loading()}>{loadingIcon}</div>;\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.linkLineHeight()]: !isSafari || (isSafari && !_isTheme2022),\n [styles.linkLineHeightSafariFallback()]: isSafari && _isTheme2022,\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 }\n\n let captionNode = (\n <div\n className={cx(styles.caption(), globalClasses.caption, {\n [styles.captionTranslated()]: (active || checked) && !loading && !_isTheme2022,\n [styles.captionLink()]: isLink,\n [styles.captionDisabled()]: !checked && disabled,\n })}\n >\n {loadingNode}\n {iconNode}\n <span\n className={cx(globalClasses.text, {\n [styles.visibilityHidden()]: !!loadingNode,\n })}\n >\n {children}\n </span>\n </div>\n );\n if (_isTheme2022 && isLink && !loading) {\n captionNode = (\n <ThemeContext.Provider value={getInnerLinkTheme(this.theme)}>\n <Link focused={isFocused} disabled={disabled} icon={icon} as=\"span\" tabIndex={-1}>\n {children}\n </Link>\n </ThemeContext.Provider>\n );\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <span {...wrapProps}>\n <button data-tid={ButtonDataTids.root} ref={this._ref} {...rootProps}>\n {innerShadowNode}\n {outlineNode}\n {arrowNode}\n {captionNode}\n </button>\n </span>\n </CommonWrapper>\n );\n }\n\n private getSizeClassName() {\n const _isTheme2022 = isTheme2022(this.theme);\n switch (this.getProps().size) {\n case 'large':\n return cx(styles.sizeLarge(this.theme), {\n [styles.sizeLargeIE11(this.theme)]: isIE11 || isEdge,\n [styles.sizeLargeWithIcon(this.theme)]: !!this.props.icon,\n [styles.sizeLargeWithIconWithoutText(this.theme)]: _isTheme2022 && !!this.props.icon && !this.props.children,\n });\n case 'medium':\n return cx(styles.sizeMedium(this.theme), {\n [styles.sizeMediumIE11(this.theme)]: isIE11 || isEdge,\n [styles.sizeMediumWithIcon(this.theme)]: !!this.props.icon,\n [styles.sizeMediumWithIconWithoutText(this.theme)]: _isTheme2022 && !!this.props.icon && !this.props.children,\n });\n case 'small':\n default:\n return cx(styles.sizeSmall(this.theme), {\n [styles.sizeSmallIE11(this.theme)]: isIE11 || isEdge,\n [styles.sizeSmallWithIcon(this.theme)]: !!this.props.icon,\n [styles.sizeSmallWithIconWithoutText(this.theme)]: _isTheme2022 && !!this.props.icon && !this.props.children,\n });\n }\n }\n\n private getSizeWrapClassName() {\n switch (this.getProps().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":["ButtonDataTids","root","Button","rootNode","getProps","defaultProps","state","focusedByTab","node","handleFocus","e","props","disabled","disableFocus","requestAnimationFrame","keyListener","isTabPressed","setState","onFocus","handleBlur","onBlur","_ref","componentDidMount","autoFocus","focus","getDerivedStateFromProps","loading","blur","render","theme","ThemeFactory","create","renderMain","corners","active","borderless","checked","error","warning","narrow","icon","_noPadding","_noRightPadding","visuallyFocused","align","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onClick","width","children","ariaDescribedby","ariaHasPopup","ariaControls","ariaLabel","ariaChecked","role","use","type","size","sizeClass","getSizeClassName","isFocused","isLink","_isTheme2022","Boolean","wrapClassNameWithArrow","rootClassNameWithArrow","arrowNode","rootClassName","trueDisabled","cx","styles","noPadding","noRightPadding","checkedDisabled","checkedDisabled2022","borderless2022","activeStyles","checked2022","checkedFocused","simulatedPress","rootProps","className","style","textAlign","tabIndex","title","wrapProps","wrap","getSizeWrapClassName","innerShadowNode","globalClasses","innerShadow","outlineNode","isDisabled2022","zIndex","undefined","outline","outlineWarning","outlineError","outlineLink","outlineLinkWarning","outlineLinkError","iconNode","loadingNode","loadingIcon","link","linkLineHeight","isSafari","linkLineHeightSafariFallback","linkFocus","linkDisabled","Object","assign","wrapLink","captionNode","caption","captionTranslated","captionLink","captionDisabled","text","visibilityHidden","renderIcon2022","setRootNode","sizes","React","cloneElement","sizeLarge","sizeLargeIE11","isIE11","isEdge","sizeLargeWithIcon","sizeLargeWithIconWithoutText","sizeMedium","sizeMediumIE11","sizeMediumWithIcon","sizeMediumWithIconWithoutText","sizeSmall","sizeSmallIE11","sizeSmallWithIcon","sizeSmallWithIconWithoutText","wrapLarge","wrapMedium","wrapSmall","Component","__KONTUR_REACT_UI__","__BUTTON__","isButton"],"mappings":"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","sourcesContent":["import React, { AriaAttributes, HTMLAttributes } from 'react';\n\nimport { isKonturIcon, isReactUIComponent } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { Link } from '../Link';\nimport { Spinner } from '../Spinner';\nimport { LoadingIcon } from '../../internal/icons2022/LoadingIcon';\n\nimport { styles, activeStyles, globalClasses } from './Button.styles';\nimport { ButtonIcon, getButtonIconSizes } from './ButtonIcon';\nimport { useButtonArrow } from './ButtonArrow';\nimport { getInnerLinkTheme } from './getInnerLinkTheme';\n\nexport type ButtonSize = 'small' | 'medium' | 'large';\nexport type ButtonType = 'button' | 'submit' | 'reset';\nexport type ButtonUse = 'default' | 'primary' | 'success' | 'danger' | 'pay' | 'link' | 'text' | 'backless';\n\nexport interface ButtonProps\n extends CommonProps,\n Pick<AriaAttributes, 'aria-haspopup' | 'aria-describedby' | 'aria-controls' | 'aria-label' | 'aria-checked'>,\n Pick<HTMLAttributes<unknown>, 'role'> {\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?: React.CSSProperties;\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\"`, `\"text\"`, `\"backless\"`.\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 /**\n * Обычный объект с переменными темы.\n * Он будет объединён с темой из контекста.\n */\n theme?: ThemeIn;\n}\n\nexport interface ButtonState {\n focusedByTab: boolean;\n}\n\nexport const ButtonDataTids = {\n root: 'Button__root',\n} as const;\n\ntype DefaultProps = Required<Pick<ButtonProps, 'use' | 'size' | 'type'>>;\n\n@rootNode\nexport class Button extends React.Component<ButtonProps, ButtonState> {\n public static __KONTUR_REACT_UI__ = 'Button';\n public static __BUTTON__ = true;\n\n public static defaultProps: DefaultProps = {\n use: 'default',\n size: 'small',\n type: 'button',\n };\n\n private getProps = createPropsGetter(Button.defaultProps);\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 = this.props.theme ? ThemeFactory.create(this.props.theme as Theme, theme) : theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const {\n corners,\n active,\n disabled,\n borderless,\n checked,\n error,\n warning,\n loading,\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 'aria-describedby': ariaDescribedby,\n 'aria-haspopup': ariaHasPopup,\n 'aria-controls': ariaControls,\n 'aria-label': ariaLabel,\n 'aria-checked': ariaChecked,\n role,\n } = this.props;\n const { use, type, size } = this.getProps();\n const sizeClass = this.getSizeClassName();\n\n const isFocused = this.state.focusedByTab || visuallyFocused;\n const isLink = use === 'link';\n const _isTheme2022 = isTheme2022(this.theme);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [wrapClassNameWithArrow, rootClassNameWithArrow, arrowNode] = useButtonArrow(\n { ...this.props, isFocused: Boolean(isFocused) },\n this.theme,\n );\n\n let rootClassName = '';\n if (_isTheme2022) {\n const trueDisabled = disabled || loading;\n rootClassName = cx(\n styles.root(this.theme),\n styles[use](this.theme),\n sizeClass,\n narrow && styles.narrow(),\n _noPadding && styles.noPadding(),\n _noRightPadding && styles.noRightPadding(),\n rootClassNameWithArrow,\n ...(trueDisabled\n ? [\n styles.disabled(this.theme),\n checked && styles.checkedDisabled(this.theme),\n checked && styles.checkedDisabled2022(this.theme),\n borderless && styles.borderless2022(),\n ]\n : [\n active && !checked && activeStyles[use](this.theme),\n isFocused && styles.focus(this.theme),\n checked && styles.checked2022(this.theme),\n checked && isFocused && styles.checkedFocused(this.theme),\n borderless && !checked && !isFocused && styles.borderless2022(),\n ]),\n );\n } else {\n rootClassName = cx({\n [styles.root(this.theme)]: true,\n [styles.simulatedPress()]: 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 }\n\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,\n role,\n 'aria-describedby': ariaDescribedby,\n 'aria-haspopup': ariaHasPopup,\n 'aria-controls': ariaControls,\n 'aria-label': ariaLabel,\n 'aria-checked': ariaChecked,\n className: rootClassName,\n style: {\n textAlign: align,\n ...corners,\n },\n disabled: disabled || loading,\n onClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onKeyDown,\n onMouseEnter,\n onMouseLeave,\n 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 [wrapClassNameWithArrow]: true,\n [this.getSizeWrapClassName()]: true,\n }),\n style: {\n width,\n },\n };\n\n const innerShadowNode = _isTheme2022 ? null : <div className={globalClasses.innerShadow} />;\n\n let outlineNode = null;\n const isDisabled2022 = _isTheme2022 && (disabled || loading);\n if ((!isFocused || isLink) && !isDisabled2022) {\n outlineNode = (\n <div\n style={{ zIndex: _isTheme2022 && isLink ? -1 : undefined }}\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 const iconNode = icon && (\n <ButtonIcon\n icon={icon}\n size={size}\n hasChildren={Boolean(children)}\n disabled={disabled || false}\n loading={loading || false}\n use={use}\n />\n );\n let loadingNode = null;\n if (loading && !icon) {\n const loadingIcon = _isTheme2022 ? <LoadingIcon size={size} /> : <Spinner caption={null} dimmed type=\"mini\" />;\n loadingNode = <div className={styles.loading()}>{loadingIcon}</div>;\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.linkLineHeight()]: !isSafari || (isSafari && !_isTheme2022),\n [styles.linkLineHeightSafariFallback()]: isSafari && _isTheme2022,\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 }\n\n let captionNode = (\n <div\n className={cx(styles.caption(), globalClasses.caption, {\n [styles.captionTranslated()]: (active || checked) && !loading && !_isTheme2022,\n [styles.captionLink()]: isLink,\n [styles.captionDisabled()]: !checked && disabled,\n })}\n >\n {loadingNode}\n {iconNode}\n <span\n className={cx(globalClasses.text, {\n [styles.visibilityHidden()]: !!loadingNode,\n })}\n >\n {children}\n </span>\n </div>\n );\n if (_isTheme2022 && isLink && !loading) {\n captionNode = (\n <ThemeContext.Provider value={getInnerLinkTheme(this.theme)}>\n <Link focused={isFocused} disabled={disabled} icon={this.renderIcon2022(icon)} as=\"span\" tabIndex={-1}>\n {children}\n </Link>\n </ThemeContext.Provider>\n );\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <span {...wrapProps}>\n <button data-tid={ButtonDataTids.root} ref={this._ref} {...rootProps}>\n {innerShadowNode}\n {outlineNode}\n {arrowNode}\n {captionNode}\n </button>\n </span>\n </CommonWrapper>\n );\n }\n\n private renderIcon2022(icon: React.ReactElement | undefined) {\n if (icon && isKonturIcon(icon)) {\n const sizes = getButtonIconSizes(this.theme);\n return React.cloneElement(icon, { size: icon.props.size ?? sizes[this.getProps().size] });\n }\n\n return icon;\n }\n\n private getSizeClassName() {\n const _isTheme2022 = isTheme2022(this.theme);\n switch (this.getProps().size) {\n case 'large':\n return cx(styles.sizeLarge(this.theme), {\n [styles.sizeLargeIE11(this.theme)]: isIE11 || isEdge,\n [styles.sizeLargeWithIcon(this.theme)]: !!this.props.icon,\n [styles.sizeLargeWithIconWithoutText(this.theme)]: _isTheme2022 && !!this.props.icon && !this.props.children,\n });\n case 'medium':\n return cx(styles.sizeMedium(this.theme), {\n [styles.sizeMediumIE11(this.theme)]: isIE11 || isEdge,\n [styles.sizeMediumWithIcon(this.theme)]: !!this.props.icon,\n [styles.sizeMediumWithIconWithoutText(this.theme)]: _isTheme2022 && !!this.props.icon && !this.props.children,\n });\n case 'small':\n default:\n return cx(styles.sizeSmall(this.theme), {\n [styles.sizeSmallIE11(this.theme)]: isIE11 || isEdge,\n [styles.sizeSmallWithIcon(this.theme)]: !!this.props.icon,\n [styles.sizeSmallWithIconWithoutText(this.theme)]: _isTheme2022 && !!this.props.icon && !this.props.children,\n });\n }\n }\n\n private getSizeWrapClassName() {\n switch (this.getProps().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,7 +1,9 @@
1
1
  import React from 'react';
2
- import { ButtonProps } from './Button';
2
+ import { Theme } from '../../lib/theming/Theme';
3
+ import { ButtonProps, ButtonSize } from './Button';
3
4
  declare type ButtonIconProps = Pick<ButtonProps, 'size' | 'icon' | 'loading' | 'disabled' | 'use'> & {
4
5
  hasChildren: boolean;
5
6
  };
7
+ export declare const getButtonIconSizes: (theme: Theme) => Record<ButtonSize, number>;
6
8
  export declare const ButtonIcon: React.FunctionComponent<ButtonIconProps>;
7
9
  export {};
@@ -1,5 +1,7 @@
1
- "use strict";exports.__esModule = true;exports.ButtonIcon = void 0;var _react = _interopRequireWildcard(require("react"));
1
+ "use strict";exports.__esModule = true;exports.getButtonIconSizes = exports.ButtonIcon = void 0;var _react = _interopRequireWildcard(require("react"));
2
2
 
3
+
4
+ var _utils = require("../../lib/utils");
3
5
  var _Emotion = require("../../lib/theming/Emotion");
4
6
  var _ThemeContext = require("../../lib/theming/ThemeContext");
5
7
  var _ThemeHelpers = require("../../lib/theming/ThemeHelpers");
@@ -13,6 +15,14 @@ var _Button = require("./Button.styles");function _getRequireWildcardCache(nodeI
13
15
 
14
16
 
15
17
 
18
+ var getButtonIconSizes = function getButtonIconSizes(theme) {
19
+ return {
20
+ small: parseInt(theme.btnIconSizeSmall),
21
+ medium: parseInt(theme.btnIconSizeMedium),
22
+ large: parseInt(theme.btnIconSizeLarge) };
23
+
24
+ };exports.getButtonIconSizes = getButtonIconSizes;
25
+
16
26
  var ButtonIcon = function ButtonIcon(_ref)
17
27
 
18
28
 
@@ -43,6 +53,12 @@ var ButtonIcon = function ButtonIcon(_ref)
43
53
 
44
54
  {};
45
55
 
56
+ var _icon = icon;
57
+ var sizes = getButtonIconSizes(theme);
58
+ if (icon && (0, _ThemeHelpers.isTheme2022)(theme) && (0, _utils.isKonturIcon)(icon)) {var _icon$props$size;
59
+ _icon = /*#__PURE__*/_react.default.cloneElement(icon, { size: (_icon$props$size = icon.props.size) != null ? _icon$props$size : sizes[size] });
60
+ }
61
+
46
62
  return /*#__PURE__*/(
47
63
  _react.default.createElement("span", {
48
64
  style: style,
@@ -52,7 +68,7 @@ var ButtonIcon = function ButtonIcon(_ref)
52
68
 
53
69
 
54
70
  space,
55
- loading ? /*#__PURE__*/_react.default.createElement(_LoadingIcon.LoadingIcon, { size: size }) : icon));
71
+ loading ? /*#__PURE__*/_react.default.createElement(_LoadingIcon.LoadingIcon, { size: size }) : _icon));
56
72
 
57
73
 
58
74
  };exports.ButtonIcon = ButtonIcon;
@@ -1 +1 @@
1
- {"version":3,"sources":["ButtonIcon.tsx"],"names":["ButtonIcon","icon","hasChildren","use","loading","size","theme","ThemeContext","isLink","getSizeIconClassName","styles","iconLarge","iconMedium","iconSmall","space","ZERO_WIDTH_SPACE","style","display","alignItems","globalClasses","iconNoRightMargin","iconLink"],"mappings":"mEAAA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA,yC;;;;;;AAMO,IAAMA,UAAoD,GAAG,SAAvDA,UAAuD;;;;;;AAM9D,aALJC,IAKI,QALJA,IAKI,CAJJC,WAII,QAJJA,WAII,CAHJC,GAGI,QAHJA,GAGI,qBAFJC,OAEI,CAFJA,OAEI,6BAFM,KAEN,iCADJC,IACI,CADJA,IACI,0BADG,OACH;AACJ,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,MAAM,GAAGL,GAAG,KAAK,MAAvB;;AAEA,MAAMM,oBAAoB,GAAG,SAAvBA,oBAAuB,GAAM;AACjC,YAAQJ,IAAR;AACE,WAAK,OAAL;AACE,eAAOK,eAAOC,SAAP,CAAiBL,KAAjB,CAAP;AACF,WAAK,QAAL;AACE,eAAOI,eAAOE,UAAP,CAAkBN,KAAlB,CAAP;AACF,WAAK,OAAL;AACA;AACE,eAAOI,eAAOG,SAAP,CAAiBP,KAAjB,CAAP,CAPJ;;AASD,GAVD;;AAYA,MAAMQ,KAAK,GAAG,+BAAYR,KAAZ,IAAqBS,uBAArB,GAAwC,EAAtD;AACA,MAAMC,KAA0B,GAAG,+BAAYV,KAAZ;AAC/B;AACEW,IAAAA,OAAO,EAAE,aADX;AAEEC,IAAAA,UAAU,EAAE,QAFd,EAD+B;;AAK/B,IALJ;;AAOA;AACE;AACE,MAAA,KAAK,EAAEF,KADT;AAEE,MAAA,SAAS,EAAE,iBAAGG,sBAAclB,IAAjB,EAAuBS,eAAOT,IAAP,EAAvB,EAAsCQ,oBAAoB,EAA1D;AACRC,qBAAOU,iBAAP,EADQ,IACqB,CAAClB,WADtB;AAERQ,qBAAOW,QAAP,CAAgBf,KAAhB,CAFQ,IAEiBE,MAFjB,OAFb;;;AAOGM,IAAAA,KAPH;AAQGV,IAAAA,OAAO,gBAAG,6BAAC,wBAAD,IAAa,IAAI,EAAEC,IAAnB,GAAH,GAAiCJ,IAR3C,CADF;;;AAYD,CA1CM,C","sourcesContent":["import React, { useContext } from 'react';\n\nimport { cx } from '../../lib/theming/Emotion';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { ZERO_WIDTH_SPACE } from '../../lib/chars';\nimport { LoadingIcon } from '../../internal/icons2022/LoadingIcon';\n\nimport { ButtonProps } from './Button';\nimport { globalClasses, styles } from './Button.styles';\n\ntype ButtonIconProps = Pick<ButtonProps, 'size' | 'icon' | 'loading' | 'disabled' | 'use'> & {\n hasChildren: boolean;\n};\n\nexport const ButtonIcon: React.FunctionComponent<ButtonIconProps> = ({\n icon,\n hasChildren,\n use,\n loading = false,\n size = 'small',\n}) => {\n const theme = useContext(ThemeContext);\n const isLink = use === 'link';\n\n const getSizeIconClassName = () => {\n switch (size) {\n case 'large':\n return styles.iconLarge(theme);\n case 'medium':\n return styles.iconMedium(theme);\n case 'small':\n default:\n return styles.iconSmall(theme);\n }\n };\n\n const space = isTheme2022(theme) ? ZERO_WIDTH_SPACE : '';\n const style: React.CSSProperties = isTheme2022(theme)\n ? {\n display: 'inline-flex',\n alignItems: 'center',\n }\n : {};\n\n return (\n <span\n style={style}\n className={cx(globalClasses.icon, styles.icon(), getSizeIconClassName(), {\n [styles.iconNoRightMargin()]: !hasChildren,\n [styles.iconLink(theme)]: isLink,\n })}\n >\n {space}\n {loading ? <LoadingIcon size={size} /> : icon}\n </span>\n );\n};\n"]}
1
+ {"version":3,"sources":["ButtonIcon.tsx"],"names":["getButtonIconSizes","theme","small","parseInt","btnIconSizeSmall","medium","btnIconSizeMedium","large","btnIconSizeLarge","ButtonIcon","icon","hasChildren","use","loading","size","ThemeContext","isLink","getSizeIconClassName","styles","iconLarge","iconMedium","iconSmall","space","ZERO_WIDTH_SPACE","style","display","alignItems","_icon","sizes","React","cloneElement","props","globalClasses","iconNoRightMargin","iconLink"],"mappings":"gGAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA,yC;;;;;;AAMO,IAAMA,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,KAAD,EAA8C;AAC9E,SAAO;AACLC,IAAAA,KAAK,EAAEC,QAAQ,CAACF,KAAK,CAACG,gBAAP,CADV;AAELC,IAAAA,MAAM,EAAEF,QAAQ,CAACF,KAAK,CAACK,iBAAP,CAFX;AAGLC,IAAAA,KAAK,EAAEJ,QAAQ,CAACF,KAAK,CAACO,gBAAP,CAHV,EAAP;;AAKD,CANM,C;;AAQA,IAAMC,UAAoD,GAAG,SAAvDA,UAAuD;;;;;;AAM9D,aALJC,IAKI,QALJA,IAKI,CAJJC,WAII,QAJJA,WAII,CAHJC,GAGI,QAHJA,GAGI,qBAFJC,OAEI,CAFJA,OAEI,6BAFM,KAEN,iCADJC,IACI,CADJA,IACI,0BADG,OACH;AACJ,MAAMb,KAAK,GAAG,uBAAWc,0BAAX,CAAd;AACA,MAAMC,MAAM,GAAGJ,GAAG,KAAK,MAAvB;;AAEA,MAAMK,oBAAoB,GAAG,SAAvBA,oBAAuB,GAAM;AACjC,YAAQH,IAAR;AACE,WAAK,OAAL;AACE,eAAOI,eAAOC,SAAP,CAAiBlB,KAAjB,CAAP;AACF,WAAK,QAAL;AACE,eAAOiB,eAAOE,UAAP,CAAkBnB,KAAlB,CAAP;AACF,WAAK,OAAL;AACA;AACE,eAAOiB,eAAOG,SAAP,CAAiBpB,KAAjB,CAAP,CAPJ;;AASD,GAVD;;AAYA,MAAMqB,KAAK,GAAG,+BAAYrB,KAAZ,IAAqBsB,uBAArB,GAAwC,EAAtD;AACA,MAAMC,KAA0B,GAAG,+BAAYvB,KAAZ;AAC/B;AACEwB,IAAAA,OAAO,EAAE,aADX;AAEEC,IAAAA,UAAU,EAAE,QAFd,EAD+B;;AAK/B,IALJ;;AAOA,MAAIC,KAAK,GAAGjB,IAAZ;AACA,MAAMkB,KAAK,GAAG5B,kBAAkB,CAACC,KAAD,CAAhC;AACA,MAAIS,IAAI,IAAI,+BAAYT,KAAZ,CAAR,IAA8B,yBAAaS,IAAb,CAAlC,EAAsD;AACpDiB,IAAAA,KAAK,gBAAGE,eAAMC,YAAN,CAAmBpB,IAAnB,EAAyB,EAAEI,IAAI,sBAAEJ,IAAI,CAACqB,KAAL,CAAWjB,IAAb,+BAAqBc,KAAK,CAACd,IAAD,CAAhC,EAAzB,CAAR;AACD;;AAED;AACE;AACE,MAAA,KAAK,EAAEU,KADT;AAEE,MAAA,SAAS,EAAE,iBAAGQ,sBAActB,IAAjB,EAAuBQ,eAAOR,IAAP,EAAvB,EAAsCO,oBAAoB,EAA1D;AACRC,qBAAOe,iBAAP,EADQ,IACqB,CAACtB,WADtB;AAERO,qBAAOgB,QAAP,CAAgBjC,KAAhB,CAFQ,IAEiBe,MAFjB,OAFb;;;AAOGM,IAAAA,KAPH;AAQGT,IAAAA,OAAO,gBAAG,6BAAC,wBAAD,IAAa,IAAI,EAAEC,IAAnB,GAAH,GAAiCa,KAR3C,CADF;;;AAYD,CAhDM,C","sourcesContent":["import React, { useContext } from 'react';\n\nimport { Theme } from '../../lib/theming/Theme';\nimport { isKonturIcon } from '../../lib/utils';\nimport { cx } from '../../lib/theming/Emotion';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { ZERO_WIDTH_SPACE } from '../../lib/chars';\nimport { LoadingIcon } from '../../internal/icons2022/LoadingIcon';\n\nimport { ButtonProps, ButtonSize } from './Button';\nimport { globalClasses, styles } from './Button.styles';\n\ntype ButtonIconProps = Pick<ButtonProps, 'size' | 'icon' | 'loading' | 'disabled' | 'use'> & {\n hasChildren: boolean;\n};\n\nexport const getButtonIconSizes = (theme: Theme): Record<ButtonSize, number> => {\n return {\n small: parseInt(theme.btnIconSizeSmall),\n medium: parseInt(theme.btnIconSizeMedium),\n large: parseInt(theme.btnIconSizeLarge),\n };\n};\n\nexport const ButtonIcon: React.FunctionComponent<ButtonIconProps> = ({\n icon,\n hasChildren,\n use,\n loading = false,\n size = 'small',\n}) => {\n const theme = useContext(ThemeContext);\n const isLink = use === 'link';\n\n const getSizeIconClassName = () => {\n switch (size) {\n case 'large':\n return styles.iconLarge(theme);\n case 'medium':\n return styles.iconMedium(theme);\n case 'small':\n default:\n return styles.iconSmall(theme);\n }\n };\n\n const space = isTheme2022(theme) ? ZERO_WIDTH_SPACE : '';\n const style: React.CSSProperties = isTheme2022(theme)\n ? {\n display: 'inline-flex',\n alignItems: 'center',\n }\n : {};\n\n let _icon = icon;\n const sizes = getButtonIconSizes(theme);\n if (icon && isTheme2022(theme) && isKonturIcon(icon)) {\n _icon = React.cloneElement(icon, { size: icon.props.size ?? sizes[size] });\n }\n\n return (\n <span\n style={style}\n className={cx(globalClasses.icon, styles.icon(), getSizeIconClassName(), {\n [styles.iconNoRightMargin()]: !hasChildren,\n [styles.iconLink(theme)]: isLink,\n })}\n >\n {space}\n {loading ? <LoadingIcon size={size} /> : _icon}\n </span>\n );\n};\n"]}
@@ -1,3 +1,3 @@
1
- export declare const CheckedIcon: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
1
+ export declare const CheckedIcon: import("../../lib/forwardRefAndName").ReactUIIconWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
2
2
  size?: number | "small" | "medium" | "large" | undefined;
3
3
  }>;
@@ -1,3 +1,3 @@
1
- export declare const IndeterminateIcon: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
1
+ export declare const IndeterminateIcon: import("../../lib/forwardRefAndName").ReactUIIconWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
2
2
  size?: number | "small" | "medium" | "large" | undefined;
3
3
  }>;
@@ -1,3 +1,3 @@
1
- export declare const CalendarIcon: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
1
+ export declare const CalendarIcon: import("../../lib/forwardRefAndName").ReactUIIconWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
2
2
  size?: number | "small" | "medium" | "large" | undefined;
3
3
  }>;
@@ -1,3 +1,3 @@
1
- export declare const UploadIcon: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
1
+ export declare const UploadIcon: import("../../lib/forwardRefAndName").ReactUIIconWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
2
2
  size?: number | "small" | "medium" | "large" | undefined;
3
3
  }>;
@@ -1,3 +1,3 @@
1
- export declare const MathFunctionIcon: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
1
+ export declare const MathFunctionIcon: import("../../lib/forwardRefAndName").ReactUIIconWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
2
2
  size?: number | "small" | "medium" | "large" | undefined;
3
3
  }>;
@@ -1,3 +1,3 @@
1
- export declare const UndoIcon: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
1
+ export declare const UndoIcon: import("../../lib/forwardRefAndName").ReactUIIconWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
2
2
  size?: number | "small" | "medium" | "large" | undefined;
3
3
  }>;
@@ -1,5 +1,7 @@
1
1
  "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.InputLayoutAsideIcon = void 0;var _react = _interopRequireDefault(require("react"));
2
+ var _reactIs = require("react-is");
2
3
 
4
+ var _utils = require("../../../lib/utils");
3
5
 
4
6
  var _Emotion = require("../../../lib/theming/Emotion");
5
7
  var _ThemeContext = require("../../../lib/theming/ThemeContext");
@@ -11,17 +13,26 @@ var _InputLayout = require("./InputLayout.styles");
11
13
 
12
14
 
13
15
 
14
-
15
- var InputLayoutAsideIcon = function InputLayoutAsideIcon(_ref) {var _ref$icon = _ref.icon,icon = _ref$icon === void 0 ? null : _ref$icon,side = _ref.side;
16
+ var InputLayoutAsideIcon = function InputLayoutAsideIcon(_ref) {var icon = _ref.icon,side = _ref.side;
16
17
  var theme = _react.default.useContext(_ThemeContext.ThemeContext);
17
18
  var _React$useContext = _react.default.useContext(_InputLayoutContext.InputLayoutContext),focused = _React$useContext.focused,disabled = _React$useContext.disabled,size = _React$useContext.size;
18
19
 
20
+ var sizes = {
21
+ small: parseInt(theme.inputIconSizeSmall),
22
+ medium: parseInt(theme.inputIconSizeMedium),
23
+ large: parseInt(theme.inputIconSizeLarge) };
24
+
19
25
  var gaps = {
20
26
  small: parseInt(theme.inputIconGapSmall),
21
27
  medium: parseInt(theme.inputIconGapMedium),
22
28
  large: parseInt(theme.inputIconGapLarge) };
23
29
 
24
30
 
31
+ var _icon = null;
32
+ if (icon && (0, _reactIs.isElement)(icon)) {var _icon$props$size;
33
+ _icon = (0, _utils.isKonturIcon)(icon) ? /*#__PURE__*/_react.default.cloneElement(icon, { size: (_icon$props$size = icon.props.size) != null ? _icon$props$size : sizes[size] }) : icon;
34
+ }
35
+
25
36
  var style = {};
26
37
  if (side) {
27
38
  if (side === 'right') {
@@ -32,7 +43,7 @@ var InputLayoutAsideIcon = function InputLayoutAsideIcon(_ref) {var _ref$icon =
32
43
  }
33
44
 
34
45
  return (
35
- icon && /*#__PURE__*/
46
+ _icon && /*#__PURE__*/
36
47
  _react.default.createElement("span", {
37
48
  style: style,
38
49
  className: (0, _Emotion.cx)(
@@ -42,7 +53,7 @@ var InputLayoutAsideIcon = function InputLayoutAsideIcon(_ref) {var _ref$icon =
42
53
  disabled && _InputLayout.stylesLayout.iconDisabled()) },
43
54
 
44
55
 
45
- icon));
56
+ _icon));
46
57
 
47
58
 
48
59
 
@@ -1 +1 @@
1
- {"version":3,"sources":["InputLayoutAsideIcon.tsx"],"names":["InputLayoutAsideIcon","icon","side","theme","React","useContext","ThemeContext","InputLayoutContext","focused","disabled","size","gaps","small","parseInt","inputIconGapSmall","medium","inputIconGapMedium","large","inputIconGapLarge","style","marginLeft","marginRight","stylesLayout","aside","iconFocus","iconDisabled"],"mappings":"kKAAA;;;AAGA;AACA;;AAEA;AACA;;;;;;;AAOO,IAAMA,oBAAwE,GAAG,SAA3EA,oBAA2E,OAA2B,sBAAxBC,IAAwB,CAAxBA,IAAwB,0BAAjB,IAAiB,aAAXC,IAAW,QAAXA,IAAW;AACjH,MAAMC,KAAK,GAAGC,eAAMC,UAAN,CAAiBC,0BAAjB,CAAd;AACA,0BAAoCF,eAAMC,UAAN,CAAiBE,sCAAjB,CAApC,CAAQC,OAAR,qBAAQA,OAAR,CAAiBC,QAAjB,qBAAiBA,QAAjB,CAA2BC,IAA3B,qBAA2BA,IAA3B;;AAEA,MAAMC,IAA+B,GAAG;AACtCC,IAAAA,KAAK,EAAEC,QAAQ,CAACV,KAAK,CAACW,iBAAP,CADuB;AAEtCC,IAAAA,MAAM,EAAEF,QAAQ,CAACV,KAAK,CAACa,kBAAP,CAFsB;AAGtCC,IAAAA,KAAK,EAAEJ,QAAQ,CAACV,KAAK,CAACe,iBAAP,CAHuB,EAAxC;;;AAMA,MAAMC,KAA0B,GAAG,EAAnC;AACA,MAAIjB,IAAJ,EAAU;AACR,QAAIA,IAAI,KAAK,OAAb,EAAsB;AACpBiB,MAAAA,KAAK,CAACC,UAAN,GAAmBT,IAAI,CAACD,IAAD,CAAvB;AACD,KAFD,MAEO;AACLS,MAAAA,KAAK,CAACE,WAAN,GAAoBV,IAAI,CAACD,IAAD,CAAxB;AACD;AACF;;AAED;AACET,IAAAA,IAAI;AACF;AACE,MAAA,KAAK,EAAEkB,KADT;AAEE,MAAA,SAAS,EAAE;AACTG,gCAAaC,KAAb,EADS;AAETD,gCAAarB,IAAb,CAAkBE,KAAlB,CAFS;AAGTK,MAAAA,OAAO,IAAIc,0BAAaE,SAAb,CAAuBrB,KAAvB,CAHF;AAITM,MAAAA,QAAQ,IAAIa,0BAAaG,YAAb,EAJH,CAFb;;;AASGxB,IAAAA,IATH,CAFJ;;;;AAeD,CAlCM,C","sourcesContent":["import React from 'react';\n\nimport { InputProps, InputSize } from '../Input';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\n\nimport { InputLayoutContext } from './InputLayoutContext';\nimport { stylesLayout } from './InputLayout.styles';\n\nexport interface InputLayoutAsideIconProps {\n icon: InputProps['leftIcon'] | InputProps['rightIcon'];\n side: 'left' | 'right';\n}\n\nexport const InputLayoutAsideIcon: React.FunctionComponent<InputLayoutAsideIconProps> = ({ icon = null, side }) => {\n const theme = React.useContext(ThemeContext);\n const { focused, disabled, size } = React.useContext(InputLayoutContext);\n\n const gaps: Record<InputSize, number> = {\n small: parseInt(theme.inputIconGapSmall),\n medium: parseInt(theme.inputIconGapMedium),\n large: parseInt(theme.inputIconGapLarge),\n };\n\n const style: React.CSSProperties = {};\n if (side) {\n if (side === 'right') {\n style.marginLeft = gaps[size];\n } else {\n style.marginRight = gaps[size];\n }\n }\n\n return (\n icon && (\n <span\n style={style}\n className={cx(\n stylesLayout.aside(),\n stylesLayout.icon(theme),\n focused && stylesLayout.iconFocus(theme),\n disabled && stylesLayout.iconDisabled(),\n )}\n >\n {icon}\n </span>\n )\n );\n};\n"]}
1
+ {"version":3,"sources":["InputLayoutAsideIcon.tsx"],"names":["InputLayoutAsideIcon","icon","side","theme","React","useContext","ThemeContext","InputLayoutContext","focused","disabled","size","sizes","small","parseInt","inputIconSizeSmall","medium","inputIconSizeMedium","large","inputIconSizeLarge","gaps","inputIconGapSmall","inputIconGapMedium","inputIconGapLarge","_icon","cloneElement","props","style","marginLeft","marginRight","stylesLayout","aside","iconFocus","iconDisabled"],"mappings":"kKAAA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;;;;;AAMO,IAAMA,oBAAwE,GAAG,SAA3EA,oBAA2E,OAAoB,KAAjBC,IAAiB,QAAjBA,IAAiB,CAAXC,IAAW,QAAXA,IAAW;AAC1G,MAAMC,KAAK,GAAGC,eAAMC,UAAN,CAAiBC,0BAAjB,CAAd;AACA,0BAAoCF,eAAMC,UAAN,CAAiBE,sCAAjB,CAApC,CAAQC,OAAR,qBAAQA,OAAR,CAAiBC,QAAjB,qBAAiBA,QAAjB,CAA2BC,IAA3B,qBAA2BA,IAA3B;;AAEA,MAAMC,KAAgC,GAAG;AACvCC,IAAAA,KAAK,EAAEC,QAAQ,CAACV,KAAK,CAACW,kBAAP,CADwB;AAEvCC,IAAAA,MAAM,EAAEF,QAAQ,CAACV,KAAK,CAACa,mBAAP,CAFuB;AAGvCC,IAAAA,KAAK,EAAEJ,QAAQ,CAACV,KAAK,CAACe,kBAAP,CAHwB,EAAzC;;AAKA,MAAMC,IAA+B,GAAG;AACtCP,IAAAA,KAAK,EAAEC,QAAQ,CAACV,KAAK,CAACiB,iBAAP,CADuB;AAEtCL,IAAAA,MAAM,EAAEF,QAAQ,CAACV,KAAK,CAACkB,kBAAP,CAFsB;AAGtCJ,IAAAA,KAAK,EAAEJ,QAAQ,CAACV,KAAK,CAACmB,iBAAP,CAHuB,EAAxC;;;AAMA,MAAIC,KAAK,GAAG,IAAZ;AACA,MAAItB,IAAI,IAAI,wBAAUA,IAAV,CAAZ,EAA6B;AAC3BsB,IAAAA,KAAK,GAAG,yBAAatB,IAAb,iBAAqBG,eAAMoB,YAAN,CAAmBvB,IAAnB,EAAyB,EAAES,IAAI,sBAAET,IAAI,CAACwB,KAAL,CAAWf,IAAb,+BAAqBC,KAAK,CAACD,IAAD,CAAhC,EAAzB,CAArB,GAA0FT,IAAlG;AACD;;AAED,MAAMyB,KAA0B,GAAG,EAAnC;AACA,MAAIxB,IAAJ,EAAU;AACR,QAAIA,IAAI,KAAK,OAAb,EAAsB;AACpBwB,MAAAA,KAAK,CAACC,UAAN,GAAmBR,IAAI,CAACT,IAAD,CAAvB;AACD,KAFD,MAEO;AACLgB,MAAAA,KAAK,CAACE,WAAN,GAAoBT,IAAI,CAACT,IAAD,CAAxB;AACD;AACF;;AAED;AACEa,IAAAA,KAAK;AACH;AACE,MAAA,KAAK,EAAEG,KADT;AAEE,MAAA,SAAS,EAAE;AACTG,gCAAaC,KAAb,EADS;AAETD,gCAAa5B,IAAb,CAAkBE,KAAlB,CAFS;AAGTK,MAAAA,OAAO,IAAIqB,0BAAaE,SAAb,CAAuB5B,KAAvB,CAHF;AAITM,MAAAA,QAAQ,IAAIoB,0BAAaG,YAAb,EAJH,CAFb;;;AASGT,IAAAA,KATH,CAFJ;;;;AAeD,CA5CM,C","sourcesContent":["import React from 'react';\nimport { isElement } from 'react-is';\n\nimport { isKonturIcon } from '../../../lib/utils';\nimport { InputProps, InputSize } from '../Input';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\n\nimport { InputLayoutContext } from './InputLayoutContext';\nimport { stylesLayout } from './InputLayout.styles';\nexport interface InputLayoutAsideIconProps {\n icon: InputProps['leftIcon'] | InputProps['rightIcon'];\n side: 'left' | 'right';\n}\n\nexport const InputLayoutAsideIcon: React.FunctionComponent<InputLayoutAsideIconProps> = ({ icon, side }) => {\n const theme = React.useContext(ThemeContext);\n const { focused, disabled, size } = React.useContext(InputLayoutContext);\n\n const sizes: Record<InputSize, number> = {\n small: parseInt(theme.inputIconSizeSmall),\n medium: parseInt(theme.inputIconSizeMedium),\n large: parseInt(theme.inputIconSizeLarge),\n };\n const gaps: Record<InputSize, number> = {\n small: parseInt(theme.inputIconGapSmall),\n medium: parseInt(theme.inputIconGapMedium),\n large: parseInt(theme.inputIconGapLarge),\n };\n\n let _icon = null;\n if (icon && isElement(icon)) {\n _icon = isKonturIcon(icon) ? React.cloneElement(icon, { size: icon.props.size ?? sizes[size] }) : icon;\n }\n\n const style: React.CSSProperties = {};\n if (side) {\n if (side === 'right') {\n style.marginLeft = gaps[size];\n } else {\n style.marginRight = gaps[size];\n }\n }\n\n return (\n _icon && (\n <span\n style={style}\n className={cx(\n stylesLayout.aside(),\n stylesLayout.icon(theme),\n focused && stylesLayout.iconFocus(theme),\n disabled && stylesLayout.iconDisabled(),\n )}\n >\n {_icon}\n </span>\n )\n );\n};\n"]}
@@ -1,6 +1,8 @@
1
1
  "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.KebabDataTids = exports.Kebab = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
2
2
  var _propTypes = _interopRequireDefault(require("prop-types"));
3
+ var _reactIs = require("react-is");
3
4
 
5
+ var _utils = require("../../lib/utils");
4
6
  var _identifiers = require("../../lib/events/keyboard/identifiers");
5
7
  var LayoutEvents = _interopRequireWildcard(require("../../lib/LayoutEvents"));
6
8
  var _keyListener = require("../../lib/events/keyListener");
@@ -18,6 +20,7 @@ var _rootNode = require("../../lib/rootNode");
18
20
  var _createPropsGetter = require("../../lib/createPropsGetter");
19
21
  var _ThemeHelpers = require("../../lib/theming/ThemeHelpers");
20
22
 
23
+
21
24
  var _Kebab = require("./Kebab.styles");
22
25
  var _KebabIcon = require("./KebabIcon");var _class, _class2, _temp;function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}
23
26
 
@@ -234,9 +237,22 @@ Kebab = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
234
237
  };_proto.
235
238
 
236
239
  renderIcon2022 = function renderIcon2022() {
237
- var _this$getProps4 = this.getProps(),size = _this$getProps4.size,icon = _this$getProps4.icon;
240
+ var _this$getProps4 = this.getProps(),size = _this$getProps4.size,_this$getProps4$icon = _this$getProps4.icon,icon = _this$getProps4$icon === void 0 ? /*#__PURE__*/_react.default.createElement(_KebabIcon.KebabIcon, null) : _this$getProps4$icon;
241
+
242
+ if ((0, _reactIs.isElement)(icon) && (0, _utils.isKonturIcon)(icon)) {var _icon$props$size, _icon$props$color;
243
+ var sizes = {
244
+ small: parseInt(this.theme.kebabIconSizeSmall),
245
+ medium: parseInt(this.theme.kebabIconSizeMedium),
246
+ large: parseInt(this.theme.kebabIconSizeLarge) };
247
+
248
+
249
+ return /*#__PURE__*/_react.default.cloneElement(icon, {
250
+ size: (_icon$props$size = icon.props.size) != null ? _icon$props$size : sizes[size],
251
+ color: (_icon$props$color = icon.props.color) != null ? _icon$props$color : this.theme.kebabIconColor });
252
+
253
+ }
238
254
 
239
- return icon != null ? icon : /*#__PURE__*/_react.default.createElement(_KebabIcon.KebabIcon, { size: size, color: this.theme.kebabIconColor });
255
+ return icon;
240
256
  };return Kebab;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Kebab', _class2.propTypes = {}, _class2.defaultProps = { onOpen: function onOpen() {return undefined;}, onClose: function onClose() {return undefined;}, positions: ['bottom left', 'bottom right', 'top left', 'top right'], size: 'small', disableAnimations: _currentEnvironment.isTestEnv }, _temp)) || _class;exports.Kebab = Kebab;
241
257
 
242
258
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Kebab.tsx"],"names":["KebabDataTids","caption","Kebab","rootNode","getProps","defaultProps","state","focusedByTab","anchor","listener","remove","undefined","renderCaption","captionProps","disabled","size","handleCaptionKeyDown","event","openMenu","handleCaptionClick","toggleMenu","handleFocus","handleBlur","styles","kebab","theme","kebabSmall","kebabMedium","kebabLarge","kebab2022","opened","focused","props","renderIcon2022","renderIcon","e","isKeyEnter","isKeySpace","isKeyArrowVertical","preventDefault","handleChangeMenuState","isOpened","restoreFocus","setState","requestAnimationFrame","keyListener","isTabPressed","componentDidMount","LayoutEvents","addListener","componentWillUnmount","render","ThemeFactory","create","popupPinOffset","kebabPinOffset","popupMargin","kebabMargin","popupPinSize","kebabPinSize","renderMain","positions","disableAnimations","onOpen","onClose","setRootNode","menuMaxHeight","popupMenuId","children","icon","iconsmall","iconmedium","iconlarge","kebabIconColor","React","Component","__KONTUR_REACT_UI__","propTypes","isTestEnv","PropTypes","node","bool","oneOfType","string","number","func"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyArrowVertical, isKeyEnter, isKeySpace, someKeys } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { PopupMenu, PopupMenuCaptionProps, PopupMenuProps } from '../../internal/PopupMenu';\nimport { Nullable } from '../../typings/utility-types';\nimport { PopupPositionsType } from '../../internal/Popup';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MenuKebabIcon } from '../../internal/icons/16px';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\n\nimport { styles } from './Kebab.styles';\nimport { KebabIcon } from './KebabIcon';\n\nexport interface KebabProps extends CommonProps, Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId'> {\n disabled?: boolean;\n size?: 'small' | 'medium' | 'large';\n /**\n * Список позиций доступных для расположения выпадашки.\n *\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n * @default ['bottom left', 'bottom right', 'top left', 'top right']\n */\n positions?: PopupPositionsType[];\n menuMaxHeight?: number | string;\n /**\n * Не показывать анимацию\n */\n disableAnimations?: boolean;\n /**\n * Кастомная иконка\n */\n icon?: React.ReactNode;\n /**\n * Атрибут для указания id элемента(-ов), описывающих его\n */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n}\n\nexport const KebabDataTids = {\n caption: 'Kebab__caption',\n} as const;\n\nexport interface KebabState {\n anchor: Nullable<HTMLElement>;\n focusedByTab: boolean;\n}\n\ntype DefaultProps = Required<Pick<KebabProps, 'onOpen' | 'onClose' | 'positions' | 'size' | 'disableAnimations'>>;\n\n@rootNode\nexport class Kebab extends React.Component<KebabProps, KebabState> {\n public static __KONTUR_REACT_UI__ = 'Kebab';\n\n public static propTypes = {};\n\n public static defaultProps: DefaultProps = {\n onOpen: () => undefined,\n onClose: () => undefined,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n size: 'small',\n disableAnimations: isTestEnv,\n };\n\n private getProps = createPropsGetter(Kebab.defaultProps);\n\n public state: KebabState = {\n focusedByTab: false,\n anchor: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n private listener: {\n remove: () => void;\n } = {\n remove: () => undefined,\n };\n\n public componentDidMount() {\n /** addListener'у нужен колбэк в аргумент */\n this.listener = LayoutEvents.addListener(() => undefined);\n }\n\n public componentWillUnmount() {\n this.listener.remove();\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.kebabPinOffset,\n popupMargin: theme.kebabMargin,\n popupPinSize: theme.kebabPinSize,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { disabled } = this.props;\n const { positions, disableAnimations, onOpen, onClose } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <PopupMenu\n popupHasPin\n positions={positions}\n onChangeMenuState={this.handleChangeMenuState}\n caption={this.renderCaption}\n disableAnimations={disableAnimations}\n menuMaxHeight={this.props.menuMaxHeight}\n onOpen={onOpen}\n onClose={onClose}\n popupMenuId={this.props.popupMenuId}\n >\n {!disabled && this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }\n\n private renderCaption = (captionProps: PopupMenuCaptionProps) => {\n const { disabled, size } = this.getProps();\n const handleCaptionKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled) {\n this.handleCaptionKeyDown(event, captionProps.openMenu);\n }\n };\n\n const handleCaptionClick = () => {\n if (!disabled) {\n captionProps.toggleMenu();\n }\n };\n\n return (\n <span\n data-tid={KebabDataTids.caption}\n tabIndex={disabled ? -1 : 0}\n onClick={handleCaptionClick}\n onKeyDown={handleCaptionKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n className={cx(\n styles.kebab(this.theme),\n size === 'small' && styles.kebabSmall(this.theme),\n size === 'medium' && styles.kebabMedium(this.theme),\n size === 'large' && styles.kebabLarge(this.theme),\n isTheme2022(this.theme) && styles.kebab2022(),\n captionProps.opened && styles.opened(this.theme),\n disabled && styles.disabled(),\n this.state.focusedByTab && styles.focused(this.theme),\n )}\n aria-describedby={this.props['aria-describedby']}\n >\n {isTheme2022(this.theme) ? this.renderIcon2022() : this.renderIcon()}\n </span>\n );\n };\n\n private handleCaptionKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n openMenu: PopupMenuCaptionProps['openMenu'],\n ) => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n private handleChangeMenuState = (isOpened: boolean, restoreFocus: boolean): void => {\n this.setState({\n focusedByTab: !isOpened && restoreFocus,\n });\n };\n\n private handleFocus = () => {\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 };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n });\n };\n\n private renderIcon() {\n const { size, icon = <MenuKebabIcon /> } = this.getProps();\n return (\n <div\n className={cx({\n [styles.icon(this.theme)]: true,\n [styles.iconsmall(this.theme)]: size === 'small',\n [styles.iconmedium(this.theme)]: size === 'medium',\n [styles.iconlarge(this.theme)]: size === 'large',\n })}\n >\n {icon}\n </div>\n );\n }\n\n private renderIcon2022() {\n const { size, icon } = this.getProps();\n\n return icon ?? <KebabIcon size={size} color={this.theme.kebabIconColor} />;\n }\n}\n\nKebab.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n menuMaxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Размер кебаба small 14px | large 20px\n */\n size: PropTypes.string,\n\n /**\n * Коллбек, вызывающийся перед закрытием кебаба\n */\n onClose: PropTypes.func,\n\n /**\n * Коллбек, вызывающийся перед открытием кебаба\n */\n onOpen: PropTypes.func,\n};\n"]}
1
+ {"version":3,"sources":["Kebab.tsx"],"names":["KebabDataTids","caption","Kebab","rootNode","getProps","defaultProps","state","focusedByTab","anchor","listener","remove","undefined","renderCaption","captionProps","disabled","size","handleCaptionKeyDown","event","openMenu","handleCaptionClick","toggleMenu","handleFocus","handleBlur","styles","kebab","theme","kebabSmall","kebabMedium","kebabLarge","kebab2022","opened","focused","props","renderIcon2022","renderIcon","e","isKeyEnter","isKeySpace","isKeyArrowVertical","preventDefault","handleChangeMenuState","isOpened","restoreFocus","setState","requestAnimationFrame","keyListener","isTabPressed","componentDidMount","LayoutEvents","addListener","componentWillUnmount","render","ThemeFactory","create","popupPinOffset","kebabPinOffset","popupMargin","kebabMargin","popupPinSize","kebabPinSize","renderMain","positions","disableAnimations","onOpen","onClose","setRootNode","menuMaxHeight","popupMenuId","children","icon","iconsmall","iconmedium","iconlarge","sizes","small","parseInt","kebabIconSizeSmall","medium","kebabIconSizeMedium","large","kebabIconSizeLarge","React","cloneElement","color","kebabIconColor","Component","__KONTUR_REACT_UI__","propTypes","isTestEnv","PropTypes","node","bool","oneOfType","string","number","func"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { isElement } from 'react-is';\n\nimport { isKonturIcon } from '../../lib/utils';\nimport { isKeyArrowVertical, isKeyEnter, isKeySpace, someKeys } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { PopupMenu, PopupMenuCaptionProps, PopupMenuProps } from '../../internal/PopupMenu';\nimport { Nullable } from '../../typings/utility-types';\nimport { PopupPositionsType } from '../../internal/Popup';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MenuKebabIcon } from '../../internal/icons/16px';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { ButtonSize } from '../Button';\n\nimport { styles } from './Kebab.styles';\nimport { KebabIcon } from './KebabIcon';\n\nexport interface KebabProps extends CommonProps, Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId'> {\n disabled?: boolean;\n size?: 'small' | 'medium' | 'large';\n /**\n * Список позиций доступных для расположения выпадашки.\n *\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n * @default ['bottom left', 'bottom right', 'top left', 'top right']\n */\n positions?: PopupPositionsType[];\n menuMaxHeight?: number | string;\n /**\n * Не показывать анимацию\n */\n disableAnimations?: boolean;\n /**\n * Кастомная иконка\n */\n icon?: React.ReactNode;\n /**\n * Атрибут для указания id элемента(-ов), описывающих его\n */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n}\n\nexport const KebabDataTids = {\n caption: 'Kebab__caption',\n} as const;\n\nexport interface KebabState {\n anchor: Nullable<HTMLElement>;\n focusedByTab: boolean;\n}\n\ntype DefaultProps = Required<Pick<KebabProps, 'onOpen' | 'onClose' | 'positions' | 'size' | 'disableAnimations'>>;\n\n@rootNode\nexport class Kebab extends React.Component<KebabProps, KebabState> {\n public static __KONTUR_REACT_UI__ = 'Kebab';\n\n public static propTypes = {};\n\n public static defaultProps: DefaultProps = {\n onOpen: () => undefined,\n onClose: () => undefined,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n size: 'small',\n disableAnimations: isTestEnv,\n };\n\n private getProps = createPropsGetter(Kebab.defaultProps);\n\n public state: KebabState = {\n focusedByTab: false,\n anchor: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n private listener: {\n remove: () => void;\n } = {\n remove: () => undefined,\n };\n\n public componentDidMount() {\n /** addListener'у нужен колбэк в аргумент */\n this.listener = LayoutEvents.addListener(() => undefined);\n }\n\n public componentWillUnmount() {\n this.listener.remove();\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.kebabPinOffset,\n popupMargin: theme.kebabMargin,\n popupPinSize: theme.kebabPinSize,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { disabled } = this.props;\n const { positions, disableAnimations, onOpen, onClose } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <PopupMenu\n popupHasPin\n positions={positions}\n onChangeMenuState={this.handleChangeMenuState}\n caption={this.renderCaption}\n disableAnimations={disableAnimations}\n menuMaxHeight={this.props.menuMaxHeight}\n onOpen={onOpen}\n onClose={onClose}\n popupMenuId={this.props.popupMenuId}\n >\n {!disabled && this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }\n\n private renderCaption = (captionProps: PopupMenuCaptionProps) => {\n const { disabled, size } = this.getProps();\n const handleCaptionKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled) {\n this.handleCaptionKeyDown(event, captionProps.openMenu);\n }\n };\n\n const handleCaptionClick = () => {\n if (!disabled) {\n captionProps.toggleMenu();\n }\n };\n\n return (\n <span\n data-tid={KebabDataTids.caption}\n tabIndex={disabled ? -1 : 0}\n onClick={handleCaptionClick}\n onKeyDown={handleCaptionKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n className={cx(\n styles.kebab(this.theme),\n size === 'small' && styles.kebabSmall(this.theme),\n size === 'medium' && styles.kebabMedium(this.theme),\n size === 'large' && styles.kebabLarge(this.theme),\n isTheme2022(this.theme) && styles.kebab2022(),\n captionProps.opened && styles.opened(this.theme),\n disabled && styles.disabled(),\n this.state.focusedByTab && styles.focused(this.theme),\n )}\n aria-describedby={this.props['aria-describedby']}\n >\n {isTheme2022(this.theme) ? this.renderIcon2022() : this.renderIcon()}\n </span>\n );\n };\n\n private handleCaptionKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n openMenu: PopupMenuCaptionProps['openMenu'],\n ) => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n private handleChangeMenuState = (isOpened: boolean, restoreFocus: boolean): void => {\n this.setState({\n focusedByTab: !isOpened && restoreFocus,\n });\n };\n\n private handleFocus = () => {\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 };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n });\n };\n\n private renderIcon() {\n const { size, icon = <MenuKebabIcon /> } = this.getProps();\n return (\n <div\n className={cx({\n [styles.icon(this.theme)]: true,\n [styles.iconsmall(this.theme)]: size === 'small',\n [styles.iconmedium(this.theme)]: size === 'medium',\n [styles.iconlarge(this.theme)]: size === 'large',\n })}\n >\n {icon}\n </div>\n );\n }\n\n private renderIcon2022() {\n const { size, icon = <KebabIcon /> } = this.getProps();\n\n if (isElement(icon) && isKonturIcon(icon)) {\n const sizes: Record<ButtonSize, number> = {\n small: parseInt(this.theme.kebabIconSizeSmall),\n medium: parseInt(this.theme.kebabIconSizeMedium),\n large: parseInt(this.theme.kebabIconSizeLarge),\n };\n\n return React.cloneElement(icon, {\n size: icon.props.size ?? sizes[size],\n color: icon.props.color ?? this.theme.kebabIconColor,\n });\n }\n\n return icon;\n }\n}\n\nKebab.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n menuMaxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Размер кебаба small 14px | large 20px\n */\n size: PropTypes.string,\n\n /**\n * Коллбек, вызывающийся перед закрытием кебаба\n */\n onClose: PropTypes.func,\n\n /**\n * Коллбек, вызывающийся перед открытием кебаба\n */\n onOpen: PropTypes.func,\n};\n"]}
@@ -1,3 +1,3 @@
1
- export declare const KebabIcon: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
1
+ export declare const KebabIcon: import("../../lib/forwardRefAndName").ReactUIIconWithRef<SVGSVGElement, Omit<import("../../internal/icons2022/BaseIcon").IconProps, "size"> & {
2
2
  size?: number | "small" | "medium" | "large" | undefined;
3
3
  }>;