@skbkontur/react-ui 3.8.4 → 3.8.5

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 (78) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/cjs/components/Checkbox/Checkbox.d.ts +31 -14
  3. package/cjs/components/Checkbox/Checkbox.js +24 -5
  4. package/cjs/components/Checkbox/Checkbox.js.map +1 -1
  5. package/cjs/components/Checkbox/Checkbox.md +92 -51
  6. package/cjs/components/Hint/Hint.d.ts +33 -0
  7. package/cjs/components/Hint/Hint.js +34 -1
  8. package/cjs/components/Hint/Hint.js.map +1 -1
  9. package/cjs/components/Hint/Hint.md +40 -1
  10. package/cjs/components/Link/Link.d.ts +28 -10
  11. package/cjs/components/Link/Link.js +22 -4
  12. package/cjs/components/Link/Link.js.map +1 -1
  13. package/cjs/components/Link/Link.md +73 -7
  14. package/cjs/components/MenuItem/MenuItem.d.ts +42 -7
  15. package/cjs/components/MenuItem/MenuItem.js +30 -0
  16. package/cjs/components/MenuItem/MenuItem.js.map +1 -1
  17. package/cjs/components/SidePage/SidePage.d.ts +0 -1
  18. package/cjs/components/SidePage/SidePage.js +2 -16
  19. package/cjs/components/SidePage/SidePage.js.map +1 -1
  20. package/cjs/components/SidePage/SidePage.styles.d.ts +5 -1
  21. package/cjs/components/SidePage/SidePage.styles.js +52 -27
  22. package/cjs/components/SidePage/SidePage.styles.js.map +1 -1
  23. package/cjs/components/SidePage/SidePageFooter.js +1 -1
  24. package/cjs/components/SidePage/SidePageFooter.js.map +1 -1
  25. package/cjs/components/SidePage/SidePageHeader.js +1 -1
  26. package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
  27. package/cjs/components/TokenInput/TokenInputMenu.js +1 -1
  28. package/cjs/components/TokenInput/TokenInputMenu.js.map +1 -1
  29. package/cjs/components/Tooltip/Tooltip.d.ts +3 -2
  30. package/cjs/components/Tooltip/Tooltip.js +1 -0
  31. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  32. package/cjs/internal/Calendar/Calendar.js +1 -1
  33. package/cjs/internal/Calendar/Calendar.js.map +1 -1
  34. package/cjs/internal/CustomComboBox/ComboBoxMenu.js +1 -1
  35. package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
  36. package/cjs/internal/Popup/Popup.js +9 -3
  37. package/cjs/internal/Popup/Popup.js.map +1 -1
  38. package/cjs/internal/PopupMenu/PopupMenu.d.ts +0 -1
  39. package/cjs/internal/PopupMenu/PopupMenu.js +1 -2
  40. package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
  41. package/components/Checkbox/Checkbox/Checkbox.js +3 -5
  42. package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
  43. package/components/Checkbox/Checkbox.d.ts +31 -14
  44. package/components/Checkbox/Checkbox.md +92 -51
  45. package/components/Hint/Hint/Hint.js +4 -0
  46. package/components/Hint/Hint/Hint.js.map +1 -1
  47. package/components/Hint/Hint.d.ts +33 -0
  48. package/components/Hint/Hint.md +40 -1
  49. package/components/Link/Link/Link.js +1 -4
  50. package/components/Link/Link/Link.js.map +1 -1
  51. package/components/Link/Link.d.ts +28 -10
  52. package/components/Link/Link.md +73 -7
  53. package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
  54. package/components/MenuItem/MenuItem.d.ts +42 -7
  55. package/components/SidePage/SidePage/SidePage.js +8 -24
  56. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  57. package/components/SidePage/SidePage.d.ts +0 -1
  58. package/components/SidePage/SidePage.styles/SidePage.styles.js +39 -27
  59. package/components/SidePage/SidePage.styles/SidePage.styles.js.map +1 -1
  60. package/components/SidePage/SidePage.styles.d.ts +5 -1
  61. package/components/SidePage/SidePageFooter/SidePageFooter.js +1 -0
  62. package/components/SidePage/SidePageFooter/SidePageFooter.js.map +1 -1
  63. package/components/SidePage/SidePageHeader/SidePageHeader.js +2 -1
  64. package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
  65. package/components/TokenInput/TokenInputMenu/TokenInputMenu.js +1 -1
  66. package/components/TokenInput/TokenInputMenu/TokenInputMenu.js.map +1 -1
  67. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  68. package/components/Tooltip/Tooltip.d.ts +3 -2
  69. package/internal/Calendar/Calendar/Calendar.js +2 -1
  70. package/internal/Calendar/Calendar/Calendar.js.map +1 -1
  71. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +4 -2
  72. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
  73. package/internal/Popup/Popup/Popup.js +6 -4
  74. package/internal/Popup/Popup/Popup.js.map +1 -1
  75. package/internal/PopupMenu/PopupMenu/PopupMenu.js +0 -1
  76. package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
  77. package/internal/PopupMenu/PopupMenu.d.ts +0 -1
  78. package/package.json +2 -2
@@ -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"]}
@@ -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
 
@@ -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
  ;
@@ -1 +1 @@
1
- {"version":3,"sources":["Checkbox.tsx"],"names":["React","PropTypes","keyListener","ThemeContext","OkIcon","SquareIcon","isEdge","isFirefox","isIE11","CommonWrapper","cx","styles","globalClasses","Checkbox","state","focusedByTab","indeterminate","props","initialIndeterminate","theme","input","componentDidMount","setIndeterminate","setState","resetIndeterminate","renderMain","error","warning","onMouseEnter","onMouseLeave","onMouseOver","onValueChange","type","rest","isIndeterminate","rootClass","root","rootFallback","rootChecked","checked","disabled","Boolean","inputProps","className","onChange","handleChange","onFocus","handleFocus","onBlur","handleBlur","onClick","handleClick","ref","inputRef","caption","children","captionClass","captionIE11","iconClass","iconUnchecked","iconFixBaseline","box","boxChecked","boxFocus","boxError","boxWarning","boxDisabled","e","requestAnimationFrame","isTabPressed","event","currentTarget","undefined","UNSAFE_componentWillReceiveProps","nextProps","render","focus","blur","Component","__KONTUR_REACT_UI__","propTypes","bool","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { OkIcon, SquareIcon } from '../../internal/icons/16px';\nimport { isEdge, isFirefox, isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles, globalClasses } from './Checkbox.styles';\n\nexport interface CheckboxProps\n extends CommonProps,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /** Контент `label` */\n children?: React.ReactNode;\n /** Состояние ошибки */\n error?: boolean;\n /** Состояние Предупреждения */\n warning?: boolean;\n /** Вызывается на label */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается при изменении `value` */\n onValueChange?: (value: boolean) => void;\n /** onBlur */\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /** Состояние частичного выделения */\n initialIndeterminate?: boolean;\n }\n > {}\n\nexport interface CheckboxState {\n focusedByTab: boolean;\n indeterminate: boolean;\n}\n\n/**\n * Все свойства, кроме перечисленных, `className` и `style` передаются в `input`.\n */\nexport class Checkbox extends React.Component<CheckboxProps, CheckboxState> {\n public static __KONTUR_REACT_UI__ = 'Checkbox';\n\n public static propTypes = {\n checked: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n warning: PropTypes.bool,\n onValueChange: PropTypes.func,\n onBlur: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n };\n\n public state = {\n focusedByTab: false,\n indeterminate: this.props.initialIndeterminate || false,\n };\n\n private theme!: Theme;\n private input: Nullable<HTMLInputElement>;\n\n public componentDidMount = () => {\n if (this.state.indeterminate && this.input) {\n this.input.indeterminate = true;\n }\n };\n\n public UNSAFE_componentWillReceiveProps(nextProps: CheckboxProps) {\n if (nextProps.checked !== this.props.checked) {\n this.resetIndeterminate();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return <CommonWrapper {...this.props}>{this.renderMain}</CommonWrapper>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public focus() {\n keyListener.isTabPressed = true;\n this.input?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.input?.blur();\n }\n\n /**\n * Установить промежуточное значение\n * @public\n */\n public setIndeterminate = () => {\n this.setState({\n indeterminate: true,\n });\n if (this.input) {\n this.input.indeterminate = true;\n }\n };\n\n /**\n * Сбросить промежуточное значение\n * @public\n */\n public resetIndeterminate = () => {\n this.setState({\n indeterminate: false,\n });\n if (this.input) {\n this.input.indeterminate = false;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<CheckboxProps>) => {\n const {\n error,\n warning,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onValueChange,\n type,\n initialIndeterminate,\n ...rest\n } = props;\n const isIndeterminate = this.state.indeterminate;\n\n const rootClass = cx({\n [styles.root(this.theme)]: true,\n [styles.rootFallback()]: isIE11 || isEdge,\n [styles.rootChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n\n const inputProps = {\n ...rest,\n type: 'checkbox',\n className: styles.input(),\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onClick: this.handleClick,\n ref: this.inputRef,\n };\n\n let caption = null;\n if (this.props.children) {\n const captionClass = cx({\n [styles.caption(this.theme)]: true,\n [styles.captionIE11()]: isIE11 || isEdge,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n caption = <span className={captionClass}>{this.props.children}</span>;\n }\n\n const iconClass = cx({\n [styles.iconUnchecked()]: !props.checked && !isIndeterminate,\n [styles.iconFixBaseline()]: isFirefox || isIE11 || isEdge,\n });\n\n const box = (\n <span\n className={cx(styles.box(this.theme), globalClasses.box, {\n [styles.boxChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.boxFocus(this.theme)]: this.state.focusedByTab,\n [styles.boxError(this.theme)]: props.error,\n [styles.boxWarning(this.theme)]: props.warning,\n [styles.boxDisabled(this.theme)]: props.disabled,\n })}\n >\n {(isIndeterminate && <SquareIcon className={iconClass} />) || <OkIcon className={iconClass} />}\n </span>\n );\n\n return (\n <label className={rootClass} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} onMouseOver={onMouseOver}>\n <input {...inputProps} />\n {box}\n {caption}\n </label>\n );\n };\n\n private handleFocus = (e: React.FocusEvent<any>) => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(e);\n }\n }\n };\n\n private handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n this.props.onBlur?.(e);\n this.setState({ focusedByTab: false });\n };\n\n private inputRef = (ref: HTMLInputElement | null) => {\n this.input = ref;\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const checked = event.currentTarget.checked;\n this.props.onValueChange?.(checked);\n\n this.resetIndeterminate();\n\n this.props.onChange?.(event);\n };\n\n private handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n this.props.onClick?.(e);\n // support IE11's and old Edge's special behavior\n // https://github.com/jquery/jquery/issues/1698\n if (this.state.indeterminate && (isIE11 || isEdge)) {\n this.resetIndeterminate();\n // simulate correct behavior only if onValueChange is used\n // because we cant simulate real native onChange event\n if (this.props.onValueChange && this.input) {\n const checked = !this.input.checked;\n\n if (this.props.checked === undefined) {\n // in case of uncontrolled mode\n this.input.checked = checked;\n }\n\n this.props.onValueChange(checked);\n }\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["Checkbox.tsx"],"names":["React","PropTypes","keyListener","ThemeContext","OkIcon","SquareIcon","isEdge","isFirefox","isIE11","CommonWrapper","cx","styles","globalClasses","Checkbox","state","focusedByTab","indeterminate","props","initialIndeterminate","theme","input","componentDidMount","setIndeterminate","setState","resetIndeterminate","renderMain","error","warning","onMouseEnter","onMouseLeave","onMouseOver","onValueChange","type","rest","isIndeterminate","rootClass","root","rootFallback","rootChecked","checked","disabled","Boolean","inputProps","className","onChange","handleChange","onFocus","handleFocus","onBlur","handleBlur","onClick","handleClick","ref","inputRef","caption","children","captionClass","captionIE11","iconClass","iconUnchecked","iconFixBaseline","box","boxChecked","boxFocus","boxError","boxWarning","boxDisabled","e","requestAnimationFrame","isTabPressed","event","currentTarget","undefined","UNSAFE_componentWillReceiveProps","nextProps","render","focus","blur","Component","__KONTUR_REACT_UI__","propTypes","bool","func"],"mappings":"oOAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;;;AAGA,SAASC,WAAT,QAA4B,8BAA5B;;AAEA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,MAAT,EAAiBC,UAAjB,QAAmC,2BAAnC;AACA,SAASC,MAAT,EAAiBC,SAAjB,EAA4BC,MAA5B,QAA0C,kBAA1C;AACA,SAASC,aAAT,QAAmE,8BAAnE;AACA,SAASC,EAAT,QAAmB,2BAAnB;;AAEA,SAASC,MAAT,EAAiBC,aAAjB,QAAsC,mBAAtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDA,WAAaC,QAAb;;;;;;;;;;;;;;;AAeSC,IAAAA,KAfT,GAeiB;AACbC,MAAAA,YAAY,EAAE,KADD;AAEbC,MAAAA,aAAa,EAAE,MAAKC,KAAL,CAAWC,oBAAX,IAAmC,KAFrC,EAfjB;;;AAoBUC,IAAAA,KApBV;AAqBUC,IAAAA,KArBV;;AAuBSC,IAAAA,iBAvBT,GAuB6B,YAAM;AAC/B,UAAI,MAAKP,KAAL,CAAWE,aAAX,IAA4B,MAAKI,KAArC,EAA4C;AAC1C,cAAKA,KAAL,CAAWJ,aAAX,GAA2B,IAA3B;AACD;AACF,KA3BH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmESM,IAAAA,gBAnET,GAmE4B,YAAM;AAC9B,YAAKC,QAAL,CAAc;AACZP,QAAAA,aAAa,EAAE,IADH,EAAd;;AAGA,UAAI,MAAKI,KAAT,EAAgB;AACd,cAAKA,KAAL,CAAWJ,aAAX,GAA2B,IAA3B;AACD;AACF,KA1EH;;;;;;AAgFSQ,IAAAA,kBAhFT,GAgF8B,YAAM;AAChC,YAAKD,QAAL,CAAc;AACZP,QAAAA,aAAa,EAAE,KADH,EAAd;;AAGA,UAAI,MAAKI,KAAT,EAAgB;AACd,cAAKA,KAAL,CAAWJ,aAAX,GAA2B,KAA3B;AACD;AACF,KAvFH;;AAyFUS,IAAAA,UAzFV,GAyFuB,UAACR,KAAD,EAAkD;;AAEnES,MAAAA,KAFmE;;;;;;;;;AAWjET,MAAAA,KAXiE,CAEnES,KAFmE,CAGnEC,OAHmE,GAWjEV,KAXiE,CAGnEU,OAHmE,CAInEC,YAJmE,GAWjEX,KAXiE,CAInEW,YAJmE,CAKnEC,YALmE,GAWjEZ,KAXiE,CAKnEY,YALmE,CAMnEC,WANmE,GAWjEb,KAXiE,CAMnEa,WANmE,CAOnEC,aAPmE,GAWjEd,KAXiE,CAOnEc,aAPmE,CAQnEC,IARmE,GAWjEf,KAXiE,CAQnEe,IARmE,CASnEd,oBATmE,GAWjED,KAXiE,CASnEC,oBATmE,CAUhEe,IAVgE,iCAWjEhB,KAXiE;AAYrE,UAAMiB,eAAe,GAAG,MAAKpB,KAAL,CAAWE,aAAnC;;AAEA,UAAMmB,SAAS,GAAGzB,EAAE;AACjBC,MAAAA,MAAM,CAACyB,IAAP,CAAY,MAAKjB,KAAjB,CADiB,IACS,IADT;AAEjBR,MAAAA,MAAM,CAAC0B,YAAP,EAFiB,IAEO7B,MAAM,IAAIF,MAFjB;AAGjBK,MAAAA,MAAM,CAAC2B,WAAP,CAAmB,MAAKnB,KAAxB,CAHiB,IAGgBF,KAAK,CAACsB,OAAN,IAAiBL,eAHjC;AAIjBvB,MAAAA,MAAM,CAAC6B,QAAP,CAAgB,MAAKrB,KAArB,CAJiB,IAIasB,OAAO,CAACxB,KAAK,CAACuB,QAAP,CAJpB,OAApB;;;AAOA,UAAME,UAAU;AACXT,MAAAA,IADW;AAEdD,QAAAA,IAAI,EAAE,UAFQ;AAGdW,QAAAA,SAAS,EAAEhC,MAAM,CAACS,KAAP,EAHG;AAIdwB,QAAAA,QAAQ,EAAE,MAAKC,YAJD;AAKdC,QAAAA,OAAO,EAAE,MAAKC,WALA;AAMdC,QAAAA,MAAM,EAAE,MAAKC,UANC;AAOdC,QAAAA,OAAO,EAAE,MAAKC,WAPA;AAQdC,QAAAA,GAAG,EAAE,MAAKC,QARI,GAAhB;;;AAWA,UAAIC,OAAO,GAAG,IAAd;AACA,UAAI,MAAKrC,KAAL,CAAWsC,QAAf,EAAyB;AACvB,YAAMC,YAAY,GAAG9C,EAAE;AACpBC,QAAAA,MAAM,CAAC2C,OAAP,CAAe,MAAKnC,KAApB,CADoB,IACS,IADT;AAEpBR,QAAAA,MAAM,CAAC8C,WAAP,EAFoB,IAEGjD,MAAM,IAAIF,MAFb;AAGpBK,QAAAA,MAAM,CAAC6B,QAAP,CAAgB,MAAKrB,KAArB,CAHoB,IAGUsB,OAAO,CAACxB,KAAK,CAACuB,QAAP,CAHjB,QAAvB;;AAKAc,QAAAA,OAAO,gBAAG,8BAAM,SAAS,EAAEE,YAAjB,IAAgC,MAAKvC,KAAL,CAAWsC,QAA3C,CAAV;AACD;;AAED,UAAMG,SAAS,GAAGhD,EAAE;AACjBC,MAAAA,MAAM,CAACgD,aAAP,EADiB,IACQ,CAAC1C,KAAK,CAACsB,OAAP,IAAkB,CAACL,eAD3B;AAEjBvB,MAAAA,MAAM,CAACiD,eAAP,EAFiB,IAEUrD,SAAS,IAAIC,MAAb,IAAuBF,MAFjC,QAApB;;;AAKA,UAAMuD,GAAG;AACP;AACE,QAAA,SAAS,EAAEnD,EAAE,CAACC,MAAM,CAACkD,GAAP,CAAW,MAAK1C,KAAhB,CAAD,EAAyBP,aAAa,CAACiD,GAAvC;AACVlD,QAAAA,MAAM,CAACmD,UAAP,CAAkB,MAAK3C,KAAvB,CADU,IACsBF,KAAK,CAACsB,OAAN,IAAiBL,eADvC;AAEVvB,QAAAA,MAAM,CAACoD,QAAP,CAAgB,MAAK5C,KAArB,CAFU,IAEoB,MAAKL,KAAL,CAAWC,YAF/B;AAGVJ,QAAAA,MAAM,CAACqD,QAAP,CAAgB,MAAK7C,KAArB,CAHU,IAGoBF,KAAK,CAACS,KAH1B;AAIVf,QAAAA,MAAM,CAACsD,UAAP,CAAkB,MAAK9C,KAAvB,CAJU,IAIsBF,KAAK,CAACU,OAJ5B;AAKVhB,QAAAA,MAAM,CAACuD,WAAP,CAAmB,MAAK/C,KAAxB,CALU,IAKuBF,KAAK,CAACuB,QAL7B,QADf;;;AASIN,MAAAA,eAAe,iBAAI,oBAAC,UAAD,IAAY,SAAS,EAAEwB,SAAvB,GAApB,iBAA6D,oBAAC,MAAD,IAAQ,SAAS,EAAEA,SAAnB,GAThE,CADF;;;;AAcA;AACE,uCAAO,SAAS,EAAEvB,SAAlB,EAA6B,YAAY,EAAEP,YAA3C,EAAyD,YAAY,EAAEC,YAAvE,EAAqF,WAAW,EAAEC,WAAlG;AACE,qCAAWY,UAAX,CADF;AAEGmB,QAAAA,GAFH;AAGGP,QAAAA,OAHH,CADF;;;AAOD,KA7JH;;AA+JUP,IAAAA,WA/JV,GA+JwB,UAACoB,CAAD,EAA8B;AAClD,UAAI,CAAC,MAAKlD,KAAL,CAAWuB,QAAhB,EAA0B;AACxB;AACA;AACA4B,QAAAA,qBAAqB,CAAC,YAAM;AAC1B,cAAIlE,WAAW,CAACmE,YAAhB,EAA8B;AAC5B,kBAAK9C,QAAL,CAAc,EAAER,YAAY,EAAE,IAAhB,EAAd;AACD;AACF,SAJoB,CAArB;;AAMA,YAAI,MAAKE,KAAL,CAAW6B,OAAf,EAAwB;AACtB,gBAAK7B,KAAL,CAAW6B,OAAX,CAAmBqB,CAAnB;AACD;AACF;AACF,KA7KH;;AA+KUlB,IAAAA,UA/KV,GA+KuB,UAACkB,CAAD,EAA2C;AAC9D,YAAKlD,KAAL,CAAW+B,MAAX,0BAAK/B,KAAL,CAAW+B,MAAX,CAAoBmB,CAApB;AACA,YAAK5C,QAAL,CAAc,EAAER,YAAY,EAAE,KAAhB,EAAd;AACD,KAlLH;;AAoLUsC,IAAAA,QApLV,GAoLqB,UAACD,GAAD,EAAkC;AACnD,YAAKhC,KAAL,GAAagC,GAAb;AACD,KAtLH;;AAwLUP,IAAAA,YAxLV,GAwLyB,UAACyB,KAAD,EAAgD;AACrE,UAAM/B,OAAO,GAAG+B,KAAK,CAACC,aAAN,CAAoBhC,OAApC;AACA,YAAKtB,KAAL,CAAWc,aAAX,0BAAKd,KAAL,CAAWc,aAAX,CAA2BQ,OAA3B;;AAEA,YAAKf,kBAAL;;AAEA,YAAKP,KAAL,CAAW2B,QAAX,0BAAK3B,KAAL,CAAW2B,QAAX,CAAsB0B,KAAtB;AACD,KA/LH;;AAiMUnB,IAAAA,WAjMV,GAiMwB,UAACgB,CAAD,EAA2C;AAC/D,YAAKlD,KAAL,CAAWiC,OAAX,0BAAKjC,KAAL,CAAWiC,OAAX,CAAqBiB,CAArB;AACA;AACA;AACA,UAAI,MAAKrD,KAAL,CAAWE,aAAX,KAA6BR,MAAM,IAAIF,MAAvC,CAAJ,EAAoD;AAClD,cAAKkB,kBAAL;AACA;AACA;AACA,YAAI,MAAKP,KAAL,CAAWc,aAAX,IAA4B,MAAKX,KAArC,EAA4C;AAC1C,cAAMmB,OAAO,GAAG,CAAC,MAAKnB,KAAL,CAAWmB,OAA5B;;AAEA,cAAI,MAAKtB,KAAL,CAAWsB,OAAX,KAAuBiC,SAA3B,EAAsC;AACpC;AACA,kBAAKpD,KAAL,CAAWmB,OAAX,GAAqBA,OAArB;AACD;;AAED,gBAAKtB,KAAL,CAAWc,aAAX,CAAyBQ,OAAzB;AACD;AACF;AACF,KApNH,sDA6BSkC,gCA7BT,GA6BE,0CAAwCC,SAAxC,EAAkE,CAChE,IAAIA,SAAS,CAACnC,OAAV,KAAsB,KAAKtB,KAAL,CAAWsB,OAArC,EAA8C,CAC5C,KAAKf,kBAAL,GACD,CACF,CAjCH,QAmCSmD,MAnCT,GAmCE,kBAAgB,mBACd,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACxD,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,oBAAO,oBAAC,aAAD,EAAmB,MAAI,CAACF,KAAxB,EAAgC,MAAI,CAACQ,UAArC,CAAP,CACD,CAJH,CADF,CAQD,CA5CH,CA8CE;AACF;AACA;AACA,KAjDA,QAkDSmD,KAlDT,GAkDE,iBAAe,iBACb1E,WAAW,CAACmE,YAAZ,GAA2B,IAA3B,CACA,oBAAKjD,KAAL,iCAAYwD,KAAZ,GACD,CArDH,CAuDE;AACF;AACA;AACA,KA1DA,QA2DSC,IA3DT,GA2DE,gBAAc,kBACZ,qBAAKzD,KAAL,kCAAYyD,IAAZ,GACD,CA7DH,CA+DE;AACF;AACA;AACA,KAlEA,mBAA8B7E,KAAK,CAAC8E,SAApC,EAAajE,Q,CACGkE,mB,GAAsB,U,CADzBlE,Q,CAGGmE,S,GAAY,EACxBzC,OAAO,EAAEtC,SAAS,CAACgF,IADK,EAExBzC,QAAQ,EAAEvC,SAAS,CAACgF,IAFI,EAGxBvD,KAAK,EAAEzB,SAAS,CAACgF,IAHO,EAIxBtD,OAAO,EAAE1B,SAAS,CAACgF,IAJK,EAKxBlD,aAAa,EAAE9B,SAAS,CAACiF,IALD,EAMxBlC,MAAM,EAAE/C,SAAS,CAACiF,IANM,EAOxBtD,YAAY,EAAE3B,SAAS,CAACiF,IAPA,EAQxBrD,YAAY,EAAE5B,SAAS,CAACiF,IARA,EASxBpD,WAAW,EAAE7B,SAAS,CAACiF,IATC,E","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { OkIcon, SquareIcon } from '../../internal/icons/16px';\nimport { isEdge, isFirefox, isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles, globalClasses } from './Checkbox.styles';\n\nexport interface CheckboxProps\n extends CommonProps,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Контент `label`\n */\n children?: React.ReactNode;\n /**\n * Цветовая схема ошибки.\n */\n error?: boolean;\n /**\n * Цветовая схема предупреждения.\n */\n warning?: boolean;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseover`.\n */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * Функция, вызываемая при изменении `value`.\n */\n onValueChange?: (value: boolean) => void;\n /**\n * HTML-событие `onblur`.\n */\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /**\n * [Неопределённое состояние](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#attr-indeterminate) чекбокса из HTML.\n */\n initialIndeterminate?: boolean;\n }\n > {}\n\nexport interface CheckboxState {\n focusedByTab: boolean;\n indeterminate: boolean;\n}\n\nexport class Checkbox extends React.Component<CheckboxProps, CheckboxState> {\n public static __KONTUR_REACT_UI__ = 'Checkbox';\n\n public static propTypes = {\n checked: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n warning: PropTypes.bool,\n onValueChange: PropTypes.func,\n onBlur: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n };\n\n public state = {\n focusedByTab: false,\n indeterminate: this.props.initialIndeterminate || false,\n };\n\n private theme!: Theme;\n private input: Nullable<HTMLInputElement>;\n\n public componentDidMount = () => {\n if (this.state.indeterminate && this.input) {\n this.input.indeterminate = true;\n }\n };\n\n public UNSAFE_componentWillReceiveProps(nextProps: CheckboxProps) {\n if (nextProps.checked !== this.props.checked) {\n this.resetIndeterminate();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return <CommonWrapper {...this.props}>{this.renderMain}</CommonWrapper>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * Программная установка фокуса чекбоксу.\n * @public\n */\n public focus() {\n keyListener.isTabPressed = true;\n this.input?.focus();\n }\n\n /**\n * Программное снятие фокуса с чекбокса.\n * @public\n */\n public blur() {\n this.input?.blur();\n }\n\n /**\n * Устанавливает чекбокс в HTML-состояние `indeterminate`.\n * @public\n */\n public setIndeterminate = () => {\n this.setState({\n indeterminate: true,\n });\n if (this.input) {\n this.input.indeterminate = true;\n }\n };\n\n /**\n * Снимает с чекбокса HTML-состояние `indeterminate`.\n * @public\n */\n public resetIndeterminate = () => {\n this.setState({\n indeterminate: false,\n });\n if (this.input) {\n this.input.indeterminate = false;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<CheckboxProps>) => {\n const {\n error,\n warning,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onValueChange,\n type,\n initialIndeterminate,\n ...rest\n } = props;\n const isIndeterminate = this.state.indeterminate;\n\n const rootClass = cx({\n [styles.root(this.theme)]: true,\n [styles.rootFallback()]: isIE11 || isEdge,\n [styles.rootChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n\n const inputProps = {\n ...rest,\n type: 'checkbox',\n className: styles.input(),\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onClick: this.handleClick,\n ref: this.inputRef,\n };\n\n let caption = null;\n if (this.props.children) {\n const captionClass = cx({\n [styles.caption(this.theme)]: true,\n [styles.captionIE11()]: isIE11 || isEdge,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n caption = <span className={captionClass}>{this.props.children}</span>;\n }\n\n const iconClass = cx({\n [styles.iconUnchecked()]: !props.checked && !isIndeterminate,\n [styles.iconFixBaseline()]: isFirefox || isIE11 || isEdge,\n });\n\n const box = (\n <span\n className={cx(styles.box(this.theme), globalClasses.box, {\n [styles.boxChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.boxFocus(this.theme)]: this.state.focusedByTab,\n [styles.boxError(this.theme)]: props.error,\n [styles.boxWarning(this.theme)]: props.warning,\n [styles.boxDisabled(this.theme)]: props.disabled,\n })}\n >\n {(isIndeterminate && <SquareIcon className={iconClass} />) || <OkIcon className={iconClass} />}\n </span>\n );\n\n return (\n <label className={rootClass} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} onMouseOver={onMouseOver}>\n <input {...inputProps} />\n {box}\n {caption}\n </label>\n );\n };\n\n private handleFocus = (e: React.FocusEvent<any>) => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(e);\n }\n }\n };\n\n private handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n this.props.onBlur?.(e);\n this.setState({ focusedByTab: false });\n };\n\n private inputRef = (ref: HTMLInputElement | null) => {\n this.input = ref;\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const checked = event.currentTarget.checked;\n this.props.onValueChange?.(checked);\n\n this.resetIndeterminate();\n\n this.props.onChange?.(event);\n };\n\n private handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n this.props.onClick?.(e);\n // support IE11's and old Edge's special behavior\n // https://github.com/jquery/jquery/issues/1698\n if (this.state.indeterminate && (isIE11 || isEdge)) {\n this.resetIndeterminate();\n // simulate correct behavior only if onValueChange is used\n // because we cant simulate real native onChange event\n if (this.props.onValueChange && this.input) {\n const checked = !this.input.checked;\n\n if (this.props.checked === undefined) {\n // in case of uncontrolled mode\n this.input.checked = checked;\n }\n\n this.props.onValueChange(checked);\n }\n }\n };\n}\n"]}
@@ -3,23 +3,41 @@ import PropTypes from 'prop-types';
3
3
  import { Override } from '../../typings/utility-types';
4
4
  import { CommonProps } from '../../internal/CommonWrapper';
5
5
  export interface CheckboxProps extends CommonProps, Override<React.InputHTMLAttributes<HTMLInputElement>, {
6
- /** Контент `label` */
6
+ /**
7
+ * Контент `label`
8
+ */
7
9
  children?: React.ReactNode;
8
- /** Состояние ошибки */
10
+ /**
11
+ * Цветовая схема ошибки.
12
+ */
9
13
  error?: boolean;
10
- /** Состояние Предупреждения */
14
+ /**
15
+ * Цветовая схема предупреждения.
16
+ */
11
17
  warning?: boolean;
12
- /** Вызывается на label */
18
+ /**
19
+ * HTML-событие `mouseenter`.
20
+ */
13
21
  onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;
14
- /** Вызывается на label */
22
+ /**
23
+ * HTML-событие `mouseleave`.
24
+ */
15
25
  onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;
16
- /** Вызывается на label */
26
+ /**
27
+ * HTML-событие `mouseover`.
28
+ */
17
29
  onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;
18
- /** Вызывается при изменении `value` */
30
+ /**
31
+ * Функция, вызываемая при изменении `value`.
32
+ */
19
33
  onValueChange?: (value: boolean) => void;
20
- /** onBlur */
34
+ /**
35
+ * HTML-событие `onblur`.
36
+ */
21
37
  onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;
22
- /** Состояние частичного выделения */
38
+ /**
39
+ * [Неопределённое состояние](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#attr-indeterminate) чекбокса из HTML.
40
+ */
23
41
  initialIndeterminate?: boolean;
24
42
  }> {
25
43
  }
@@ -27,9 +45,6 @@ export interface CheckboxState {
27
45
  focusedByTab: boolean;
28
46
  indeterminate: boolean;
29
47
  }
30
- /**
31
- * Все свойства, кроме перечисленных, `className` и `style` передаются в `input`.
32
- */
33
48
  export declare class Checkbox extends React.Component<CheckboxProps, CheckboxState> {
34
49
  static __KONTUR_REACT_UI__: string;
35
50
  static propTypes: {
@@ -53,20 +68,22 @@ export declare class Checkbox extends React.Component<CheckboxProps, CheckboxSta
53
68
  UNSAFE_componentWillReceiveProps(nextProps: CheckboxProps): void;
54
69
  render(): JSX.Element;
55
70
  /**
71
+ * Программная установка фокуса чекбоксу.
56
72
  * @public
57
73
  */
58
74
  focus(): void;
59
75
  /**
76
+ * Программное снятие фокуса с чекбокса.
60
77
  * @public
61
78
  */
62
79
  blur(): void;
63
80
  /**
64
- * Установить промежуточное значение
81
+ * Устанавливает чекбокс в HTML-состояние `indeterminate`.
65
82
  * @public
66
83
  */
67
84
  setIndeterminate: () => void;
68
85
  /**
69
- * Сбросить промежуточное значение
86
+ * Снимает с чекбокса HTML-состояние `indeterminate`.
70
87
  * @public
71
88
  */
72
89
  resetIndeterminate: () => void;
@@ -1,63 +1,104 @@
1
+ Базовый пример чекбокса.
2
+
1
3
  ```jsx harmony
2
4
  const [checked, setChecked] = React.useState(false);
3
5
 
4
6
  <Checkbox checked={checked} onValueChange={setChecked}>
5
- Checkbox
7
+ Обычный чекбокс
6
8
  </Checkbox>;
7
9
  ```
8
10
 
9
- Чекбокс может быть в состоянии "частично выбран". Как и в браузерном чекбоксе, это состояние влияет только на внешний вид и не влияет на состояние `checked`. `indeterminate` устанавливается в конструкторе через проп `initialIndeterminate` или методами инстанса `setIndeterminate()`/`resetIndeterminate()`
11
+ У чекбокса есть несколько состояний.
12
+
13
+ ```jsx harmony
14
+ import { Gapped } from '@skbkontur/react-ui';
15
+
16
+ const CheckboxWithState = ({children, ...props}) => {
17
+ const [checked, setChecked] = React.useState(false);
18
+
19
+ return (
20
+ <Checkbox checked={checked} onValueChange={setChecked} {...props}>
21
+ {children}
22
+ </Checkbox>
23
+ )
24
+ };
25
+
26
+ <Gapped vertical>
27
+ <CheckboxWithState>
28
+ Обычный чекбокс
29
+ </CheckboxWithState>
30
+ <CheckboxWithState error>
31
+ Чекбокс в состоянии ошибки
32
+ </CheckboxWithState>
33
+ <CheckboxWithState warning>
34
+ Чекбокс в состоянии предупреждения
35
+ </CheckboxWithState>
36
+ </Gapped>
37
+ ```
38
+
39
+ Пример использования методов чекбокса `focus()` и `blur()`.
10
40
 
11
41
  ```jsx harmony
12
42
  import { Button, Checkbox, Gapped } from '@skbkontur/react-ui';
13
43
 
14
- class IndeterminateExample extends React.Component {
15
- constructor(props) {
16
- super(props);
17
-
18
- this.checkboxInstance = null;
19
-
20
- this.state = {
21
- checked: false,
22
- };
23
- }
24
-
25
- render() {
26
- return (
27
- <div>
28
- <Gapped>
29
- <Checkbox
30
- initialIndeterminate
31
- checked={this.state.checked}
32
- onValueChange={checked => this.setState({ checked })}
33
- ref={element => {
34
- this.checkboxInstance = element;
35
- }}
36
- >
37
- Checkbox
38
- </Checkbox>
39
- <Button onClick={this.handleClickOnSetIndeterminate.bind(this)}>
40
- <code>setIndeterminate()</code>
41
- </Button>
42
- <Button onClick={this.handleClickOnResetIndeterminate.bind(this)}>
43
- <code>resetIndeterminate()</code>
44
- </Button>
45
- </Gapped>
46
- </div>
47
- );
48
- }
49
-
50
- handleClickOnSetIndeterminate() {
51
- if (this.checkboxInstance) {
52
- this.checkboxInstance.setIndeterminate();
53
- }
54
- }
55
- handleClickOnResetIndeterminate() {
56
- if (this.checkboxInstance) {
57
- this.checkboxInstance.resetIndeterminate();
58
- }
59
- }
60
- }
61
-
62
- <IndeterminateExample />;
44
+ const [checked, setChecked] = React.useState(false);
45
+
46
+ let checkboxInstance = React.useRef(null);
47
+
48
+ <Gapped vertical>
49
+ <Checkbox
50
+ ref={el => checkboxInstance = el}
51
+ checked={checked}
52
+ onValueChange={setChecked}
53
+ >
54
+ Пример чекбокса с программным фокусом
55
+ </Checkbox>
56
+ <Gapped gap={12}>
57
+ <Button
58
+ onClick={() => {
59
+ checkboxInstance.focus();
60
+ }}
61
+ >
62
+ Дать фокус
63
+ </Button>
64
+ <Button
65
+ onClick={() => {
66
+ checkboxInstance.blur();
67
+ }}
68
+ >
69
+ Забрать фокус
70
+ </Button>
71
+ </Gapped>
72
+ </Gapped>
73
+ ```
74
+
75
+ Чекбокс может находится в неопределённом состоянии. <br/> Это состояние полностью копирует поведение состояния [`indeterminate`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#attr-indeterminate) из HTML.
76
+
77
+ Это состояние влияет только на внешний вид и не влияет на состояние `checked`.
78
+
79
+ ```jsx harmony
80
+ import { Button, Checkbox, Gapped } from '@skbkontur/react-ui';
81
+
82
+ const [checked, setChecked] = React.useState(false);
83
+
84
+ let checkboxInstance = React.useRef(null);
85
+
86
+ <Gapped vertical>
87
+ <Checkbox
88
+ initialIndeterminate
89
+ checked={checked}
90
+ onValueChange={setChecked}
91
+ ref={el => checkboxInstance = el}
92
+ >
93
+ Неопределённый чекбокс
94
+ </Checkbox>
95
+ <Gapped>
96
+ <Button onClick={() => checkboxInstance.setIndeterminate()}>
97
+ Перевести в неопределённое состояние
98
+ </Button>
99
+ <Button onClick={() => checkboxInstance.resetIndeterminate()}>
100
+ Сбросить неопределённое состояние
101
+ </Button>
102
+ </Gapped>
103
+ </Gapped>
63
104
  ```
@@ -9,6 +9,10 @@ import { cx } from "../../../lib/theming/Emotion";
9
9
  import { styles } from "../Hint.styles";
10
10
  var HINT_BORDER_COLOR = 'transparent';
11
11
  var Positions = ['top center', 'top left', 'top right', 'bottom center', 'bottom left', 'bottom right', 'left middle', 'left top', 'left bottom', 'right middle', 'right top', 'right bottom'];
12
+ /**
13
+ * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.
14
+ */
15
+
12
16
  export var Hint = /*#__PURE__*/function (_React$Component) {
13
17
  _inheritsLoose(Hint, _React$Component);
14
18
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Hint.tsx"],"names":["React","ThemeContext","ThemeFactory","Popup","isTestEnv","CommonWrapper","cx","styles","HINT_BORDER_COLOR","Positions","Hint","state","opened","props","manual","timer","theme","getPositions","filter","x","startsWith","pos","handleMouseEnter","e","window","setTimeout","open","onMouseEnter","handleMouseLeave","clearTimeout","setState","onMouseLeave","UNSAFE_componentWillReceiveProps","nextProps","componentWillUnmount","render","create","popupPinOffset","hintPinOffset","popupMargin","hintMargin","popupBorder","hintBorder","popupBorderRadius","hintBorderRadius","renderMain","children","hintBgColor","disableAnimations","useWrapper","renderContent","text","maxWidth","className","content","contentCenter","Component","__KONTUR_REACT_UI__","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Theme } from '../../lib/theming/Theme';\nimport { Popup, PopupPosition } from '../../internal/Popup';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './Hint.styles';\n\nconst HINT_BORDER_COLOR = 'transparent';\n\nexport interface HintProps extends CommonProps {\n children?: React.ReactNode;\n manual?: boolean;\n maxWidth?: React.CSSProperties['maxWidth'];\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n opened?: boolean;\n pos:\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top left'\n | 'top center'\n | 'top right'\n | 'bottom left'\n | 'bottom center'\n | 'bottom right'\n | 'left top'\n | 'left middle'\n | 'left bottom'\n | 'right top'\n | 'right middle'\n | 'right bottom';\n text: React.ReactNode;\n disableAnimations: boolean;\n useWrapper: boolean;\n}\n\nexport interface HintState {\n opened: boolean;\n}\n\nconst Positions: PopupPosition[] = [\n 'top center',\n 'top left',\n 'top right',\n 'bottom center',\n 'bottom left',\n 'bottom right',\n 'left middle',\n 'left top',\n 'left bottom',\n 'right middle',\n 'right top',\n 'right bottom',\n];\n\nexport class Hint extends React.Component<HintProps, HintState> {\n public static __KONTUR_REACT_UI__ = 'Hint';\n\n public static defaultProps = {\n pos: 'top',\n manual: false,\n opened: false,\n maxWidth: 200,\n disableAnimations: isTestEnv,\n useWrapper: false,\n };\n\n public state: HintState = {\n opened: this.props.manual ? !!this.props.opened : false,\n };\n\n private timer: Nullable<number> = null;\n private theme!: Theme;\n\n public UNSAFE_componentWillReceiveProps(nextProps: HintProps) {\n if (!nextProps.manual) {\n return;\n }\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n if (nextProps.opened !== this.props.opened) {\n this.setState({ opened: !!nextProps.opened });\n }\n }\n\n public componentWillUnmount() {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.hintPinOffset,\n popupMargin: theme.hintMargin,\n popupBorder: theme.hintBorder,\n popupBorderRadius: theme.hintBorderRadius,\n },\n this.theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n return (\n <CommonWrapper {...this.props}>\n <Popup\n hasPin\n opened={this.state.opened}\n anchorElement={this.props.children}\n positions={this.getPositions()}\n backgroundColor={this.theme.hintBgColor}\n borderColor={HINT_BORDER_COLOR}\n disableAnimations={this.props.disableAnimations}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n useWrapper={this.props.useWrapper}\n >\n {this.renderContent()}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private renderContent() {\n if (!this.props.text) {\n return null;\n }\n\n const { pos, maxWidth } = this.props;\n const className = cx({\n [styles.content(this.theme)]: true,\n [styles.contentCenter(this.theme)]: pos === 'top' || pos === 'bottom',\n });\n return (\n <div className={className} style={{ maxWidth }}>\n {this.props.text}\n </div>\n );\n }\n\n private getPositions = (): PopupPosition[] => {\n return Positions.filter((x) => x.startsWith(this.props.pos));\n };\n\n private handleMouseEnter = (e: MouseEventType) => {\n if (!this.props.manual && !this.timer) {\n this.timer = window.setTimeout(this.open, 400);\n }\n\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: MouseEventType) => {\n if (!this.props.manual && this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n this.setState({ opened: false });\n }\n\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private open = () => {\n this.setState({ opened: true });\n };\n}\n"]}
1
+ {"version":3,"sources":["Hint.tsx"],"names":["React","ThemeContext","ThemeFactory","Popup","isTestEnv","CommonWrapper","cx","styles","HINT_BORDER_COLOR","Positions","Hint","state","opened","props","manual","timer","theme","getPositions","filter","x","startsWith","pos","handleMouseEnter","e","window","setTimeout","open","onMouseEnter","handleMouseLeave","clearTimeout","setState","onMouseLeave","UNSAFE_componentWillReceiveProps","nextProps","componentWillUnmount","render","create","popupPinOffset","hintPinOffset","popupMargin","hintMargin","popupBorder","hintBorder","popupBorderRadius","hintBorderRadius","renderMain","children","hintBgColor","disableAnimations","useWrapper","renderContent","text","maxWidth","className","content","contentCenter","Component","__KONTUR_REACT_UI__","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Theme } from '../../lib/theming/Theme';\nimport { Popup, PopupPosition } from '../../internal/Popup';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './Hint.styles';\n\nconst HINT_BORDER_COLOR = 'transparent';\n\nexport interface HintProps extends CommonProps {\n children?: React.ReactNode;\n /**\n * Переводит отображение подсказки в _\"ручной режим\"_.\n *\n * В _\"ручном режиме\"_ подcказку можно активировать только задав значение пропу `opened`.\n */\n manual?: boolean;\n /**\n * Задаёт максимальную ширину подсказки.\n */\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: (event: MouseEventType) => void;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: (event: MouseEventType) => void;\n /**\n * Если `true` - подсказка будет открыта.\n *\n * _Примечание_: работает только при `manual=true`.\n */\n opened?: boolean;\n /**\n * Расположение подсказки относительно текста.\n *\n * **Допустимые значения**: `\"top\"`, `\"right\"`, `\"bottom\"`, `\"left\"`, `\"top left\"`, `\"top center\"`, `\"top right\"`, `\"right top\"`, `\"right middle\"`, `\"right bottom\"`, `\"bottom left\"`, `\"bottom center\"`, `\"bottom right\"`, `\"left top\"`, `\"left middle\"`, `\"left bottom\"`.\n */\n pos:\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top left'\n | 'top center'\n | 'top right'\n | 'bottom left'\n | 'bottom center'\n | 'bottom right'\n | 'left top'\n | 'left middle'\n | 'left bottom'\n | 'right top'\n | 'right middle'\n | 'right bottom';\n /**\n * Текст подсказки.\n */\n text: React.ReactNode;\n /**\n * Отключает анимацию.\n */\n disableAnimations: boolean;\n useWrapper: boolean;\n}\n\nexport interface HintState {\n opened: boolean;\n}\n\nconst Positions: PopupPosition[] = [\n 'top center',\n 'top left',\n 'top right',\n 'bottom center',\n 'bottom left',\n 'bottom right',\n 'left middle',\n 'left top',\n 'left bottom',\n 'right middle',\n 'right top',\n 'right bottom',\n];\n\n/**\n * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.\n */\nexport class Hint extends React.Component<HintProps, HintState> {\n public static __KONTUR_REACT_UI__ = 'Hint';\n\n public static defaultProps = {\n pos: 'top',\n manual: false,\n opened: false,\n maxWidth: 200,\n disableAnimations: isTestEnv,\n useWrapper: false,\n };\n\n public state: HintState = {\n opened: this.props.manual ? !!this.props.opened : false,\n };\n\n private timer: Nullable<number> = null;\n private theme!: Theme;\n\n public UNSAFE_componentWillReceiveProps(nextProps: HintProps) {\n if (!nextProps.manual) {\n return;\n }\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n if (nextProps.opened !== this.props.opened) {\n this.setState({ opened: !!nextProps.opened });\n }\n }\n\n public componentWillUnmount() {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.hintPinOffset,\n popupMargin: theme.hintMargin,\n popupBorder: theme.hintBorder,\n popupBorderRadius: theme.hintBorderRadius,\n },\n this.theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n return (\n <CommonWrapper {...this.props}>\n <Popup\n hasPin\n opened={this.state.opened}\n anchorElement={this.props.children}\n positions={this.getPositions()}\n backgroundColor={this.theme.hintBgColor}\n borderColor={HINT_BORDER_COLOR}\n disableAnimations={this.props.disableAnimations}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n useWrapper={this.props.useWrapper}\n >\n {this.renderContent()}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private renderContent() {\n if (!this.props.text) {\n return null;\n }\n\n const { pos, maxWidth } = this.props;\n const className = cx({\n [styles.content(this.theme)]: true,\n [styles.contentCenter(this.theme)]: pos === 'top' || pos === 'bottom',\n });\n return (\n <div className={className} style={{ maxWidth }}>\n {this.props.text}\n </div>\n );\n }\n\n private getPositions = (): PopupPosition[] => {\n return Positions.filter((x) => x.startsWith(this.props.pos));\n };\n\n private handleMouseEnter = (e: MouseEventType) => {\n if (!this.props.manual && !this.timer) {\n this.timer = window.setTimeout(this.open, 400);\n }\n\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: MouseEventType) => {\n if (!this.props.manual && this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n this.setState({ opened: false });\n }\n\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private open = () => {\n this.setState({ opened: true });\n };\n}\n"]}
@@ -3,19 +3,52 @@ import { MouseEventType } from '../../typings/event-types';
3
3
  import { CommonProps } from '../../internal/CommonWrapper';
4
4
  export interface HintProps extends CommonProps {
5
5
  children?: React.ReactNode;
6
+ /**
7
+ * Переводит отображение подсказки в _"ручной режим"_.
8
+ *
9
+ * В _"ручном режиме"_ подcказку можно активировать только задав значение пропу `opened`.
10
+ */
6
11
  manual?: boolean;
12
+ /**
13
+ * Задаёт максимальную ширину подсказки.
14
+ */
7
15
  maxWidth?: React.CSSProperties['maxWidth'];
16
+ /**
17
+ * HTML-событие `mouseenter`.
18
+ */
8
19
  onMouseEnter?: (event: MouseEventType) => void;
20
+ /**
21
+ * HTML-событие `mouseleave`.
22
+ */
9
23
  onMouseLeave?: (event: MouseEventType) => void;
24
+ /**
25
+ * Если `true` - подсказка будет открыта.
26
+ *
27
+ * _Примечание_: работает только при `manual=true`.
28
+ */
10
29
  opened?: boolean;
30
+ /**
31
+ * Расположение подсказки относительно текста.
32
+ *
33
+ * **Допустимые значения**: `"top"`, `"right"`, `"bottom"`, `"left"`, `"top left"`, `"top center"`, `"top right"`, `"right top"`, `"right middle"`, `"right bottom"`, `"bottom left"`, `"bottom center"`, `"bottom right"`, `"left top"`, `"left middle"`, `"left bottom"`.
34
+ */
11
35
  pos: 'top' | 'right' | 'bottom' | 'left' | 'top left' | 'top center' | 'top right' | 'bottom left' | 'bottom center' | 'bottom right' | 'left top' | 'left middle' | 'left bottom' | 'right top' | 'right middle' | 'right bottom';
36
+ /**
37
+ * Текст подсказки.
38
+ */
12
39
  text: React.ReactNode;
40
+ /**
41
+ * Отключает анимацию.
42
+ */
13
43
  disableAnimations: boolean;
14
44
  useWrapper: boolean;
15
45
  }
16
46
  export interface HintState {
17
47
  opened: boolean;
18
48
  }
49
+ /**
50
+ * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.
51
+ */
19
52
  export declare class Hint extends React.Component<HintProps, HintState> {
20
53
  static __KONTUR_REACT_UI__: string;
21
54
  static defaultProps: {
@@ -1,3 +1,42 @@
1
+ Базовый пример всплывающей подсказки.
2
+
1
3
  ```jsx harmony
2
- <Hint text="World">Hello</Hint>
4
+ <Hint text="Подсказка">Базовая</Hint>
5
+ ```
6
+
7
+ Пример подсказки, всегда всплывающей слева.
8
+
9
+ ```jsx harmony
10
+ <Hint pos={"left"} text="Подсказка слева">Всегда всплывает слева</Hint>
11
+ ```
12
+
13
+ Пример всплывающей подсказки с ограниченной шириной.
14
+ ```jsx harmony
15
+ <Hint
16
+ maxWidth="150px"
17
+ text="Очень много текста, рассказывающего про этот очень непонятный элемент"
18
+ >
19
+ Очень непонятный элемент
20
+ </Hint>
21
+ ```
22
+
23
+ Пример всплывающей подсказки, открытие которой контролируется кнопкой.
24
+
25
+ ```jsx harmony
26
+ import { Button, Gapped } from '@skbkontur/react-ui';
27
+
28
+ const [isOpen, setIsOpen] = React.useState(false);
29
+
30
+ <Gapped>
31
+ <Hint opened={isOpen} manual text="Подсказка">Управляемая удалённо</Hint>
32
+ <Button onClick={() => setIsOpen(!isOpen)}>
33
+ {isOpen ? "Закрыть подсказку" : "Открыть подсказку"}
34
+ </Button>
35
+ </Gapped>
36
+ ```
37
+
38
+ Пример подсказки, всплывающей без анимации.
39
+
40
+ ```jsx harmony
41
+ <Hint disableAnimations text={"Нет анимации :("}>Есть анимация?</Hint>
3
42
  ```