@skbkontur/react-ui 3.8.4 → 3.9.2

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 (190) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/cjs/components/Button/Button.d.ts +66 -10
  3. package/cjs/components/Button/Button.js +55 -0
  4. package/cjs/components/Button/Button.js.map +1 -1
  5. package/cjs/components/Button/Button.md +42 -30
  6. package/cjs/components/Checkbox/Checkbox.d.ts +31 -14
  7. package/cjs/components/Checkbox/Checkbox.js +26 -7
  8. package/cjs/components/Checkbox/Checkbox.js.map +1 -1
  9. package/cjs/components/Checkbox/Checkbox.md +92 -51
  10. package/cjs/components/ComboBox/ComboBox.d.ts +6 -0
  11. package/cjs/components/ComboBox/ComboBox.js +4 -0
  12. package/cjs/components/ComboBox/ComboBox.js.map +1 -1
  13. package/cjs/components/DateInput/DateInput.d.ts +6 -0
  14. package/cjs/components/DateInput/DateInput.js +6 -0
  15. package/cjs/components/DateInput/DateInput.js.map +1 -1
  16. package/cjs/components/DatePicker/DatePicker.d.ts +6 -0
  17. package/cjs/components/DatePicker/DatePicker.js +6 -0
  18. package/cjs/components/DatePicker/DatePicker.js.map +1 -1
  19. package/cjs/components/Dropdown/Dropdown.d.ts +2 -2
  20. package/cjs/components/Dropdown/Dropdown.js.map +1 -1
  21. package/cjs/components/Hint/Hint.d.ts +38 -0
  22. package/cjs/components/Hint/Hint.js +39 -1
  23. package/cjs/components/Hint/Hint.js.map +1 -1
  24. package/cjs/components/Hint/Hint.md +40 -1
  25. package/cjs/components/Input/Input.d.ts +6 -2
  26. package/cjs/components/Input/Input.js +4 -0
  27. package/cjs/components/Input/Input.js.map +1 -1
  28. package/cjs/components/Link/Link.d.ts +28 -10
  29. package/cjs/components/Link/Link.js +25 -10
  30. package/cjs/components/Link/Link.js.map +1 -1
  31. package/cjs/components/Link/Link.md +73 -7
  32. package/cjs/components/Link/Link.mixins.js +2 -1
  33. package/cjs/components/Link/Link.mixins.js.map +1 -1
  34. package/cjs/components/MenuItem/MenuItem.d.ts +42 -7
  35. package/cjs/components/MenuItem/MenuItem.js +30 -0
  36. package/cjs/components/MenuItem/MenuItem.js.map +1 -1
  37. package/cjs/components/Radio/Radio.d.ts +27 -11
  38. package/cjs/components/Radio/Radio.js +19 -6
  39. package/cjs/components/Radio/Radio.js.map +1 -1
  40. package/cjs/components/Radio/Radio.md +36 -12
  41. package/cjs/components/RadioGroup/RadioGroup.d.ts +2 -2
  42. package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
  43. package/cjs/components/Select/Select.d.ts +4 -1
  44. package/cjs/components/Select/Select.js +3 -0
  45. package/cjs/components/Select/Select.js.map +1 -1
  46. package/cjs/components/SidePage/SidePage.d.ts +5 -1
  47. package/cjs/components/SidePage/SidePage.js +11 -16
  48. package/cjs/components/SidePage/SidePage.js.map +1 -1
  49. package/cjs/components/SidePage/SidePage.styles.d.ts +5 -2
  50. package/cjs/components/SidePage/SidePage.styles.js +52 -35
  51. package/cjs/components/SidePage/SidePage.styles.js.map +1 -1
  52. package/cjs/components/SidePage/SidePageFooter.js +1 -1
  53. package/cjs/components/SidePage/SidePageFooter.js.map +1 -1
  54. package/cjs/components/SidePage/SidePageHeader.js +1 -1
  55. package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
  56. package/cjs/components/Tabs/Tab.d.ts +2 -2
  57. package/cjs/components/Tabs/Tab.js.map +1 -1
  58. package/cjs/components/Textarea/Textarea.d.ts +6 -2
  59. package/cjs/components/Textarea/Textarea.js +9 -2
  60. package/cjs/components/Textarea/Textarea.js.map +1 -1
  61. package/cjs/components/Textarea/Textarea.styles.d.ts +1 -0
  62. package/cjs/components/Textarea/Textarea.styles.js +22 -19
  63. package/cjs/components/Textarea/Textarea.styles.js.map +1 -1
  64. package/cjs/components/Toggle/Toggle.d.ts +2 -2
  65. package/cjs/components/Toggle/Toggle.js.map +1 -1
  66. package/cjs/components/Token/Token.d.ts +6 -0
  67. package/cjs/components/Token/Token.js +6 -0
  68. package/cjs/components/Token/Token.js.map +1 -1
  69. package/cjs/components/TokenInput/TokenInput.d.ts +6 -0
  70. package/cjs/components/TokenInput/TokenInput.js +23 -17
  71. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  72. package/cjs/components/TokenInput/TokenInputMenu.js +1 -1
  73. package/cjs/components/TokenInput/TokenInputMenu.js.map +1 -1
  74. package/cjs/components/Tooltip/Tooltip.d.ts +3 -2
  75. package/cjs/components/Tooltip/Tooltip.js +3 -1
  76. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  77. package/cjs/internal/Calendar/Calendar.js +1 -1
  78. package/cjs/internal/Calendar/Calendar.js.map +1 -1
  79. package/cjs/internal/CustomComboBox/ComboBoxMenu.js +1 -1
  80. package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
  81. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +6 -0
  82. package/cjs/internal/CustomComboBox/ComboBoxView.js +6 -0
  83. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  84. package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +6 -0
  85. package/cjs/internal/CustomComboBox/CustomComboBox.js +11 -9
  86. package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  87. package/cjs/internal/InputLikeText/InputLikeText.js +2 -2
  88. package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
  89. package/cjs/internal/Popup/Popup.d.ts +13 -0
  90. package/cjs/internal/Popup/Popup.js +34 -6
  91. package/cjs/internal/Popup/Popup.js.map +1 -1
  92. package/cjs/internal/Popup/PopupHelper.js +1 -0
  93. package/cjs/internal/Popup/PopupHelper.js.map +1 -1
  94. package/cjs/internal/PopupMenu/PopupMenu.d.ts +0 -1
  95. package/cjs/internal/PopupMenu/PopupMenu.js +1 -2
  96. package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
  97. package/cjs/lib/forwardRefAndName.d.ts +5 -0
  98. package/cjs/lib/forwardRefAndName.js +23 -0
  99. package/cjs/lib/forwardRefAndName.js.map +1 -0
  100. package/components/Button/Button/Button.js.map +1 -1
  101. package/components/Button/Button.d.ts +66 -10
  102. package/components/Button/Button.md +42 -30
  103. package/components/Checkbox/Checkbox/Checkbox.js +4 -6
  104. package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
  105. package/components/Checkbox/Checkbox.d.ts +31 -14
  106. package/components/Checkbox/Checkbox.md +92 -51
  107. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  108. package/components/ComboBox/ComboBox.d.ts +6 -0
  109. package/components/DateInput/DateInput/DateInput.js.map +1 -1
  110. package/components/DateInput/DateInput.d.ts +6 -0
  111. package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
  112. package/components/DatePicker/DatePicker.d.ts +6 -0
  113. package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
  114. package/components/Dropdown/Dropdown.d.ts +2 -2
  115. package/components/Hint/Hint/Hint.js +4 -0
  116. package/components/Hint/Hint/Hint.js.map +1 -1
  117. package/components/Hint/Hint.d.ts +38 -0
  118. package/components/Hint/Hint.md +40 -1
  119. package/components/Input/Input/Input.js.map +1 -1
  120. package/components/Input/Input.d.ts +6 -2
  121. package/components/Link/Link/Link.js +5 -12
  122. package/components/Link/Link/Link.js.map +1 -1
  123. package/components/Link/Link.d.ts +28 -10
  124. package/components/Link/Link.md +73 -7
  125. package/components/Link/Link.mixins/Link.mixins.js +1 -1
  126. package/components/Link/Link.mixins/Link.mixins.js.map +1 -1
  127. package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
  128. package/components/MenuItem/MenuItem.d.ts +42 -7
  129. package/components/Radio/Radio/Radio.js +6 -5
  130. package/components/Radio/Radio/Radio.js.map +1 -1
  131. package/components/Radio/Radio.d.ts +27 -11
  132. package/components/Radio/Radio.md +36 -12
  133. package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
  134. package/components/RadioGroup/RadioGroup.d.ts +2 -2
  135. package/components/Select/Select/Select.js.map +1 -1
  136. package/components/Select/Select.d.ts +4 -1
  137. package/components/SidePage/SidePage/SidePage.js +16 -28
  138. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  139. package/components/SidePage/SidePage.d.ts +5 -1
  140. package/components/SidePage/SidePage.styles/SidePage.styles.js +39 -30
  141. package/components/SidePage/SidePage.styles/SidePage.styles.js.map +1 -1
  142. package/components/SidePage/SidePage.styles.d.ts +5 -2
  143. package/components/SidePage/SidePageFooter/SidePageFooter.js +1 -0
  144. package/components/SidePage/SidePageFooter/SidePageFooter.js.map +1 -1
  145. package/components/SidePage/SidePageHeader/SidePageHeader.js +2 -1
  146. package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
  147. package/components/Tabs/Tab/Tab.js.map +1 -1
  148. package/components/Tabs/Tab.d.ts +2 -2
  149. package/components/Textarea/Textarea/Textarea.js +5 -3
  150. package/components/Textarea/Textarea/Textarea.js.map +1 -1
  151. package/components/Textarea/Textarea.d.ts +6 -2
  152. package/components/Textarea/Textarea.styles/Textarea.styles.js +12 -9
  153. package/components/Textarea/Textarea.styles/Textarea.styles.js.map +1 -1
  154. package/components/Textarea/Textarea.styles.d.ts +1 -0
  155. package/components/Toggle/Toggle/Toggle.js.map +1 -1
  156. package/components/Toggle/Toggle.d.ts +2 -2
  157. package/components/Token/Token/Token.js.map +1 -1
  158. package/components/Token/Token.d.ts +6 -0
  159. package/components/TokenInput/TokenInput/TokenInput.js +30 -19
  160. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  161. package/components/TokenInput/TokenInput.d.ts +6 -0
  162. package/components/TokenInput/TokenInputMenu/TokenInputMenu.js +2 -2
  163. package/components/TokenInput/TokenInputMenu/TokenInputMenu.js.map +1 -1
  164. package/components/Tooltip/Tooltip/Tooltip.js +2 -1
  165. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  166. package/components/Tooltip/Tooltip.d.ts +3 -2
  167. package/internal/Calendar/Calendar/Calendar.js +2 -1
  168. package/internal/Calendar/Calendar/Calendar.js.map +1 -1
  169. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +4 -2
  170. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
  171. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  172. package/internal/CustomComboBox/ComboBoxView.d.ts +6 -0
  173. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +5 -12
  174. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
  175. package/internal/CustomComboBox/CustomComboBox.d.ts +6 -0
  176. package/internal/InputLikeText/InputLikeText/InputLikeText.js +1 -1
  177. package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
  178. package/internal/Popup/Popup/Popup.js +15 -6
  179. package/internal/Popup/Popup/Popup.js.map +1 -1
  180. package/internal/Popup/Popup.d.ts +13 -0
  181. package/internal/Popup/PopupHelper/PopupHelper.js +2 -1
  182. package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
  183. package/internal/PopupMenu/PopupMenu/PopupMenu.js +0 -1
  184. package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
  185. package/internal/PopupMenu/PopupMenu.d.ts +0 -1
  186. package/lib/forwardRefAndName/forwardRefAndName.js +11 -0
  187. package/lib/forwardRefAndName/forwardRefAndName.js.map +1 -0
  188. package/lib/forwardRefAndName/package.json +6 -0
  189. package/lib/forwardRefAndName.d.ts +5 -0
  190. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["PopupHelper.tsx"],"names":["getPositionObject","position","x","split","direction","align","getElementAbsoluteRect","element","rect","_getElementRelativeRect","convertRectToAbsolute","isAbsoluteRectFullyVisible","coordinates","popupRect","windowRelativeRect","_getWindowRelativeRect","windowAbsoluteRect","absoluteRect","top","left","height","width","_rectContainsRect","canBecomeFullyVisible","positionName","availableScrollDistances","getBoundingClientRect","right","bottom","_getViewProperty","clientWidth","window","innerWidth","clientHeight","innerHeight","offset","_getAbsoluteOffset","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","outerRect","innerRect","getProperty","views","document","documentElement","body","map","find","Boolean","PopupHelper","isFullyVisible"],"mappings":"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","sourcesContent":["import { PopupPosition } from './Popup';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: HTMLElement): Rect {\n const rect = _getElementRelativeRect(element);\n return convertRectToAbsolute(rect);\n}\n\nfunction isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect): boolean {\n const windowRelativeRect = _getWindowRelativeRect();\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect);\n const absoluteRect = {\n top: coordinates.top,\n left: coordinates.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\nfunction canBecomeFullyVisible(positionName: PopupPosition, coordinates: Offset) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: for bottom/right cases browser will always expand document size\n return true;\n}\n\nfunction _getElementRelativeRect(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth) || window.innerWidth,\n height: _getViewProperty((x) => x.clientHeight) || window.innerHeight,\n };\n}\n\nfunction convertRectToAbsolute(rect: Rect): Rect {\n const offset = _getAbsoluteOffset();\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(): Offset {\n const scrollTop = window.pageYOffset || _getViewProperty((x) => x.scrollTop);\n const scrollLeft = window.pageXOffset || _getViewProperty((x) => x.scrollLeft);\n\n const clientTop = _getViewProperty((x) => x.clientTop);\n const clientLeft = _getViewProperty((x) => x.clientLeft);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\nfunction _getViewProperty(getProperty: (e: HTMLElement) => number): number {\n const views = [document.documentElement, document.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n canBecomeFullyVisible,\n};\n"]}
1
+ {"version":3,"sources":["PopupHelper.tsx"],"names":["getPositionObject","position","x","split","direction","align","getElementAbsoluteRect","element","rect","_getElementRelativeRect","convertRectToAbsolute","isAbsoluteRectFullyVisible","coordinates","popupRect","windowRelativeRect","_getWindowRelativeRect","windowAbsoluteRect","absoluteRect","top","left","height","width","_rectContainsRect","canBecomeFullyVisible","positionName","availableScrollDistances","getBoundingClientRect","right","bottom","_getViewProperty","clientWidth","window","innerWidth","clientHeight","innerHeight","offset","_getAbsoluteOffset","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","outerRect","innerRect","getProperty","views","document","documentElement","body","map","find","Boolean","PopupHelper","isFullyVisible"],"mappings":"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","sourcesContent":["import { PopupPosition } from './Popup';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: HTMLElement): Rect {\n const rect = _getElementRelativeRect(element);\n return convertRectToAbsolute(rect);\n}\n\nfunction isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect): boolean {\n const windowRelativeRect = _getWindowRelativeRect();\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect);\n const absoluteRect = {\n top: coordinates.top,\n left: coordinates.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\n// Can become fully visible by scrolling into viewport\nfunction canBecomeFullyVisible(positionName: PopupPosition, coordinates: Offset) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: for bottom/right cases browser will always expand document size\n return true;\n}\n\nfunction _getElementRelativeRect(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth) || window.innerWidth,\n height: _getViewProperty((x) => x.clientHeight) || window.innerHeight,\n };\n}\n\nfunction convertRectToAbsolute(rect: Rect): Rect {\n const offset = _getAbsoluteOffset();\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(): Offset {\n const scrollTop = window.pageYOffset || _getViewProperty((x) => x.scrollTop);\n const scrollLeft = window.pageXOffset || _getViewProperty((x) => x.scrollLeft);\n\n const clientTop = _getViewProperty((x) => x.clientTop);\n const clientLeft = _getViewProperty((x) => x.clientLeft);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\nfunction _getViewProperty(getProperty: (e: HTMLElement) => number): number {\n const views = [document.documentElement, document.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n canBecomeFullyVisible,\n};\n"]}
@@ -49,7 +49,6 @@ export declare class PopupMenu extends React.Component<PopupMenuProps, PopupMenu
49
49
  positions: PopupPosition[];
50
50
  type: string;
51
51
  popupHasPin: boolean;
52
- popupMargin: number;
53
52
  disableAnimations: boolean;
54
53
  };
55
54
  static Type: {
@@ -78,7 +78,6 @@ PopupMenu = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.defaul
78
78
 
79
79
 
80
80
 
81
-
82
81
  state = {
83
82
  menuVisible: false,
84
83
  firstItemShouldBeSelected: false };_this.
@@ -266,4 +265,4 @@ PopupMenu = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.defaul
266
265
 
267
266
  var restoreFocus = event.type === 'keydown';
268
267
  _this.hideMenu(restoreFocus);
269
- };return _this;}var _proto = PopupMenu.prototype;_proto.render = function render() {return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: this.hideMenuWithoutFocusing, onFocusOutside: this.hideMenuWithoutFocusing, active: this.state.menuVisible }, /*#__PURE__*/_react.default.createElement("div", { className: _PopupMenu.styles.container(), style: { width: this.props.width } }, this.renderCaption(), this.captionWrapper && this.props.children && /*#__PURE__*/_react.default.createElement(_Popup.Popup, { anchorElement: this.captionWrapper, opened: this.state.menuVisible, hasShadow: true, margin: this.props.popupMargin, hasPin: this.props.popupHasPin, pinOffset: this.props.popupPinOffset, positions: this.getPositions(), disableAnimations: this.props.disableAnimations, onOpen: this.handleOpen, width: this.props.menuWidth || 'auto' }, /*#__PURE__*/_react.default.createElement(_InternalMenu.InternalMenu, { hasShadow: false, maxHeight: this.props.menuMaxHeight || 'none', onKeyDown: this.handleKeyDown, onItemClick: this.handleItemSelection, cyclicSelection: false, ref: this.refInternalMenu, initialSelectedItemIndex: this.state.firstItemShouldBeSelected ? 0 : -1, header: this.props.header, footer: this.props.footer }, this.props.children)))));};_proto.getPositions = function getPositions() {if (this.props.positions && (0, _validatePositions.isValidPositions)(this.props.positions)) {return this.props.positions;}return _PopupMenuPositions.PopupMenuPositions;};return PopupMenu;}(_react.default.Component);exports.PopupMenu = PopupMenu;PopupMenu.__KONTUR_REACT_UI__ = 'PopupMenu';PopupMenu.defaultProps = { positions: _PopupMenuPositions.PopupMenuPositions, type: PopupMenuType.Tooltip, popupHasPin: true, popupMargin: 0, disableAnimations: false };PopupMenu.Type = PopupMenuType;
268
+ };return _this;}var _proto = PopupMenu.prototype;_proto.render = function render() {return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: this.hideMenuWithoutFocusing, onFocusOutside: this.hideMenuWithoutFocusing, active: this.state.menuVisible }, /*#__PURE__*/_react.default.createElement("div", { className: _PopupMenu.styles.container(), style: { width: this.props.width } }, this.renderCaption(), this.captionWrapper && this.props.children && /*#__PURE__*/_react.default.createElement(_Popup.Popup, { anchorElement: this.captionWrapper, opened: this.state.menuVisible, hasShadow: true, margin: this.props.popupMargin, hasPin: this.props.popupHasPin, pinOffset: this.props.popupPinOffset, positions: this.getPositions(), disableAnimations: this.props.disableAnimations, onOpen: this.handleOpen, width: this.props.menuWidth || 'auto' }, /*#__PURE__*/_react.default.createElement(_InternalMenu.InternalMenu, { hasShadow: false, maxHeight: this.props.menuMaxHeight || 'none', onKeyDown: this.handleKeyDown, onItemClick: this.handleItemSelection, cyclicSelection: false, ref: this.refInternalMenu, initialSelectedItemIndex: this.state.firstItemShouldBeSelected ? 0 : -1, header: this.props.header, footer: this.props.footer }, this.props.children)))));};_proto.getPositions = function getPositions() {if (this.props.positions && (0, _validatePositions.isValidPositions)(this.props.positions)) {return this.props.positions;}return _PopupMenuPositions.PopupMenuPositions;};return PopupMenu;}(_react.default.Component);exports.PopupMenu = PopupMenu;PopupMenu.__KONTUR_REACT_UI__ = 'PopupMenu';PopupMenu.defaultProps = { positions: _PopupMenuPositions.PopupMenuPositions, type: PopupMenuType.Tooltip, popupHasPin: true, disableAnimations: false };PopupMenu.Type = PopupMenuType;
@@ -1 +1 @@
1
- {"version":3,"sources":["PopupMenu.tsx"],"names":["PopupMenuType","Dropdown","Tooltip","PopupMenu","state","menuVisible","firstItemShouldBeSelected","captionWrapper","savedFocusableElement","menu","open","showMenu","close","hideMenu","refInternalMenu","element","handleOpen","focus","renderCaption","props","caption","opened","openMenu","closeMenu","toggleMenu","styles","handleCaptionClick","handleCaptionKeyDown","hideMenuWithoutFocusing","saveFocus","setState","handleChangeMenuVisible","restoreFocus","e","isKeyEnter","isKeySpace","isKeyArrowVertical","preventDefault","handleKeyDown","document","activeElement","focusShouldBeRestored","onChangeMenuState","handleItemSelection","event","isDefaultPrevented","type","render","container","width","children","popupMargin","popupHasPin","popupPinOffset","getPositions","disableAnimations","menuWidth","menuMaxHeight","header","footer","positions","PopupMenuPositions","React","Component","__KONTUR_REACT_UI__","defaultProps","Type"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n someKeys,\n} from '../../lib/events/keyboard/identifiers';\nimport { InternalMenu } from '../InternalMenu';\nimport { Popup, PopupPosition } from '../Popup';\nimport { RenderLayer } from '../RenderLayer';\nimport { Nullable } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\n\nimport { PopupMenuPositions } from './PopupMenuPositions';\nimport { isValidPositions } from './validatePositions';\nimport { styles } from './PopupMenu.styles';\n\nexport interface PopupMenuCaptionProps {\n opened: boolean;\n openMenu: (firstItemShouldBeSelected?: boolean) => void;\n closeMenu: (restoreFocus?: boolean) => void;\n toggleMenu: () => void;\n}\n\nexport interface PopupMenuProps extends CommonProps {\n children?: React.ReactNode;\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Ширина контейнера и caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо ```caption```,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: React.ReactNode | ((props: PopupMenuCaptionProps) => React.ReactNode);\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n /** Массив разрешенных положений меню относительно caption'а. */\n positions?: PopupPosition[];\n /** Колбэк, вызываемый после открытия/закрытия меню */\n onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;\n /** Пропсы, передающиеся в Popup */\n popupHasPin?: boolean;\n popupMargin?: number;\n popupPinOffset?: number;\n type?: 'dropdown' | 'tooltip';\n disableAnimations: boolean;\n}\n\ninterface PopupMenuState {\n menuVisible: boolean;\n firstItemShouldBeSelected?: boolean;\n}\n\nexport const PopupMenuType = {\n Dropdown: 'dropdown',\n Tooltip: 'tooltip',\n};\n\nexport class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {\n public static __KONTUR_REACT_UI__ = 'PopupMenu';\n\n public static defaultProps = {\n positions: PopupMenuPositions,\n type: PopupMenuType.Tooltip,\n popupHasPin: true,\n popupMargin: 0,\n disableAnimations: false,\n };\n\n public static Type = PopupMenuType;\n\n public state = {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n };\n\n private captionWrapper: HTMLSpanElement | null = null;\n private savedFocusableElement: HTMLElement | null = null;\n private menu: Nullable<InternalMenu> = null;\n\n public render() {\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer\n onClickOutside={this.hideMenuWithoutFocusing}\n onFocusOutside={this.hideMenuWithoutFocusing}\n active={this.state.menuVisible}\n >\n <div className={styles.container()} style={{ width: this.props.width }}>\n {this.renderCaption()}\n {this.captionWrapper && this.props.children && (\n <Popup\n anchorElement={this.captionWrapper}\n opened={this.state.menuVisible}\n hasShadow\n margin={this.props.popupMargin}\n hasPin={this.props.popupHasPin}\n pinOffset={this.props.popupPinOffset}\n positions={this.getPositions()}\n disableAnimations={this.props.disableAnimations}\n onOpen={this.handleOpen}\n width={this.props.menuWidth || 'auto'}\n >\n <InternalMenu\n hasShadow={false}\n maxHeight={this.props.menuMaxHeight || 'none'}\n onKeyDown={this.handleKeyDown}\n onItemClick={this.handleItemSelection}\n cyclicSelection={false}\n ref={this.refInternalMenu}\n initialSelectedItemIndex={this.state.firstItemShouldBeSelected ? 0 : -1}\n header={this.props.header}\n footer={this.props.footer}\n >\n {this.props.children}\n </InternalMenu>\n </Popup>\n )}\n </div>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n public open = (): void => this.showMenu();\n public close = (): void => this.hideMenu();\n\n private refInternalMenu = (element: Nullable<InternalMenu>) => (this.menu = element);\n\n private handleOpen = () => {\n if (this.menu) {\n this.menu.focus();\n }\n };\n\n private renderCaption = () => {\n if (typeof this.props.caption === 'function') {\n const caption = this.props.caption({\n opened: this.state.menuVisible,\n openMenu: this.showMenu,\n closeMenu: this.hideMenu,\n toggleMenu: this.toggleMenu,\n });\n\n return (\n <span\n data-tid=\"PopupMenu__caption\"\n className={styles.caption()}\n ref={(element) => (this.captionWrapper = element)}\n >\n {caption}\n </span>\n );\n }\n\n return (\n <span\n data-tid=\"PopupMenu__caption\"\n onClick={this.handleCaptionClick}\n onKeyDown={this.handleCaptionKeyDown}\n ref={(element) => (this.captionWrapper = element)}\n className={styles.caption()}\n >\n {this.props.caption}\n </span>\n );\n };\n\n private hideMenuWithoutFocusing = () => this.hideMenu();\n\n private getPositions() {\n if (this.props.positions && isValidPositions(this.props.positions)) {\n return this.props.positions;\n }\n\n return PopupMenuPositions;\n }\n\n private showMenu = (firstItemShouldBeSelected?: boolean): void => {\n this.saveFocus();\n this.setState(\n {\n menuVisible: true,\n firstItemShouldBeSelected,\n },\n () => {\n this.handleChangeMenuVisible(false);\n },\n );\n };\n\n private hideMenu = (restoreFocus?: boolean): void => {\n this.setState(\n {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n },\n () => {\n this.handleChangeMenuVisible(!!restoreFocus);\n },\n );\n };\n\n private toggleMenu = (): void => {\n this.state.menuVisible ? this.hideMenu() : this.showMenu();\n };\n\n private handleCaptionClick = (): void => {\n this.toggleMenu();\n };\n\n private handleCaptionKeyDown = (e: React.KeyboardEvent<HTMLElement>): void => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n this.showMenu(true);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEscape(e)) {\n const restoreFocus = true;\n this.hideMenu(restoreFocus);\n }\n };\n\n private saveFocus = (): void => {\n if (document) {\n this.savedFocusableElement = document.activeElement as HTMLElement;\n }\n };\n\n private restoreFocus = (): void => {\n if (this.savedFocusableElement) {\n this.savedFocusableElement.focus();\n this.savedFocusableElement = null;\n }\n };\n\n private handleChangeMenuVisible = (focusShouldBeRestored: boolean): void => {\n if (focusShouldBeRestored) {\n this.restoreFocus();\n }\n if (typeof this.props.onChangeMenuState === 'function') {\n this.props.onChangeMenuState(this.state.menuVisible, focusShouldBeRestored);\n }\n };\n\n private handleItemSelection = (event: React.SyntheticEvent<HTMLElement>): void => {\n if (event.isDefaultPrevented()) {\n return;\n }\n\n if (event.type === 'keydown') {\n event.preventDefault();\n }\n\n const restoreFocus = event.type === 'keydown';\n this.hideMenu(restoreFocus);\n };\n}\n"]}
1
+ {"version":3,"sources":["PopupMenu.tsx"],"names":["PopupMenuType","Dropdown","Tooltip","PopupMenu","state","menuVisible","firstItemShouldBeSelected","captionWrapper","savedFocusableElement","menu","open","showMenu","close","hideMenu","refInternalMenu","element","handleOpen","focus","renderCaption","props","caption","opened","openMenu","closeMenu","toggleMenu","styles","handleCaptionClick","handleCaptionKeyDown","hideMenuWithoutFocusing","saveFocus","setState","handleChangeMenuVisible","restoreFocus","e","isKeyEnter","isKeySpace","isKeyArrowVertical","preventDefault","handleKeyDown","document","activeElement","focusShouldBeRestored","onChangeMenuState","handleItemSelection","event","isDefaultPrevented","type","render","container","width","children","popupMargin","popupHasPin","popupPinOffset","getPositions","disableAnimations","menuWidth","menuMaxHeight","header","footer","positions","PopupMenuPositions","React","Component","__KONTUR_REACT_UI__","defaultProps","Type"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n someKeys,\n} from '../../lib/events/keyboard/identifiers';\nimport { InternalMenu } from '../InternalMenu';\nimport { Popup, PopupPosition } from '../Popup';\nimport { RenderLayer } from '../RenderLayer';\nimport { Nullable } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\n\nimport { PopupMenuPositions } from './PopupMenuPositions';\nimport { isValidPositions } from './validatePositions';\nimport { styles } from './PopupMenu.styles';\n\nexport interface PopupMenuCaptionProps {\n opened: boolean;\n openMenu: (firstItemShouldBeSelected?: boolean) => void;\n closeMenu: (restoreFocus?: boolean) => void;\n toggleMenu: () => void;\n}\n\nexport interface PopupMenuProps extends CommonProps {\n children?: React.ReactNode;\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Ширина контейнера и caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо ```caption```,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: React.ReactNode | ((props: PopupMenuCaptionProps) => React.ReactNode);\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n /** Массив разрешенных положений меню относительно caption'а. */\n positions?: PopupPosition[];\n /** Колбэк, вызываемый после открытия/закрытия меню */\n onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;\n /** Пропсы, передающиеся в Popup */\n popupHasPin?: boolean;\n popupMargin?: number;\n popupPinOffset?: number;\n type?: 'dropdown' | 'tooltip';\n disableAnimations: boolean;\n}\n\ninterface PopupMenuState {\n menuVisible: boolean;\n firstItemShouldBeSelected?: boolean;\n}\n\nexport const PopupMenuType = {\n Dropdown: 'dropdown',\n Tooltip: 'tooltip',\n};\n\nexport class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {\n public static __KONTUR_REACT_UI__ = 'PopupMenu';\n\n public static defaultProps = {\n positions: PopupMenuPositions,\n type: PopupMenuType.Tooltip,\n popupHasPin: true,\n disableAnimations: false,\n };\n\n public static Type = PopupMenuType;\n\n public state = {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n };\n\n private captionWrapper: HTMLSpanElement | null = null;\n private savedFocusableElement: HTMLElement | null = null;\n private menu: Nullable<InternalMenu> = null;\n\n public render() {\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer\n onClickOutside={this.hideMenuWithoutFocusing}\n onFocusOutside={this.hideMenuWithoutFocusing}\n active={this.state.menuVisible}\n >\n <div className={styles.container()} style={{ width: this.props.width }}>\n {this.renderCaption()}\n {this.captionWrapper && this.props.children && (\n <Popup\n anchorElement={this.captionWrapper}\n opened={this.state.menuVisible}\n hasShadow\n margin={this.props.popupMargin}\n hasPin={this.props.popupHasPin}\n pinOffset={this.props.popupPinOffset}\n positions={this.getPositions()}\n disableAnimations={this.props.disableAnimations}\n onOpen={this.handleOpen}\n width={this.props.menuWidth || 'auto'}\n >\n <InternalMenu\n hasShadow={false}\n maxHeight={this.props.menuMaxHeight || 'none'}\n onKeyDown={this.handleKeyDown}\n onItemClick={this.handleItemSelection}\n cyclicSelection={false}\n ref={this.refInternalMenu}\n initialSelectedItemIndex={this.state.firstItemShouldBeSelected ? 0 : -1}\n header={this.props.header}\n footer={this.props.footer}\n >\n {this.props.children}\n </InternalMenu>\n </Popup>\n )}\n </div>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n public open = (): void => this.showMenu();\n public close = (): void => this.hideMenu();\n\n private refInternalMenu = (element: Nullable<InternalMenu>) => (this.menu = element);\n\n private handleOpen = () => {\n if (this.menu) {\n this.menu.focus();\n }\n };\n\n private renderCaption = () => {\n if (typeof this.props.caption === 'function') {\n const caption = this.props.caption({\n opened: this.state.menuVisible,\n openMenu: this.showMenu,\n closeMenu: this.hideMenu,\n toggleMenu: this.toggleMenu,\n });\n\n return (\n <span\n data-tid=\"PopupMenu__caption\"\n className={styles.caption()}\n ref={(element) => (this.captionWrapper = element)}\n >\n {caption}\n </span>\n );\n }\n\n return (\n <span\n data-tid=\"PopupMenu__caption\"\n onClick={this.handleCaptionClick}\n onKeyDown={this.handleCaptionKeyDown}\n ref={(element) => (this.captionWrapper = element)}\n className={styles.caption()}\n >\n {this.props.caption}\n </span>\n );\n };\n\n private hideMenuWithoutFocusing = () => this.hideMenu();\n\n private getPositions() {\n if (this.props.positions && isValidPositions(this.props.positions)) {\n return this.props.positions;\n }\n\n return PopupMenuPositions;\n }\n\n private showMenu = (firstItemShouldBeSelected?: boolean): void => {\n this.saveFocus();\n this.setState(\n {\n menuVisible: true,\n firstItemShouldBeSelected,\n },\n () => {\n this.handleChangeMenuVisible(false);\n },\n );\n };\n\n private hideMenu = (restoreFocus?: boolean): void => {\n this.setState(\n {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n },\n () => {\n this.handleChangeMenuVisible(!!restoreFocus);\n },\n );\n };\n\n private toggleMenu = (): void => {\n this.state.menuVisible ? this.hideMenu() : this.showMenu();\n };\n\n private handleCaptionClick = (): void => {\n this.toggleMenu();\n };\n\n private handleCaptionKeyDown = (e: React.KeyboardEvent<HTMLElement>): void => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n this.showMenu(true);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEscape(e)) {\n const restoreFocus = true;\n this.hideMenu(restoreFocus);\n }\n };\n\n private saveFocus = (): void => {\n if (document) {\n this.savedFocusableElement = document.activeElement as HTMLElement;\n }\n };\n\n private restoreFocus = (): void => {\n if (this.savedFocusableElement) {\n this.savedFocusableElement.focus();\n this.savedFocusableElement = null;\n }\n };\n\n private handleChangeMenuVisible = (focusShouldBeRestored: boolean): void => {\n if (focusShouldBeRestored) {\n this.restoreFocus();\n }\n if (typeof this.props.onChangeMenuState === 'function') {\n this.props.onChangeMenuState(this.state.menuVisible, focusShouldBeRestored);\n }\n };\n\n private handleItemSelection = (event: React.SyntheticEvent<HTMLElement>): void => {\n if (event.isDefaultPrevented()) {\n return;\n }\n\n if (event.type === 'keydown') {\n event.preventDefault();\n }\n\n const restoreFocus = event.type === 'keydown';\n this.hideMenu(restoreFocus);\n };\n}\n"]}
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export interface ReactUIComponentWithRef<T, P> extends React.NamedExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<T>>, Pick<React.ForwardRefExoticComponent<P>, 'propTypes'> {
3
+ __KONTUR_REACT_UI__: string;
4
+ }
5
+ export declare function forwardRefAndName<ElementType, Props>(name: string, render: React.ForwardRefRenderFunction<ElementType, Props>): ReactUIComponentWithRef<ElementType, Props>;
@@ -0,0 +1,23 @@
1
+ "use strict";exports.__esModule = true;exports.forwardRefAndName = forwardRefAndName;var _react = require("react");
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+ function forwardName(
10
+ name,
11
+ render)
12
+ {
13
+ render.displayName = name;
14
+ render.__KONTUR_REACT_UI__ = name;
15
+ return render;
16
+ }
17
+
18
+ function forwardRefAndName(
19
+ name,
20
+ render)
21
+ {
22
+ return forwardName(name, /*#__PURE__*/(0, _react.forwardRef)(render));
23
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["forwardRefAndName.ts"],"names":["forwardName","name","render","displayName","__KONTUR_REACT_UI__","forwardRefAndName"],"mappings":"qFAAA;;;;;;;;AAQA,SAASA,WAAT;AACEC,IADF;AAEEC,MAFF;AAG+C;AAC7CA,EAAAA,MAAM,CAACC,WAAP,GAAqBF,IAArB;AACAC,EAAAA,MAAM,CAACE,mBAAP,GAA6BH,IAA7B;AACA,SAAOC,MAAP;AACD;;AAEM,SAASG,iBAAT;AACLJ,IADK;AAELC,MAFK;AAGwC;AAC7C,SAAOF,WAAW,CAAqBC,IAArB,eAA2B,uBAAWC,MAAX,CAA3B,CAAlB;AACD","sourcesContent":["import { forwardRef } from 'react';\n\nexport interface ReactUIComponentWithRef<T, P>\n extends React.NamedExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<T>>,\n Pick<React.ForwardRefExoticComponent<P>, 'propTypes'> {\n __KONTUR_REACT_UI__: string;\n}\n\nfunction forwardName<ElementType, Props>(\n name: string,\n render: ReactUIComponentWithRef<ElementType, Props>,\n): ReactUIComponentWithRef<ElementType, Props> {\n render.displayName = name;\n render.__KONTUR_REACT_UI__ = name;\n return render;\n}\n\nexport function forwardRefAndName<ElementType, Props>(\n name: string,\n render: React.ForwardRefRenderFunction<ElementType, Props>,\n): ReactUIComponentWithRef<ElementType, Props> {\n return forwardName<ElementType, Props>(name, forwardRef(render) as ReactUIComponentWithRef<ElementType, Props>);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["Button.tsx"],"names":["React","isIE11","isEdge","keyListener","ThemeContext","Spinner","CommonWrapper","cx","styles","activeStyles","globalClasses","Corners","Button","state","focusedByTab","theme","node","handleFocus","e","props","disabled","disableFocus","requestAnimationFrame","isTabPressed","setState","onFocus","handleBlur","onBlur","_ref","componentDidMount","autoFocus","focus","blur","render","renderMain","corners","active","borderless","checked","error","warning","loading","arrow","narrow","icon","_noPadding","_noRightPadding","use","defaultProps","visuallyFocused","align","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onClick","width","children","sizeClass","getSizeClassName","isFocused","isLink","rootProps","type","className","root","checkedDisabled","noPadding","noRightPadding","style","borderTopLeftRadius","TOP_LEFT","undefined","borderTopRightRadius","TOP_RIGHT","borderBottomRightRadius","BOTTOM_RIGHT","borderBottomLeftRadius","BOTTOM_LEFT","textAlign","tabIndex","title","wrapProps","wrap","wrapArrow","wrapArrowLeft","outlineNode","outline","outlineWarning","outlineError","outlineLink","outlineLinkWarning","outlineLinkError","loadingNode","getLoadingSpinner","iconNode","getSizeIconClassName","iconNoRightPadding","iconLink","arrowNode","arrowWarning","arrowError","arrowFocus","arrowLeft","arrowHelper","arrowHelperTop","arrowHelperBottom","link","linkFocus","linkDisabled","Object","assign","wrapLink","caption","captionTranslated","captionLink","captionDisabled","visibilityHidden","size","sizeLarge","sizeLargeIE11","sizeMedium","sizeMediumIE11","sizeSmall","sizeSmallIE11","iconLarge","iconMedium","iconSmall","Component","__KONTUR_REACT_UI__","__BUTTON__","isButton","child","isValidElement","prototype","hasOwnProperty","call"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isIE11, isEdge } from '../../lib/client';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Spinner } from '../Spinner';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles, activeStyles, globalClasses } from './Button.styles';\nimport { Corners } from './Corners';\n\nexport type ButtonSize = 'small' | 'medium' | 'large';\nexport type ButtonType = 'button' | 'submit' | 'reset';\nexport type ButtonUse = 'default' | 'primary' | 'success' | 'danger' | 'pay' | 'link';\n\nexport interface ButtonProps extends CommonProps {\n /** @ignore */\n _noPadding?: boolean;\n\n /** @ignore */\n _noRightPadding?: boolean;\n\n /**\n * Визуально нажатое состояние.\n */\n active?: boolean;\n\n /** `type TextAlignProperty = \"inherit\" | \"initial\" | \"unset\" | \"center\" | \"end\" | \"justify\" | \"left\" | \"match-parent\" | \"right\" | \"start\"` */\n align?: React.CSSProperties['textAlign'];\n\n /**\n * Кнопка со стрелкой.\n *\n * `type ButtonArrow = boolean | \"left\"`\n */\n arrow?: boolean | 'left';\n\n autoFocus?: boolean;\n\n borderless?: boolean;\n\n checked?: boolean;\n\n children?: React.ReactNode;\n\n /** @ignore */\n corners?: number;\n\n disabled?: boolean;\n\n /** @ignore */\n disableFocus?: boolean;\n\n error?: boolean;\n\n focused?: boolean;\n\n /**\n * Иконка слева от текста кнопки.\n */\n icon?: React.ReactElement<any>;\n\n loading?: boolean;\n\n narrow?: boolean;\n\n onBlur?: React.FocusEventHandler<HTMLButtonElement>;\n\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n\n onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;\n\n onMouseEnter?: React.MouseEventHandler<HTMLButtonElement>;\n\n onMouseLeave?: React.MouseEventHandler<HTMLButtonElement>;\n\n onMouseOver?: React.MouseEventHandler<HTMLButtonElement>;\n\n /** `type ButtonSize = \"small\" | \"medium\" | \"large\"` */\n size?: ButtonSize;\n\n /** `type ButtonType = \"button\" | \"submit\" | \"reset\"` */\n type?: ButtonType;\n\n title?: string;\n\n /**\n * Вариант использования. Влияет на цвет кнопки.\n *\n * `type ButtonUse = \"default\" | \"primary\" | \"success\" | \"danger\" | \"pay\" | \"link\"`\n */\n use?: ButtonUse;\n\n /** @ignore */\n visuallyFocused?: boolean;\n\n warning?: boolean;\n\n width?: number | string;\n}\n\nexport interface ButtonState {\n focusedByTab: boolean;\n}\n\nexport class Button extends React.Component<ButtonProps, ButtonState> {\n public static __KONTUR_REACT_UI__ = 'Button';\n public static __BUTTON__ = true;\n public static TOP_LEFT = Corners.TOP_LEFT;\n public static TOP_RIGHT = Corners.TOP_RIGHT;\n public static BOTTOM_RIGHT = Corners.BOTTOM_RIGHT;\n public static BOTTOM_LEFT = Corners.BOTTOM_LEFT;\n\n public static defaultProps = {\n use: 'default' as ButtonUse,\n size: 'small' as ButtonSize,\n type: 'button' as ButtonType,\n };\n\n public state = {\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private node: HTMLButtonElement | null = null;\n\n public componentDidMount() {\n if (this.props.autoFocus) {\n keyListener.isTabPressed = true;\n this.focus();\n }\n }\n\n /**\n * @public\n */\n public focus() {\n this.node?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.node?.blur();\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const {\n corners = 0,\n active,\n disabled,\n borderless,\n checked,\n error,\n warning,\n loading,\n arrow,\n narrow,\n icon,\n _noPadding,\n _noRightPadding,\n use = Button.defaultProps.use,\n visuallyFocused,\n align,\n disableFocus,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onKeyDown,\n onClick,\n width,\n children,\n } = this.props;\n const sizeClass = this.getSizeClassName();\n\n const isFocused = this.state.focusedByTab || visuallyFocused;\n const isLink = use === 'link';\n const rootProps = {\n // By default the type attribute is 'submit'. IE8 will fire a click event\n // on this button if somewhere on the page user presses Enter while some\n // input is focused. So we set type to 'button' by default.\n type: this.props.type,\n className: cx({\n [styles.root(this.theme)]: true,\n [styles[use](this.theme)]: true,\n [activeStyles[use](this.theme)]: active,\n [sizeClass]: true,\n [styles.focus(this.theme)]: isFocused && !checked,\n [styles.checked(this.theme)]: checked,\n [styles.disabled(this.theme)]: disabled || loading,\n [styles.checkedDisabled(this.theme)]: checked && disabled,\n [styles.borderless()]: borderless && !disabled && !loading && !checked && !isFocused && !active,\n [styles.narrow()]: narrow,\n [styles.noPadding()]: _noPadding,\n [styles.noRightPadding()]: _noRightPadding,\n }),\n style: {\n borderTopLeftRadius: corners & Corners.TOP_LEFT ? 0 : undefined,\n borderTopRightRadius: corners & Corners.TOP_RIGHT ? 0 : undefined,\n borderBottomRightRadius: corners & Corners.BOTTOM_RIGHT ? 0 : undefined,\n borderBottomLeftRadius: corners & Corners.BOTTOM_LEFT ? 0 : undefined,\n textAlign: align,\n },\n disabled: disabled || loading,\n onClick: onClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onKeyDown: onKeyDown,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n onMouseOver: onMouseOver,\n tabIndex: disableFocus ? -1 : 0,\n title: this.props.title,\n };\n\n const wrapProps = {\n className: cx({\n [styles.wrap()]: true,\n [styles.wrapArrow()]: arrow === true,\n [styles.wrapArrowLeft()]: arrow === 'left',\n }),\n style: {\n width: width,\n },\n };\n\n let outlineNode = null;\n if (!isFocused || isLink) {\n outlineNode = (\n <div\n className={cx(styles.outline(), {\n [styles.outlineWarning(this.theme)]: warning,\n [styles.outlineError(this.theme)]: error,\n [styles.outlineLink()]: isLink,\n [styles.outlineLinkWarning(this.theme)]: isLink && warning,\n [styles.outlineLinkError(this.theme)]: isLink && error,\n })}\n />\n );\n }\n\n let loadingNode = null;\n if (loading && !icon) {\n loadingNode = <div className={styles.loading()}>{this.getLoadingSpinner()}</div>;\n }\n\n let iconNode = null;\n if (icon) {\n iconNode = (\n <span\n className={cx(styles.icon(), this.getSizeIconClassName(), {\n [styles.iconNoRightPadding()]: !children,\n [styles.iconLink(this.theme)]: isLink,\n })}\n >\n {loading ? this.getLoadingSpinner() : icon}\n </span>\n );\n }\n\n let arrowNode = null;\n if (arrow) {\n arrowNode = (\n <div\n className={cx({\n [styles.arrow()]: true,\n [styles.arrowWarning(this.theme)]: !checked && warning,\n [styles.arrowError(this.theme)]: !checked && error,\n [styles.arrowFocus(this.theme)]: !checked && isFocused,\n [styles.arrowLeft()]: arrow === 'left',\n })}\n >\n <div className={cx(globalClasses.arrowHelper, globalClasses.arrowHelperTop)} />\n <div className={cx(globalClasses.arrowHelper, globalClasses.arrowHelperBottom)} />\n </div>\n );\n }\n\n // Force disable all props and features, that cannot be use with Link\n if (isLink) {\n rootProps.className = cx({\n [styles.root(this.theme)]: true,\n [sizeClass]: true,\n [styles.link(this.theme)]: true,\n [styles.linkFocus(this.theme)]: isFocused,\n [styles.linkDisabled(this.theme)]: disabled || loading,\n });\n Object.assign(wrapProps, {\n className: cx(styles.wrap(), styles.wrapLink()),\n style: { width: wrapProps.style.width },\n });\n rootProps.style.textAlign = undefined;\n arrowNode = null;\n }\n\n return (\n <CommonWrapper {...this.props}>\n <span {...wrapProps}>\n <button ref={this._ref} {...rootProps}>\n {outlineNode}\n {loadingNode}\n {arrowNode}\n <div\n className={cx(styles.caption(), globalClasses.caption, {\n [styles.captionTranslated()]: active || checked,\n [styles.captionLink()]: isLink,\n [styles.captionDisabled()]: !checked && disabled,\n })}\n >\n {iconNode}\n <span className={cx({ [styles.visibilityHidden()]: !!loadingNode })}>{children}</span>\n </div>\n </button>\n </span>\n </CommonWrapper>\n );\n }\n\n private getLoadingSpinner() {\n return <Spinner caption={null} dimmed type=\"mini\" />;\n }\n\n private getSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return cx(styles.sizeLarge(this.theme), { [styles.sizeLargeIE11(this.theme)]: isIE11 || isEdge });\n case 'medium':\n return cx(styles.sizeMedium(this.theme), { [styles.sizeMediumIE11(this.theme)]: isIE11 || isEdge });\n case 'small':\n default:\n return cx(styles.sizeSmall(this.theme), { [styles.sizeSmallIE11(this.theme)]: isIE11 || isEdge });\n }\n }\n\n private getSizeIconClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.iconLarge(this.theme);\n case 'medium':\n return styles.iconMedium(this.theme);\n case 'small':\n default:\n return styles.iconSmall(this.theme);\n }\n }\n\n private 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 = (child: React.ReactChild): child is React.ReactElement<ButtonProps> => {\n return React.isValidElement<ButtonProps>(child)\n ? Object.prototype.hasOwnProperty.call(child.type, '__BUTTON__')\n : false;\n};\n"]}
1
+ {"version":3,"sources":["Button.tsx"],"names":["React","isIE11","isEdge","keyListener","ThemeContext","Spinner","CommonWrapper","cx","styles","activeStyles","globalClasses","Corners","Button","state","focusedByTab","theme","node","handleFocus","e","props","disabled","disableFocus","requestAnimationFrame","isTabPressed","setState","onFocus","handleBlur","onBlur","_ref","componentDidMount","autoFocus","focus","blur","render","renderMain","corners","active","borderless","checked","error","warning","loading","arrow","narrow","icon","_noPadding","_noRightPadding","use","defaultProps","visuallyFocused","align","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onClick","width","children","sizeClass","getSizeClassName","isFocused","isLink","rootProps","type","className","root","checkedDisabled","noPadding","noRightPadding","style","borderTopLeftRadius","TOP_LEFT","undefined","borderTopRightRadius","TOP_RIGHT","borderBottomRightRadius","BOTTOM_RIGHT","borderBottomLeftRadius","BOTTOM_LEFT","textAlign","tabIndex","title","wrapProps","wrap","wrapArrow","wrapArrowLeft","outlineNode","outline","outlineWarning","outlineError","outlineLink","outlineLinkWarning","outlineLinkError","loadingNode","getLoadingSpinner","iconNode","getSizeIconClassName","iconNoRightPadding","iconLink","arrowNode","arrowWarning","arrowError","arrowFocus","arrowLeft","arrowHelper","arrowHelperTop","arrowHelperBottom","link","linkFocus","linkDisabled","Object","assign","wrapLink","caption","captionTranslated","captionLink","captionDisabled","visibilityHidden","size","sizeLarge","sizeLargeIE11","sizeMedium","sizeMediumIE11","sizeSmall","sizeSmallIE11","iconLarge","iconMedium","iconSmall","Component","__KONTUR_REACT_UI__","__BUTTON__","isButton","child","isValidElement","prototype","hasOwnProperty","call"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isIE11, isEdge } from '../../lib/client';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Spinner } from '../Spinner';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles, activeStyles, globalClasses } from './Button.styles';\nimport { Corners } from './Corners';\n\nexport type ButtonSize = 'small' | 'medium' | 'large';\nexport type ButtonType = 'button' | 'submit' | 'reset';\nexport type ButtonUse = 'default' | 'primary' | 'success' | 'danger' | 'pay' | 'link';\n\nexport interface ButtonProps extends CommonProps {\n /** @ignore */\n _noPadding?: boolean;\n\n /** @ignore */\n _noRightPadding?: boolean;\n\n /**\n * Применяет к кнопке стили псевдокласса `:active`.\n */\n active?: boolean;\n\n /**\n * CSS-свойство `text-align`.\n */\n align?: React.CSSProperties['textAlign'];\n\n /**\n * Превращает обычную кнопку в кнопку со стрелкой.\n */\n arrow?: boolean | 'left';\n\n /**\n * Даёт кнопке фокус после окончания загрузки страницы.\n */\n autoFocus?: boolean;\n\n /**\n * Убирает обводку у кнопки.\n */\n borderless?: boolean;\n\n /**\n * @ignore\n */\n checked?: boolean;\n\n children?: React.ReactNode;\n\n /** @ignore */\n corners?: number;\n\n /**\n * Отключенное состояние кнопки.\n */\n disabled?: boolean;\n\n /** @ignore */\n disableFocus?: boolean;\n\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n\n /**\n * Иконка слева от текста кнопки.\n */\n icon?: React.ReactElement<any>;\n\n /**\n * Переводит кнопку в состояние загрузки.\n */\n loading?: boolean;\n\n /**\n * Сужает кнопку.\n */\n narrow?: boolean;\n\n /**\n * HTML-событие `onblur`.\n */\n onBlur?: React.FocusEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onclick`.\n */\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onfocus`.\n */\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `keydown`.\n */\n onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onmouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * HTML-событие `onmouseover`.\n */\n onMouseOver?: React.MouseEventHandler<HTMLButtonElement>;\n\n /**\n * Задаёт размер кнопки.\n *\n * **Допустимые значения**: `\"small\"`, `\"medium\"`, `\"large\"`.\n */\n size?: ButtonSize;\n\n /**\n * HTML-атрибут `type`.\n */\n type?: ButtonType;\n\n /**\n * HTML-атрибут `title`.\n */\n title?: string;\n\n /**\n * Стиль кнопки.\n *\n * **Допустимые значения**: `\"default\"`, `\"primary\"`, `\"success\"`, `\"danger\"`, `\"pay\"`, `\"link\"`.\n */\n use?: ButtonUse;\n\n /** @ignore */\n visuallyFocused?: boolean;\n\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n\n /**\n * CSS-свойство `width`.\n */\n width?: number | string;\n}\n\nexport interface ButtonState {\n focusedByTab: boolean;\n}\n\nexport class Button extends React.Component<ButtonProps, ButtonState> {\n public static __KONTUR_REACT_UI__ = 'Button';\n public static __BUTTON__ = true;\n public static TOP_LEFT = Corners.TOP_LEFT;\n public static TOP_RIGHT = Corners.TOP_RIGHT;\n public static BOTTOM_RIGHT = Corners.BOTTOM_RIGHT;\n public static BOTTOM_LEFT = Corners.BOTTOM_LEFT;\n\n public static defaultProps = {\n use: 'default' as ButtonUse,\n size: 'small' as ButtonSize,\n type: 'button' as ButtonType,\n };\n\n public state = {\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private node: HTMLButtonElement | null = null;\n\n public componentDidMount() {\n if (this.props.autoFocus) {\n keyListener.isTabPressed = true;\n this.focus();\n }\n }\n\n /**\n * @public\n */\n public focus() {\n this.node?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.node?.blur();\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const {\n corners = 0,\n active,\n disabled,\n borderless,\n checked,\n error,\n warning,\n loading,\n arrow,\n narrow,\n icon,\n _noPadding,\n _noRightPadding,\n use = Button.defaultProps.use,\n visuallyFocused,\n align,\n disableFocus,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onKeyDown,\n onClick,\n width,\n children,\n } = this.props;\n const sizeClass = this.getSizeClassName();\n\n const isFocused = this.state.focusedByTab || visuallyFocused;\n const isLink = use === 'link';\n const rootProps = {\n // By default the type attribute is 'submit'. IE8 will fire a click event\n // on this button if somewhere on the page user presses Enter while some\n // input is focused. So we set type to 'button' by default.\n type: this.props.type,\n className: cx({\n [styles.root(this.theme)]: true,\n [styles[use](this.theme)]: true,\n [activeStyles[use](this.theme)]: active,\n [sizeClass]: true,\n [styles.focus(this.theme)]: isFocused && !checked,\n [styles.checked(this.theme)]: checked,\n [styles.disabled(this.theme)]: disabled || loading,\n [styles.checkedDisabled(this.theme)]: checked && disabled,\n [styles.borderless()]: borderless && !disabled && !loading && !checked && !isFocused && !active,\n [styles.narrow()]: narrow,\n [styles.noPadding()]: _noPadding,\n [styles.noRightPadding()]: _noRightPadding,\n }),\n style: {\n borderTopLeftRadius: corners & Corners.TOP_LEFT ? 0 : undefined,\n borderTopRightRadius: corners & Corners.TOP_RIGHT ? 0 : undefined,\n borderBottomRightRadius: corners & Corners.BOTTOM_RIGHT ? 0 : undefined,\n borderBottomLeftRadius: corners & Corners.BOTTOM_LEFT ? 0 : undefined,\n textAlign: align,\n },\n disabled: disabled || loading,\n onClick: onClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onKeyDown: onKeyDown,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n onMouseOver: onMouseOver,\n tabIndex: disableFocus ? -1 : 0,\n title: this.props.title,\n };\n\n const wrapProps = {\n className: cx({\n [styles.wrap()]: true,\n [styles.wrapArrow()]: arrow === true,\n [styles.wrapArrowLeft()]: arrow === 'left',\n }),\n style: {\n width: width,\n },\n };\n\n let outlineNode = null;\n if (!isFocused || isLink) {\n outlineNode = (\n <div\n className={cx(styles.outline(), {\n [styles.outlineWarning(this.theme)]: warning,\n [styles.outlineError(this.theme)]: error,\n [styles.outlineLink()]: isLink,\n [styles.outlineLinkWarning(this.theme)]: isLink && warning,\n [styles.outlineLinkError(this.theme)]: isLink && error,\n })}\n />\n );\n }\n\n let loadingNode = null;\n if (loading && !icon) {\n loadingNode = <div className={styles.loading()}>{this.getLoadingSpinner()}</div>;\n }\n\n let iconNode = null;\n if (icon) {\n iconNode = (\n <span\n className={cx(styles.icon(), this.getSizeIconClassName(), {\n [styles.iconNoRightPadding()]: !children,\n [styles.iconLink(this.theme)]: isLink,\n })}\n >\n {loading ? this.getLoadingSpinner() : icon}\n </span>\n );\n }\n\n let arrowNode = null;\n if (arrow) {\n arrowNode = (\n <div\n className={cx({\n [styles.arrow()]: true,\n [styles.arrowWarning(this.theme)]: !checked && warning,\n [styles.arrowError(this.theme)]: !checked && error,\n [styles.arrowFocus(this.theme)]: !checked && isFocused,\n [styles.arrowLeft()]: arrow === 'left',\n })}\n >\n <div className={cx(globalClasses.arrowHelper, globalClasses.arrowHelperTop)} />\n <div className={cx(globalClasses.arrowHelper, globalClasses.arrowHelperBottom)} />\n </div>\n );\n }\n\n // Force disable all props and features, that cannot be use with Link\n if (isLink) {\n rootProps.className = cx({\n [styles.root(this.theme)]: true,\n [sizeClass]: true,\n [styles.link(this.theme)]: true,\n [styles.linkFocus(this.theme)]: isFocused,\n [styles.linkDisabled(this.theme)]: disabled || loading,\n });\n Object.assign(wrapProps, {\n className: cx(styles.wrap(), styles.wrapLink()),\n style: { width: wrapProps.style.width },\n });\n rootProps.style.textAlign = undefined;\n arrowNode = null;\n }\n\n return (\n <CommonWrapper {...this.props}>\n <span {...wrapProps}>\n <button ref={this._ref} {...rootProps}>\n {outlineNode}\n {loadingNode}\n {arrowNode}\n <div\n className={cx(styles.caption(), globalClasses.caption, {\n [styles.captionTranslated()]: active || checked,\n [styles.captionLink()]: isLink,\n [styles.captionDisabled()]: !checked && disabled,\n })}\n >\n {iconNode}\n <span className={cx({ [styles.visibilityHidden()]: !!loadingNode })}>{children}</span>\n </div>\n </button>\n </span>\n </CommonWrapper>\n );\n }\n\n private getLoadingSpinner() {\n return <Spinner caption={null} dimmed type=\"mini\" />;\n }\n\n private getSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return cx(styles.sizeLarge(this.theme), { [styles.sizeLargeIE11(this.theme)]: isIE11 || isEdge });\n case 'medium':\n return cx(styles.sizeMedium(this.theme), { [styles.sizeMediumIE11(this.theme)]: isIE11 || isEdge });\n case 'small':\n default:\n return cx(styles.sizeSmall(this.theme), { [styles.sizeSmallIE11(this.theme)]: isIE11 || isEdge });\n }\n }\n\n private getSizeIconClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.iconLarge(this.theme);\n case 'medium':\n return styles.iconMedium(this.theme);\n case 'small':\n default:\n return styles.iconSmall(this.theme);\n }\n }\n\n private 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 = (child: React.ReactChild): child is React.ReactElement<ButtonProps> => {\n return React.isValidElement<ButtonProps>(child)\n ? Object.prototype.hasOwnProperty.call(child.type, '__BUTTON__')\n : false;\n};\n"]}
@@ -9,55 +9,111 @@ export interface ButtonProps extends CommonProps {
9
9
  /** @ignore */
10
10
  _noRightPadding?: boolean;
11
11
  /**
12
- * Визуально нажатое состояние.
12
+ * Применяет к кнопке стили псевдокласса `:active`.
13
13
  */
14
14
  active?: boolean;
15
- /** `type TextAlignProperty = "inherit" | "initial" | "unset" | "center" | "end" | "justify" | "left" | "match-parent" | "right" | "start"` */
15
+ /**
16
+ * CSS-свойство `text-align`.
17
+ */
16
18
  align?: React.CSSProperties['textAlign'];
17
19
  /**
18
- * Кнопка со стрелкой.
19
- *
20
- * `type ButtonArrow = boolean | "left"`
20
+ * Превращает обычную кнопку в кнопку со стрелкой.
21
21
  */
22
22
  arrow?: boolean | 'left';
23
+ /**
24
+ * Даёт кнопке фокус после окончания загрузки страницы.
25
+ */
23
26
  autoFocus?: boolean;
27
+ /**
28
+ * Убирает обводку у кнопки.
29
+ */
24
30
  borderless?: boolean;
31
+ /**
32
+ * @ignore
33
+ */
25
34
  checked?: boolean;
26
35
  children?: React.ReactNode;
27
36
  /** @ignore */
28
37
  corners?: number;
38
+ /**
39
+ * Отключенное состояние кнопки.
40
+ */
29
41
  disabled?: boolean;
30
42
  /** @ignore */
31
43
  disableFocus?: boolean;
44
+ /**
45
+ * Cостояние валидации при ошибке.
46
+ */
32
47
  error?: boolean;
33
- focused?: boolean;
34
48
  /**
35
49
  * Иконка слева от текста кнопки.
36
50
  */
37
51
  icon?: React.ReactElement<any>;
52
+ /**
53
+ * Переводит кнопку в состояние загрузки.
54
+ */
38
55
  loading?: boolean;
56
+ /**
57
+ * Сужает кнопку.
58
+ */
39
59
  narrow?: boolean;
60
+ /**
61
+ * HTML-событие `onblur`.
62
+ */
40
63
  onBlur?: React.FocusEventHandler<HTMLButtonElement>;
64
+ /**
65
+ * HTML-событие `onclick`.
66
+ */
41
67
  onClick?: React.MouseEventHandler<HTMLButtonElement>;
68
+ /**
69
+ * HTML-событие `onfocus`.
70
+ */
42
71
  onFocus?: React.FocusEventHandler<HTMLButtonElement>;
72
+ /**
73
+ * HTML-событие `keydown`.
74
+ */
43
75
  onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;
76
+ /**
77
+ * HTML-событие `onmouseenter`.
78
+ */
44
79
  onMouseEnter?: React.MouseEventHandler<HTMLButtonElement>;
80
+ /**
81
+ * HTML-событие `mouseleave`.
82
+ */
45
83
  onMouseLeave?: React.MouseEventHandler<HTMLButtonElement>;
84
+ /**
85
+ * HTML-событие `onmouseover`.
86
+ */
46
87
  onMouseOver?: React.MouseEventHandler<HTMLButtonElement>;
47
- /** `type ButtonSize = "small" | "medium" | "large"` */
88
+ /**
89
+ * Задаёт размер кнопки.
90
+ *
91
+ * **Допустимые значения**: `"small"`, `"medium"`, `"large"`.
92
+ */
48
93
  size?: ButtonSize;
49
- /** `type ButtonType = "button" | "submit" | "reset"` */
94
+ /**
95
+ * HTML-атрибут `type`.
96
+ */
50
97
  type?: ButtonType;
98
+ /**
99
+ * HTML-атрибут `title`.
100
+ */
51
101
  title?: string;
52
102
  /**
53
- * Вариант использования. Влияет на цвет кнопки.
103
+ * Стиль кнопки.
54
104
  *
55
- * `type ButtonUse = "default" | "primary" | "success" | "danger" | "pay" | "link"`
105
+ * **Допустимые значения**: `"default"`, `"primary"`, `"success"`, `"danger"`, `"pay"`, `"link"`.
56
106
  */
57
107
  use?: ButtonUse;
58
108
  /** @ignore */
59
109
  visuallyFocused?: boolean;
110
+ /**
111
+ * Cостояние валидации при предупреждении.
112
+ */
60
113
  warning?: boolean;
114
+ /**
115
+ * CSS-свойство `width`.
116
+ */
61
117
  width?: number | string;
62
118
  }
63
119
  export interface ButtonState {
@@ -1,13 +1,12 @@
1
- Button example
1
+ Базовый пример кнопки.
2
2
 
3
3
  ```jsx harmony
4
- import OkIcon from '@skbkontur/react-icons/Ok';
5
4
  import { Button } from '@skbkontur/react-ui';
6
5
 
7
- <Button icon={<OkIcon />}>Ok</Button>;
6
+ <Button>Создать отчёт</Button>;
8
7
  ```
9
8
 
10
- Button has different use styles
9
+ У кнопки есть различные стили.
11
10
 
12
11
  ```jsx harmony
13
12
  import { Gapped } from '@skbkontur/react-ui';
@@ -22,19 +21,32 @@ import { Gapped } from '@skbkontur/react-ui';
22
21
  </Gapped>;
23
22
  ```
24
23
 
25
- Button can have different sizes
24
+ Пример кнопки с иконкой.
26
25
 
27
26
  ```jsx harmony
28
- import { Gapped } from '@skbkontur/react-ui';
27
+ import PrintIcon from '@skbkontur/react-icons/Print';
28
+ import { Button } from '@skbkontur/react-ui';
29
29
 
30
- <Gapped>
31
- <Button size="small">Small</Button>
32
- <Button size="medium">Medium</Button>
33
- <Button size="large">Large</Button>
34
- </Gapped>;
30
+ <Button icon={<PrintIcon />}>Напечатать</Button>;
35
31
  ```
36
32
 
37
- Кнопки-стрелки
33
+ У кнопки есть 3 стандартных размера.
34
+
35
+ ```jsx harmony
36
+ <div
37
+ style={{
38
+ display: "flex",
39
+ alignItems: "end",
40
+ justifyContent: "space-between",
41
+ width: "330px"
42
+ }}>
43
+ <Button size="small">Маленькая</Button>
44
+ <Button size="medium">Средняя</Button>
45
+ <Button size="large">Большая</Button>
46
+ </div>
47
+ ```
48
+
49
+ Кнопки в виде стрелок.
38
50
 
39
51
  ```jsx harmony
40
52
  import { Gapped, Button } from '@skbkontur/react-ui';
@@ -48,25 +60,23 @@ import { Gapped, Button } from '@skbkontur/react-ui';
48
60
  Далее
49
61
  </Button>
50
62
  </Gapped>
51
- <Gapped gap={5}>
52
- <Button arrow="left" size="large">
53
- Назад
54
- </Button>
55
- <Button arrow size="large">
56
- Далее
57
- </Button>
58
- </Gapped>
59
63
  </Gapped>;
60
64
  ```
61
65
 
62
- Кнопка в состоянии загрузки
66
+ Кнопка в состоянии загрузки.
67
+
68
+ **Поведение:**
69
+
70
+ Кнопка на время нахождения в состоянии загрузки отключается.
71
+
72
+ Если в кнопке есть иконка, на время загрузки иконка заменяется на спиннер, если иконки нет - весь контент кнопки заменяется на спиннер.
63
73
 
64
74
  ```jsx harmony
75
+ import { Button, Gapped } from '@skbkontur/react-ui';
65
76
  import OkIcon from '@skbkontur/react-icons/Ok';
66
- import { Button } from '@skbkontur/react-ui';
77
+ import BookmarkIcon from '@skbkontur/react-icons/Bookmark';
67
78
 
68
79
  const [loading, setLoading] = React.useState(false);
69
- const [success, setSuccess] = React.useState(false);
70
80
 
71
81
  const delay = time => args => new Promise(resolve => setTimeout(resolve, time, args));
72
82
 
@@ -74,19 +84,21 @@ const handleLoadingStart = () => {
74
84
  delay(2000)()
75
85
  .then(() => {
76
86
  setLoading(false);
77
- setSuccess(true);
78
87
  })
79
- .then(delay(1000))
80
- .then(() => setSuccess(false));
81
88
  };
82
89
 
83
90
  const handleClick = () => {
84
91
  setLoading(true);
85
- setSuccess(false);
86
92
  handleLoadingStart();
87
93
  };
88
94
 
89
- <Button width={150} onClick={handleClick} loading={loading}>
90
- {success ? <OkIcon /> : 'Сохранить'}
91
- </Button>;
95
+ <Gapped>
96
+ <Button width={150} onClick={handleClick} loading={loading}>
97
+ Сохранить
98
+ </Button>
99
+ <Button icon={<BookmarkIcon />} width={150} onClick={handleClick} loading={loading}>
100
+ Сохранить
101
+ </Button>
102
+ </Gapped>
103
+
92
104
  ```
@@ -10,10 +10,6 @@ import { isEdge, isFirefox, isIE11 } from "../../../lib/client";
10
10
  import { CommonWrapper } from "../../../internal/CommonWrapper";
11
11
  import { cx } from "../../../lib/theming/Emotion";
12
12
  import { styles, globalClasses } from "../Checkbox.styles";
13
- /**
14
- * Все свойства, кроме перечисленных, `className` и `style` передаются в `input`.
15
- */
16
-
17
13
  export var Checkbox = /*#__PURE__*/function (_React$Component) {
18
14
  _inheritsLoose(Checkbox, _React$Component);
19
15
 
@@ -97,7 +93,7 @@ export var Checkbox = /*#__PURE__*/function (_React$Component) {
97
93
 
98
94
  var iconClass = cx((_cx3 = {}, _cx3[styles.iconUnchecked()] = !props.checked && !isIndeterminate, _cx3[styles.iconFixBaseline()] = isFirefox || isIE11 || isEdge, _cx3));
99
95
  var box = /*#__PURE__*/React.createElement("span", {
100
- className: cx(styles.box(_this.theme), globalClasses.box, (_cx4 = {}, _cx4[styles.boxChecked(_this.theme)] = props.checked || isIndeterminate, _cx4[styles.boxFocus(_this.theme)] = _this.state.focusedByTab, _cx4[styles.boxError(_this.theme)] = props.error, _cx4[styles.boxWarning(_this.theme)] = props.warning, _cx4[styles.boxDisabled(_this.theme)] = props.disabled, _cx4))
96
+ className: cx(styles.box(_this.theme), globalClasses.box, (_cx4 = {}, _cx4[styles.boxChecked(_this.theme)] = props.checked || isIndeterminate, _cx4[styles.boxDisabled(_this.theme)] = props.disabled, _cx4[styles.boxFocus(_this.theme)] = _this.state.focusedByTab, _cx4[styles.boxError(_this.theme)] = props.error, _cx4[styles.boxWarning(_this.theme)] = props.warning, _cx4))
101
97
  }, isIndeterminate && /*#__PURE__*/React.createElement(SquareIcon, {
102
98
  className: iconClass
103
99
  }) || /*#__PURE__*/React.createElement(OkIcon, {
@@ -192,6 +188,7 @@ export var Checkbox = /*#__PURE__*/function (_React$Component) {
192
188
  });
193
189
  }
194
190
  /**
191
+ * Программная установка фокуса чекбоксу.
195
192
  * @public
196
193
  */
197
194
  ;
@@ -203,6 +200,7 @@ export var Checkbox = /*#__PURE__*/function (_React$Component) {
203
200
  (_this$input = this.input) == null ? void 0 : _this$input.focus();
204
201
  }
205
202
  /**
203
+ * Программное снятие фокуса с чекбокса.
206
204
  * @public
207
205
  */
208
206
  ;
@@ -213,7 +211,7 @@ export var Checkbox = /*#__PURE__*/function (_React$Component) {
213
211
  (_this$input2 = this.input) == null ? void 0 : _this$input2.blur();
214
212
  }
215
213
  /**
216
- * Установить промежуточное значение
214
+ * Устанавливает чекбокс в HTML-состояние `indeterminate`.
217
215
  * @public
218
216
  */
219
217
  ;