@skbkontur/react-ui 4.20.0-next.1 → 4.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/cjs/components/Calendar/Calendar.js +4 -3
  3. package/cjs/components/Calendar/Calendar.js.map +1 -1
  4. package/cjs/components/CurrencyInput/CurrencyInput.js +2 -1
  5. package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
  6. package/cjs/components/GlobalLoader/GlobalLoader.js +3 -3
  7. package/cjs/components/GlobalLoader/GlobalLoader.js.map +1 -1
  8. package/cjs/components/MenuHeader/MenuHeader.js +3 -1
  9. package/cjs/components/MenuHeader/MenuHeader.js.map +1 -1
  10. package/cjs/components/MenuItem/MenuItem.d.ts +21 -0
  11. package/cjs/components/MenuItem/MenuItem.js +112 -15
  12. package/cjs/components/MenuItem/MenuItem.js.map +1 -1
  13. package/cjs/components/MenuItem/MenuItem.md +20 -6
  14. package/cjs/components/Paging/Paging.js +2 -1
  15. package/cjs/components/Paging/Paging.js.map +1 -1
  16. package/cjs/components/ScrollContainer/ScrollBar.js +2 -1
  17. package/cjs/components/ScrollContainer/ScrollBar.js.map +1 -1
  18. package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -2
  19. package/cjs/components/ScrollContainer/ScrollContainer.js +15 -8
  20. package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
  21. package/cjs/components/Select/Item.d.ts +1 -0
  22. package/cjs/components/Select/Item.js +2 -1
  23. package/cjs/components/Select/Item.js.map +1 -1
  24. package/cjs/components/Select/Select.d.ts +1 -0
  25. package/cjs/components/Select/Select.js +17 -2
  26. package/cjs/components/Select/Select.js.map +1 -1
  27. package/cjs/components/Select/Select.md +12 -0
  28. package/cjs/components/SidePage/SidePage.d.ts +3 -1
  29. package/cjs/components/SidePage/SidePage.js +30 -4
  30. package/cjs/components/SidePage/SidePage.js.map +1 -1
  31. package/cjs/components/Tabs/Indicator.js +2 -1
  32. package/cjs/components/Tabs/Indicator.js.map +1 -1
  33. package/cjs/components/Tabs/Tabs.js +2 -1
  34. package/cjs/components/Tabs/Tabs.js.map +1 -1
  35. package/cjs/components/Textarea/Textarea.d.ts +1 -0
  36. package/cjs/components/Textarea/Textarea.js +20 -3
  37. package/cjs/components/Textarea/Textarea.js.map +1 -1
  38. package/cjs/components/Textarea/TextareaWithSafari17Workaround.d.ts +6 -0
  39. package/cjs/components/Textarea/TextareaWithSafari17Workaround.js +20 -0
  40. package/cjs/components/Textarea/TextareaWithSafari17Workaround.js.map +1 -0
  41. package/cjs/components/Tooltip/Tooltip.d.ts +6 -1
  42. package/cjs/components/Tooltip/Tooltip.js +12 -2
  43. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  44. package/cjs/components/Tooltip/Tooltip.md +24 -0
  45. package/cjs/internal/DateSelect/DateSelect.js +4 -3
  46. package/cjs/internal/DateSelect/DateSelect.js.map +1 -1
  47. package/cjs/internal/DropdownContainer/DropdownContainer.js +4 -3
  48. package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
  49. package/cjs/internal/FocusTrap/FocusTrap.js +3 -2
  50. package/cjs/internal/FocusTrap/FocusTrap.js.map +1 -1
  51. package/cjs/internal/IgnoreLayerClick/IgnoreLayerClick.js +2 -1
  52. package/cjs/internal/IgnoreLayerClick/IgnoreLayerClick.js.map +1 -1
  53. package/cjs/internal/InputLikeText/InputLikeText.js +2 -1
  54. package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
  55. package/cjs/internal/InternalMenu/InternalMenu.js +4 -3
  56. package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
  57. package/cjs/internal/Menu/Menu.d.ts +6 -0
  58. package/cjs/internal/Menu/Menu.js +82 -14
  59. package/cjs/internal/Menu/Menu.js.map +1 -1
  60. package/cjs/internal/Menu/MenuContext.d.ts +10 -0
  61. package/cjs/internal/Menu/MenuContext.js +16 -0
  62. package/cjs/internal/Menu/MenuContext.js.map +1 -0
  63. package/cjs/internal/Menu/MenuNavigation.d.ts +26 -0
  64. package/cjs/internal/Menu/MenuNavigation.js +107 -0
  65. package/cjs/internal/Menu/MenuNavigation.js.map +1 -0
  66. package/cjs/internal/Menu/isActiveElement.js +1 -1
  67. package/cjs/internal/Menu/isActiveElement.js.map +1 -1
  68. package/cjs/internal/Popup/Popup.js +6 -5
  69. package/cjs/internal/Popup/Popup.js.map +1 -1
  70. package/cjs/internal/RenderLayer/RenderLayer.js +3 -2
  71. package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
  72. package/cjs/lib/client.d.ts +1 -0
  73. package/cjs/lib/client.js +4 -2
  74. package/cjs/lib/client.js.map +1 -1
  75. package/cjs/lib/dom/tabbableHelpers.js +2 -1
  76. package/cjs/lib/dom/tabbableHelpers.js.map +1 -1
  77. package/cjs/lib/events/fixClickFocusIE.js +2 -1
  78. package/cjs/lib/events/fixClickFocusIE.js.map +1 -1
  79. package/cjs/lib/events/keyboard/identifiers.js +2 -1
  80. package/cjs/lib/events/keyboard/identifiers.js.map +1 -1
  81. package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +106 -0
  82. package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +3 -0
  83. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +3 -0
  84. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +7 -1
  85. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  86. package/cjs/lib/isInstanceOf.d.ts +1 -0
  87. package/cjs/lib/isInstanceOf.js +6 -0
  88. package/cjs/lib/isInstanceOf.js.map +1 -0
  89. package/cjs/lib/listenFocusOutside.js +2 -1
  90. package/cjs/lib/listenFocusOutside.js.map +1 -1
  91. package/cjs/lib/rootNode/getRootNode.js +4 -3
  92. package/cjs/lib/rootNode/getRootNode.js.map +1 -1
  93. package/components/Calendar/Calendar/Calendar.js +2 -1
  94. package/components/Calendar/Calendar/Calendar.js.map +1 -1
  95. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +2 -1
  96. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
  97. package/components/GlobalLoader/GlobalLoader/GlobalLoader.js +5 -5
  98. package/components/GlobalLoader/GlobalLoader/GlobalLoader.js.map +1 -1
  99. package/components/MenuHeader/MenuHeader/MenuHeader.js +3 -1
  100. package/components/MenuHeader/MenuHeader/MenuHeader.js.map +1 -1
  101. package/components/MenuItem/MenuItem/MenuItem.js +126 -17
  102. package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
  103. package/components/MenuItem/MenuItem.d.ts +21 -0
  104. package/components/MenuItem/MenuItem.md +20 -6
  105. package/components/Paging/Paging/Paging.js +2 -1
  106. package/components/Paging/Paging/Paging.js.map +1 -1
  107. package/components/ScrollContainer/ScrollBar/ScrollBar.js +2 -1
  108. package/components/ScrollContainer/ScrollBar/ScrollBar.js.map +1 -1
  109. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +21 -10
  110. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
  111. package/components/ScrollContainer/ScrollContainer.d.ts +1 -2
  112. package/components/Select/Item/Item.js +3 -1
  113. package/components/Select/Item/Item.js.map +1 -1
  114. package/components/Select/Item.d.ts +1 -0
  115. package/components/Select/Select/Select.js +14 -8
  116. package/components/Select/Select/Select.js.map +1 -1
  117. package/components/Select/Select.d.ts +1 -0
  118. package/components/Select/Select.md +12 -0
  119. package/components/SidePage/SidePage/SidePage.js +31 -7
  120. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  121. package/components/SidePage/SidePage.d.ts +3 -1
  122. package/components/Tabs/Indicator/Indicator.js +2 -1
  123. package/components/Tabs/Indicator/Indicator.js.map +1 -1
  124. package/components/Tabs/Tabs/Tabs.js +2 -1
  125. package/components/Tabs/Tabs/Tabs.js.map +1 -1
  126. package/components/Textarea/Textarea/Textarea.js +13 -7
  127. package/components/Textarea/Textarea/Textarea.js.map +1 -1
  128. package/components/Textarea/Textarea.d.ts +1 -0
  129. package/components/Textarea/TextareaWithSafari17Workaround/TextareaWithSafari17Workaround.js +21 -0
  130. package/components/Textarea/TextareaWithSafari17Workaround/TextareaWithSafari17Workaround.js.map +1 -0
  131. package/components/Textarea/TextareaWithSafari17Workaround/package.json +6 -0
  132. package/components/Textarea/TextareaWithSafari17Workaround.d.ts +6 -0
  133. package/components/Tooltip/Tooltip/Tooltip.js +7 -4
  134. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  135. package/components/Tooltip/Tooltip.d.ts +6 -1
  136. package/components/Tooltip/Tooltip.md +24 -0
  137. package/internal/DateSelect/DateSelect/DateSelect.js +2 -1
  138. package/internal/DateSelect/DateSelect/DateSelect.js.map +1 -1
  139. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +2 -1
  140. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
  141. package/internal/FocusTrap/FocusTrap/FocusTrap.js +2 -1
  142. package/internal/FocusTrap/FocusTrap/FocusTrap.js.map +1 -1
  143. package/internal/IgnoreLayerClick/IgnoreLayerClick/IgnoreLayerClick.js +2 -1
  144. package/internal/IgnoreLayerClick/IgnoreLayerClick/IgnoreLayerClick.js.map +1 -1
  145. package/internal/InputLikeText/InputLikeText/InputLikeText.js +2 -1
  146. package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
  147. package/internal/InternalMenu/InternalMenu/InternalMenu.js +2 -1
  148. package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
  149. package/internal/Menu/Menu/Menu.js +138 -56
  150. package/internal/Menu/Menu/Menu.js.map +1 -1
  151. package/internal/Menu/Menu.d.ts +6 -0
  152. package/internal/Menu/MenuContext/MenuContext.js +5 -0
  153. package/internal/Menu/MenuContext/MenuContext.js.map +1 -0
  154. package/internal/Menu/MenuContext/package.json +6 -0
  155. package/internal/Menu/MenuContext.d.ts +10 -0
  156. package/internal/Menu/MenuNavigation/MenuNavigation.js +123 -0
  157. package/internal/Menu/MenuNavigation/MenuNavigation.js.map +1 -0
  158. package/internal/Menu/MenuNavigation/package.json +6 -0
  159. package/internal/Menu/MenuNavigation.d.ts +26 -0
  160. package/internal/Menu/isActiveElement/isActiveElement.js +1 -1
  161. package/internal/Menu/isActiveElement/isActiveElement.js.map +1 -1
  162. package/internal/Popup/Popup/Popup.js +2 -1
  163. package/internal/Popup/Popup/Popup.js.map +1 -1
  164. package/internal/RenderLayer/RenderLayer/RenderLayer.js +2 -1
  165. package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
  166. package/lib/client/client.js +2 -1
  167. package/lib/client/client.js.map +1 -1
  168. package/lib/client.d.ts +1 -0
  169. package/lib/dom/tabbableHelpers/tabbableHelpers.js +2 -1
  170. package/lib/dom/tabbableHelpers/tabbableHelpers.js.map +1 -1
  171. package/lib/events/fixClickFocusIE/fixClickFocusIE.js +2 -1
  172. package/lib/events/fixClickFocusIE/fixClickFocusIE.js.map +1 -1
  173. package/lib/events/keyboard/identifiers/identifiers.js +2 -1
  174. package/lib/events/keyboard/identifiers/identifiers.js.map +1 -1
  175. package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +106 -0
  176. package/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +3 -0
  177. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js +4 -1
  178. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  179. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +3 -0
  180. package/lib/isInstanceOf/isInstanceOf.js +3 -0
  181. package/lib/isInstanceOf/isInstanceOf.js.map +1 -0
  182. package/lib/isInstanceOf/package.json +6 -0
  183. package/lib/isInstanceOf.d.ts +1 -0
  184. package/lib/listenFocusOutside/listenFocusOutside.js +2 -1
  185. package/lib/listenFocusOutside/listenFocusOutside.js.map +1 -1
  186. package/lib/rootNode/getRootNode/getRootNode.js +2 -1
  187. package/lib/rootNode/getRootNode/getRootNode.js.map +1 -1
  188. package/package.json +3 -3
@@ -2,6 +2,7 @@ import React, { AriaAttributes } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { CommonProps } from '../../internal/CommonWrapper';
4
4
  import { SizeProp } from '../../lib/types/props';
5
+ import { MenuContextType } from '../../internal/Menu/MenuContext';
5
6
  /**
6
7
  * @deprecated use SizeProp
7
8
  */
@@ -77,10 +78,16 @@ export interface MenuItemProps extends Pick<AriaAttributes, 'aria-describedby' |
77
78
  * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.
78
79
  */
79
80
  component?: React.ComponentType<any>;
81
+ /**
82
+ * Запрещает выделение и выбор данного пункта меню
83
+ *
84
+ */
85
+ isNotSelectable?: boolean;
80
86
  isMobile?: boolean;
81
87
  }
82
88
  export declare const MenuItemDataTids: {
83
89
  readonly root: "MenuItem__root";
90
+ readonly content: "MenuItem__content";
84
91
  readonly comment: "MenuItem__comment";
85
92
  };
86
93
  /**
@@ -105,20 +112,34 @@ export declare class MenuItem extends React.Component<MenuItemProps> {
105
112
  };
106
113
  state: {
107
114
  iconOffsetTop: number;
115
+ highlighted: boolean;
108
116
  };
109
117
  private theme;
110
118
  private mouseEntered;
111
119
  private setRootNode;
112
120
  private rootRef;
121
+ private contentRef;
122
+ private menuItemsAtAnyLevel?;
123
+ static contextType: React.Context<MenuContextType>;
124
+ context: MenuContextType;
113
125
  render(): JSX.Element;
114
126
  componentDidMount(): void;
127
+ componentWillUnmount(): void;
128
+ componentDidUpdate(prevProps: Readonly<MenuItemProps>): void;
129
+ highlight: () => void;
130
+ unhighlight: () => void;
131
+ select: (event: React.SyntheticEvent<HTMLElement>) => void;
132
+ isEnabled: () => boolean;
133
+ navigate: () => void;
115
134
  private getRootSizeClassName;
116
135
  private getIconSizeClassName;
117
136
  private getWithIconSizeClassName;
118
137
  private renderMain;
119
138
  private handleMouseEnterFix;
120
139
  private handleMouseLeave;
140
+ private handleClick;
121
141
  private setRootRef;
122
142
  private getComponent;
143
+ private hasIconAmongItems;
123
144
  }
124
145
  export declare const isMenuItem: (child: React.ReactNode) => child is React.ReactElement<any, string | React.JSXElementConstructor<any>>;
@@ -1,4 +1,4 @@
1
- "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.isMenuItem = exports.MenuItemDataTids = exports.MenuItem = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.isMenuItem = exports.MenuItemDataTids = exports.MenuItem = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
2
2
 
3
3
  var _react = _interopRequireDefault(require("react"));
4
4
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -12,8 +12,15 @@ var _CommonWrapper = require("../../internal/CommonWrapper");
12
12
  var _Emotion = require("../../lib/theming/Emotion");
13
13
  var _rootNode = require("../../lib/rootNode");
14
14
 
15
+ var _MenuContext = require("../../internal/Menu/MenuContext");
16
+ var _featureFlagsContext = require("../../lib/featureFlagsContext");
17
+
18
+ var _MenuItem = require("./MenuItem.styles");var _excluded = ["link", "comment", "icon", "loose", "state", "size", "_enableIconPadding", "component", "onMouseEnter", "onMouseLeave", "isMobile", "href", "disabled", "rel", "isNotSelectable"];var _class, _class2, _temp;
19
+
20
+
21
+
22
+
15
23
 
16
- var _MenuItem = require("./MenuItem.styles");var _excluded = ["link", "comment", "icon", "loose", "state", "size", "_enableIconPadding", "component", "onMouseEnter", "onMouseLeave", "isMobile", "href", "disabled", "rel"];var _class, _class2, _temp;
17
24
 
18
25
 
19
26
 
@@ -100,6 +107,7 @@ var _MenuItem = require("./MenuItem.styles");var _excluded = ["link", "comment",
100
107
 
101
108
  var MenuItemDataTids = {
102
109
  root: 'MenuItem__root',
110
+ content: 'MenuItem__content',
103
111
  comment: 'MenuItem__comment' };
104
112
 
105
113
 
@@ -135,13 +143,27 @@ MenuItem = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
135
143
 
136
144
 
137
145
  state = {
138
- iconOffsetTop: 0 };_this.
146
+ iconOffsetTop: 0,
147
+ highlighted: false };_this.
139
148
 
140
149
 
141
150
 
142
151
  mouseEntered = false;_this.
143
152
 
144
153
  rootRef = null;_this.
154
+ contentRef = /*#__PURE__*/_react.default.createRef();_this.
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
145
167
 
146
168
 
147
169
 
@@ -173,6 +195,63 @@ MenuItem = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
173
195
 
174
196
 
175
197
 
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+ highlight = function () {
220
+ _this.setState({ highlighted: true });
221
+ };_this.
222
+
223
+ unhighlight = function () {
224
+ _this.setState({ highlighted: false });
225
+ };_this.
226
+
227
+ select = function (event) {
228
+ _this.handleClick(event);
229
+ };_this.
230
+
231
+ isEnabled = function () {
232
+ return !_this.props.disabled;
233
+ };_this.
234
+
235
+ navigate = function () {
236
+ if (!_this.props.href) {
237
+ return;
238
+ }
239
+ if (_this.props.target) {
240
+ window.open(_this.props.href, _this.props.target);
241
+ } else {
242
+ location.href = _this.props.href;
243
+ }
244
+ };_this.
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
176
255
 
177
256
 
178
257
 
@@ -217,9 +296,10 @@ MenuItem = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
217
296
 
218
297
 
219
298
 
220
- props.link,comment = props.comment,icon = props.icon,loose = props.loose,state = props.state,size = props.size,_enableIconPadding = props._enableIconPadding,component = props.component,onMouseEnter = props.onMouseEnter,onMouseLeave = props.onMouseLeave,isMobile = props.isMobile,href = props.href,disabled = props.disabled,_props$rel = props.rel,rel = _props$rel === void 0 ? _this.props.href && (0, _utils.isExternalLink)(_this.props.href) ? 'noopener noreferrer' : _this.props.rel : _props$rel,rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
221
299
 
222
- var hover = state === 'hover' && !disabled;
300
+ props.link,comment = props.comment,icon = props.icon,loose = props.loose,state = props.state,size = props.size,_enableIconPadding = props._enableIconPadding,component = props.component,onMouseEnter = props.onMouseEnter,onMouseLeave = props.onMouseLeave,isMobile = props.isMobile,href = props.href,disabled = props.disabled,_props$rel = props.rel,rel = _props$rel === void 0 ? _this.props.href && (0, _utils.isExternalLink)(_this.props.href) ? 'noopener noreferrer' : _this.props.rel : _props$rel,isNotSelectable = props.isNotSelectable,rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
301
+
302
+ var hover = (_this.state.highlighted || state === 'hover') && !disabled;
223
303
 
224
304
  var iconElement = null;
225
305
  if (icon) {var _cx;
@@ -242,9 +322,9 @@ MenuItem = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
242
322
  _MenuItem.styles.rootMobile(_this.theme)] = isMobile, _cx2[
243
323
  _MenuItem.styles.loose()] = !!loose, _cx2[
244
324
  _MenuItem.styles.hover(_this.theme)] = hover, _cx2[
245
- _MenuItem.styles.selected(_this.theme)] = state === 'selected', _cx2[
325
+ _MenuItem.styles.selected(_this.theme)] = state === 'selected' && !_this.state.highlighted, _cx2[
246
326
  _MenuItem.styles.link(_this.theme)] = !!link, _cx2[
247
- _this.getWithIconSizeClassName()] = Boolean(iconElement) || !!_enableIconPadding, _cx2[
327
+ _this.getWithIconSizeClassName()] = Boolean(iconElement) || !!_enableIconPadding || _this.context.enableIconPadding, _cx2[
248
328
  _MenuItem.styles.disabled(_this.theme)] = !!_this.props.disabled, _cx2));
249
329
 
250
330
 
@@ -263,9 +343,10 @@ MenuItem = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
263
343
  "data-tid": MenuItemDataTids.root },
264
344
  rest, {
265
345
  disabled: disabled,
266
- state: state,
346
+ state: _this.state.highlighted ? 'hover' : state,
267
347
  onMouseOver: _this.handleMouseEnterFix,
268
348
  onMouseLeave: _this.handleMouseLeave,
349
+ onClick: _this.handleClick,
269
350
  className: className,
270
351
  href: href,
271
352
  rel: href ? rel : undefined,
@@ -274,8 +355,10 @@ MenuItem = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
274
355
  iconElement, /*#__PURE__*/
275
356
  _react.default.createElement("span", {
276
357
  className: (0, _Emotion.cx)((_cx3 = {}, _cx3[
277
- _MenuItem.styles.mobileContentWithIcon()] = isMobile && (0, _utils.isNonNullable)(icon), _cx3)) },
358
+ _MenuItem.styles.mobileContentWithIcon()] = isMobile && (0, _utils.isNonNullable)(icon), _cx3)),
278
359
 
360
+ ref: _this.contentRef,
361
+ "data-tid": MenuItemDataTids.content },
279
362
 
280
363
  content),
281
364
 
@@ -297,16 +380,26 @@ MenuItem = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
297
380
 
298
381
 
299
382
  handleMouseEnterFix = function (e) {
300
- if (!_this.mouseEntered && _this.props.onMouseEnter) {
383
+ if (!_this.mouseEntered) {var _this$context$navigat;
301
384
  _this.mouseEntered = true;
302
- _this.props.onMouseEnter(e);
385
+ _this.props.onMouseEnter == null ? void 0 : _this.props.onMouseEnter(e);
386
+ _this.menuItemsAtAnyLevel && !_this.props.isNotSelectable && ((_this$context$navigat = _this.context.navigation) == null ? void 0 : _this$context$navigat.highlight((0, _assertThisInitialized2.default)(_this)));
303
387
  }
304
388
  };_this.
305
389
 
306
- handleMouseLeave = function (e) {
390
+ handleMouseLeave = function (e) {var _this$context$navigat2;
307
391
  _this.mouseEntered = false;
308
- if (_this.props.onMouseLeave) {
309
- _this.props.onMouseLeave(e);
392
+ _this.props.onMouseLeave == null ? void 0 : _this.props.onMouseLeave(e);
393
+ _this.menuItemsAtAnyLevel && !_this.props.isNotSelectable && ((_this$context$navigat2 = _this.context.navigation) == null ? void 0 : _this$context$navigat2.unhighlight());
394
+ };_this.
395
+
396
+ handleClick = function (e) {
397
+ if (_this.props.isNotSelectable) {
398
+ return;
399
+ }
400
+ _this.props.onClick == null ? void 0 : _this.props.onClick(e);
401
+ if (_this.menuItemsAtAnyLevel) {
402
+ _this.context.onItemClick == null ? void 0 : _this.context.onItemClick(e);
310
403
  }
311
404
  };_this.
312
405
 
@@ -330,7 +423,11 @@ MenuItem = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
330
423
  }
331
424
 
332
425
  return 'button';
333
- };return _this;}var _proto = MenuItem.prototype;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this2.setRootNode }, _this2.props), _this2.renderMain);});};_proto.componentDidMount = function componentDidMount() {if (this.rootRef && (0, _globalObject.isBrowser)(_globalObject.globalObject)) {this.setState({ iconOffsetTop: _globalObject.globalObject.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });}};_proto.getRootSizeClassName = function getRootSizeClassName() {switch (this.props.size) {case 'large':return _MenuItem.styles.rootLarge(this.theme);case 'medium':return _MenuItem.styles.rootMedium(this.theme);case 'small':default:return _MenuItem.styles.rootSmall(this.theme);}};_proto.getIconSizeClassName = function getIconSizeClassName() {switch (this.props.size) {case 'large':return _MenuItem.styles.iconLarge(this.theme);case 'medium':return _MenuItem.styles.iconMedium(this.theme);case 'small':default:return _MenuItem.styles.iconSmall(this.theme);}};_proto.getWithIconSizeClassName = function getWithIconSizeClassName() {switch (this.props.size) {case 'large':return _MenuItem.styles.withIconLarge(this.theme);case 'medium':return _MenuItem.styles.withIconMedium(this.theme);case 'small':default:return _MenuItem.styles.withIconSmall(this.theme);}};return MenuItem;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'MenuItem', _class2.__MENU_ITEM__ = true, _class2.propTypes = { comment: _propTypes.default.node, disabled: _propTypes.default.bool, href: _propTypes.default.string, icon: _propTypes.default.node, loose: _propTypes.default.bool, state: _propTypes.default.string, target: _propTypes.default.string, onClick: _propTypes.default.func, size: _propTypes.default.string }, _temp)) || _class;exports.MenuItem = MenuItem;
426
+ };_this.
427
+
428
+ hasIconAmongItems = function () {var _this$context$navigat3;
429
+ return Boolean((_this$context$navigat3 = _this.context.navigation) == null ? void 0 : _this$context$navigat3.items.some(function (item) {return item.props.icon;}));
430
+ };return _this;}var _proto = MenuItem.prototype;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_featureFlagsContext.ReactUIFeatureFlagsContext.Consumer, null, function (flags) {_this2.menuItemsAtAnyLevel = (0, _featureFlagsContext.getFullReactUIFlagsContext)(flags).menuItemsAtAnyLevel;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this2.setRootNode }, _this2.props), _this2.renderMain);});});};_proto.componentDidMount = function componentDidMount() {if (this.rootRef && (0, _globalObject.isBrowser)(_globalObject.globalObject)) {this.setState({ iconOffsetTop: _globalObject.globalObject.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });}if (this.contentRef.current && this.menuItemsAtAnyLevel && !this.props.isNotSelectable) {var _this$context$navigat4;(_this$context$navigat4 = this.context.navigation) == null ? void 0 : _this$context$navigat4.add(this.contentRef.current, this);}if (this.props.icon && this.menuItemsAtAnyLevel) {var _this$context$setEnab, _this$context;(_this$context$setEnab = (_this$context = this.context).setEnableIconPadding) == null ? void 0 : _this$context$setEnab.call(_this$context, true);}};_proto.componentWillUnmount = function componentWillUnmount() {if (this.contentRef.current && this.menuItemsAtAnyLevel) {var _this$context$navigat5, _this$context$setEnab2, _this$context2;!this.props.isNotSelectable && ((_this$context$navigat5 = this.context.navigation) == null ? void 0 : _this$context$navigat5.remove(this.contentRef.current));(_this$context$setEnab2 = (_this$context2 = this.context).setEnableIconPadding) == null ? void 0 : _this$context$setEnab2.call(_this$context2, this.hasIconAmongItems());}};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {if (prevProps.icon !== this.props.icon) {var _this$context$setEnab3, _this$context3;(_this$context$setEnab3 = (_this$context3 = this.context).setEnableIconPadding) == null ? void 0 : _this$context$setEnab3.call(_this$context3, !!this.props.icon || this.hasIconAmongItems());}if (this.contentRef.current && this.menuItemsAtAnyLevel && prevProps.isNotSelectable !== this.props.isNotSelectable) {if (this.props.isNotSelectable) {var _this$context$navigat6;this.unhighlight();(_this$context$navigat6 = this.context.navigation) == null ? void 0 : _this$context$navigat6.remove(this.contentRef.current);} else {var _this$context$navigat7;(_this$context$navigat7 = this.context.navigation) == null ? void 0 : _this$context$navigat7.add(this.contentRef.current, this);}}};_proto.getRootSizeClassName = function getRootSizeClassName() {switch (this.props.size) {case 'large':return _MenuItem.styles.rootLarge(this.theme);case 'medium':return _MenuItem.styles.rootMedium(this.theme);case 'small':default:return _MenuItem.styles.rootSmall(this.theme);}};_proto.getIconSizeClassName = function getIconSizeClassName() {switch (this.props.size) {case 'large':return _MenuItem.styles.iconLarge(this.theme);case 'medium':return _MenuItem.styles.iconMedium(this.theme);case 'small':default:return _MenuItem.styles.iconSmall(this.theme);}};_proto.getWithIconSizeClassName = function getWithIconSizeClassName() {switch (this.props.size) {case 'large':return _MenuItem.styles.withIconLarge(this.theme);case 'medium':return _MenuItem.styles.withIconMedium(this.theme);case 'small':default:return _MenuItem.styles.withIconSmall(this.theme);}};return MenuItem;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'MenuItem', _class2.__MENU_ITEM__ = true, _class2.propTypes = { comment: _propTypes.default.node, disabled: _propTypes.default.bool, href: _propTypes.default.string, icon: _propTypes.default.node, loose: _propTypes.default.bool, state: _propTypes.default.string, target: _propTypes.default.string, onClick: _propTypes.default.func, size: _propTypes.default.string }, _class2.contextType = _MenuContext.MenuContext, _temp)) || _class;exports.MenuItem = MenuItem;
334
431
 
335
432
 
336
433
  var isMenuItem = (0, _utils.isReactUIComponent)('MenuItem');exports.isMenuItem = isMenuItem;
@@ -1 +1 @@
1
- {"version":3,"sources":["MenuItem.tsx"],"names":["MenuItemDataTids","root","comment","MenuItem","rootNode","state","iconOffsetTop","mouseEntered","rootRef","renderMain","props","link","icon","loose","size","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","href","disabled","rel","rest","hover","iconElement","top","styles","theme","getIconSizeClassName","className","getRootSizeClassName","rootMobile","selected","getWithIconSizeClassName","Boolean","children","content","Component","getComponent","setRootRef","handleMouseEnterFix","handleMouseLeave","undefined","mobileContentWithIcon","commentHover","e","element","render","setRootNode","componentDidMount","globalObject","setState","getComputedStyle","getPropertyValue","rootLarge","rootMedium","rootSmall","iconLarge","iconMedium","iconSmall","withIconLarge","withIconMedium","withIconSmall","React","__KONTUR_REACT_UI__","__MENU_ITEM__","propTypes","PropTypes","node","bool","string","target","onClick","func","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isExternalLink, isFunction, isNonNullable, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { styles } from './MenuItem.styles';\n\n/**\n * @deprecated use SizeProp\n */\nexport type MenuItemSize = SizeProp;\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Omit<CommonProps, 'children'> {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * Размер\n */\n size?: SizeProp;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n\n size: PropTypes.string,\n };\n\n public state = {\n iconOffsetTop: 0,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n private rootRef: Nullable<HTMLElement> = null;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public componentDidMount() {\n if (this.rootRef && isBrowser(globalObject)) {\n this.setState({ iconOffsetTop: globalObject.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });\n }\n }\n\n private getRootSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getIconSizeClassName() {\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 getWithIconSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.withIconLarge(this.theme);\n case 'medium':\n return styles.withIconMedium(this.theme);\n case 'small':\n default:\n return styles.withIconSmall(this.theme);\n }\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n size,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n disabled,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n ...rest\n } = props;\n\n const hover = state === 'hover' && !disabled;\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <div\n style={{ top: this.state.iconOffsetTop }}\n className={cx({\n [styles.icon(this.theme)]: true,\n [this.getIconSizeClassName()]: true,\n })}\n >\n {icon}\n </div>\n );\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [this.getRootSizeClassName()]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: hover,\n [styles.selected(this.theme)]: state === 'selected',\n [styles.link(this.theme)]: !!link,\n [this.getWithIconSizeClassName()]: Boolean(iconElement) || !!_enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n ref={this.setRootRef}\n data-tid={MenuItemDataTids.root}\n {...rest}\n disabled={disabled}\n state={state}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n <span\n className={cx({\n [styles.mobileContentWithIcon()]: isMobile && isNonNullable(icon),\n })}\n >\n {content}\n </span>\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: hover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered && this.props.onMouseEnter) {\n this.mouseEntered = true;\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private setRootRef = (element: HTMLElement) => {\n this.rootRef = element;\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (component) {\n return component;\n }\n\n if (disabled) {\n return 'button';\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
1
+ {"version":3,"sources":["MenuItem.tsx"],"names":["MenuItemDataTids","root","content","comment","MenuItem","rootNode","state","iconOffsetTop","highlighted","mouseEntered","rootRef","contentRef","React","createRef","highlight","setState","unhighlight","select","event","handleClick","isEnabled","props","disabled","navigate","href","target","window","open","location","renderMain","link","icon","loose","size","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","rel","isNotSelectable","rest","hover","iconElement","top","styles","theme","getIconSizeClassName","className","getRootSizeClassName","rootMobile","selected","getWithIconSizeClassName","Boolean","context","enableIconPadding","children","Component","getComponent","setRootRef","handleMouseEnterFix","handleMouseLeave","undefined","mobileContentWithIcon","commentHover","e","menuItemsAtAnyLevel","navigation","onClick","onItemClick","element","hasIconAmongItems","items","some","item","render","flags","setRootNode","componentDidMount","globalObject","getComputedStyle","getPropertyValue","current","add","setEnableIconPadding","componentWillUnmount","remove","componentDidUpdate","prevProps","rootLarge","rootMedium","rootSmall","iconLarge","iconMedium","iconSmall","withIconLarge","withIconMedium","withIconSmall","__KONTUR_REACT_UI__","__MENU_ITEM__","propTypes","PropTypes","node","bool","string","func","contextType","MenuContext","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isExternalLink, isFunction, isNonNullable, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { SizeProp } from '../../lib/types/props';\nimport { MenuContext, MenuContextType } from '../../internal/Menu/MenuContext';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\n\nimport { styles } from './MenuItem.styles';\n\n/**\n * @deprecated use SizeProp\n */\nexport type MenuItemSize = SizeProp;\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Omit<CommonProps, 'children'> {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * Размер\n */\n size?: SizeProp;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n /**\n * Запрещает выделение и выбор данного пункта меню\n *\n */\n isNotSelectable?: boolean;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n content: 'MenuItem__content',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n\n size: PropTypes.string,\n };\n\n public state = {\n iconOffsetTop: 0,\n highlighted: false,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n private rootRef: Nullable<HTMLElement> = null;\n private contentRef = React.createRef<HTMLElement>();\n private menuItemsAtAnyLevel?: boolean;\n static contextType = MenuContext;\n\n public context!: MenuContextType;\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.menuItemsAtAnyLevel = getFullReactUIFlagsContext(flags).menuItemsAtAnyLevel;\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public componentDidMount() {\n if (this.rootRef && isBrowser(globalObject)) {\n this.setState({ iconOffsetTop: globalObject.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });\n }\n if (this.contentRef.current && this.menuItemsAtAnyLevel && !this.props.isNotSelectable) {\n this.context.navigation?.add(this.contentRef.current, this);\n }\n if (this.props.icon && this.menuItemsAtAnyLevel) {\n this.context.setEnableIconPadding?.(true);\n }\n }\n\n public componentWillUnmount() {\n if (this.contentRef.current && this.menuItemsAtAnyLevel) {\n !this.props.isNotSelectable && this.context.navigation?.remove(this.contentRef.current);\n this.context.setEnableIconPadding?.(this.hasIconAmongItems());\n }\n }\n\n public componentDidUpdate(prevProps: Readonly<MenuItemProps>) {\n if (prevProps.icon !== this.props.icon) {\n this.context.setEnableIconPadding?.(!!this.props.icon || this.hasIconAmongItems());\n }\n if (\n this.contentRef.current &&\n this.menuItemsAtAnyLevel &&\n prevProps.isNotSelectable !== this.props.isNotSelectable\n ) {\n if (this.props.isNotSelectable) {\n this.unhighlight();\n this.context.navigation?.remove(this.contentRef.current);\n } else {\n this.context.navigation?.add(this.contentRef.current, this);\n }\n }\n }\n\n public highlight = () => {\n this.setState({ highlighted: true });\n };\n\n public unhighlight = () => {\n this.setState({ highlighted: false });\n };\n\n public select = (event: React.SyntheticEvent<HTMLElement>) => {\n this.handleClick(event as React.MouseEvent<HTMLElement>);\n };\n\n public isEnabled = () => {\n return !this.props.disabled;\n };\n\n public navigate = () => {\n if (!this.props.href) {\n return;\n }\n if (this.props.target) {\n window.open(this.props.href, this.props.target);\n } else {\n location.href = this.props.href;\n }\n };\n\n private getRootSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getIconSizeClassName() {\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 getWithIconSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.withIconLarge(this.theme);\n case 'medium':\n return styles.withIconMedium(this.theme);\n case 'small':\n default:\n return styles.withIconSmall(this.theme);\n }\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n size,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n disabled,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n isNotSelectable,\n ...rest\n } = props;\n\n const hover = (this.state.highlighted || state === 'hover') && !disabled;\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <div\n style={{ top: this.state.iconOffsetTop }}\n className={cx({\n [styles.icon(this.theme)]: true,\n [this.getIconSizeClassName()]: true,\n })}\n >\n {icon}\n </div>\n );\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [this.getRootSizeClassName()]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: hover,\n [styles.selected(this.theme)]: state === 'selected' && !this.state.highlighted,\n [styles.link(this.theme)]: !!link,\n [this.getWithIconSizeClassName()]: Boolean(iconElement) || !!_enableIconPadding || this.context.enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n ref={this.setRootRef}\n data-tid={MenuItemDataTids.root}\n {...rest}\n disabled={disabled}\n state={this.state.highlighted ? 'hover' : state}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n onClick={this.handleClick}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n <span\n className={cx({\n [styles.mobileContentWithIcon()]: isMobile && isNonNullable(icon),\n })}\n ref={this.contentRef}\n data-tid={MenuItemDataTids.content}\n >\n {content}\n </span>\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: hover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered) {\n this.mouseEntered = true;\n this.props.onMouseEnter?.(e);\n this.menuItemsAtAnyLevel && !this.props.isNotSelectable && this.context.navigation?.highlight(this);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n this.props.onMouseLeave?.(e);\n this.menuItemsAtAnyLevel && !this.props.isNotSelectable && this.context.navigation?.unhighlight();\n };\n\n private handleClick = (e: React.MouseEvent<HTMLElement>) => {\n if (this.props.isNotSelectable) {\n return;\n }\n this.props.onClick?.(e);\n if (this.menuItemsAtAnyLevel) {\n this.context.onItemClick?.(e);\n }\n };\n\n private setRootRef = (element: HTMLElement) => {\n this.rootRef = element;\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (component) {\n return component;\n }\n\n if (disabled) {\n return 'button';\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n\n private hasIconAmongItems = () => {\n return Boolean(this.context.navigation?.items.some((item) => item.props.icon));\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
@@ -12,9 +12,23 @@ import { Button, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
12
12
  </DropdownMenu>
13
13
  ```
14
14
 
15
- Меню с отключёнными и базовыми элементами меню.
16
- <br/>
17
- К отключённым элементам меню не применяются стили при наведении и их нельзя затаргетить с клавиатуры.
15
+ Меню с заблокированными и базовыми элементами меню.
16
+
17
+ ```jsx harmony
18
+ import { Button, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
19
+
20
+ <DropdownMenu
21
+ caption={<Button use="primary">Открыть меню с базовыми и заблокированными элементами</Button>}
22
+ >
23
+ <MenuItem>Это базовый элемент меню</MenuItem>
24
+ <MenuItem disabled>А это заблокированный</MenuItem>
25
+ <MenuItem>А это снова базовый</MenuItem>
26
+ <MenuItem disabled>И снова заблокированный</MenuItem>
27
+ <MenuItem disabled>И вот ещё один заблокированный</MenuItem>
28
+ </DropdownMenu>
29
+ ```
30
+
31
+ В пункты меню можно передать проп `isNotSelectable`, чтобы запретить выделение и выбор этого пункта меню
18
32
 
19
33
  ```jsx harmony
20
34
  import { Button, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
@@ -23,10 +37,10 @@ import { Button, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
23
37
  caption={<Button use="primary">Открыть меню с базовыми и отключёнными элементами</Button>}
24
38
  >
25
39
  <MenuItem>Это базовый элемент меню</MenuItem>
26
- <MenuItem disabled>А это отключённый</MenuItem>
40
+ <MenuItem isNotSelectable>А это отключённый</MenuItem>
27
41
  <MenuItem>А это снова базовый</MenuItem>
28
- <MenuItem disabled>И снова отключённый</MenuItem>
29
- <MenuItem disabled>И вот ещё один отключённый</MenuItem>
42
+ <MenuItem isNotSelectable>И снова отключённый</MenuItem>
43
+ <MenuItem isNotSelectable>И вот ещё один отключённый</MenuItem>
30
44
  </DropdownMenu>
31
45
  ```
32
46
 
@@ -2,6 +2,7 @@
2
2
  var _propTypes = require("prop-types");
3
3
  var _globalObject = require("@skbkontur/global-object");
4
4
 
5
+ var _isInstanceOf = require("../../lib/isInstanceOf");
5
6
  var _identifiers = require("../../lib/events/keyboard/identifiers");
6
7
  var _decorators = require("../../lib/locale/decorators");
7
8
 
@@ -333,7 +334,7 @@ Paging = (_dec = (0, _decorators.locale)('Paging', _locale.PagingLocaleHelper),
333
334
  var isArrowRight = (0, _identifiers.isKeyArrowRight)(e);
334
335
 
335
336
  if (
336
- (0, _globalObject.isInstanceOf)(target, _globalObject.globalObject.Element) && (
337
+ (0, _isInstanceOf.isInstanceOf)(target, _globalObject.globalObject.Element) && (
337
338
  IGNORE_EVENT_TAGS.includes(target.tagName.toLowerCase()) || target.isContentEditable))
338
339
  {
339
340
  return;
@@ -1 +1 @@
1
- {"version":3,"sources":["Paging.tsx"],"names":["IGNORE_EVENT_TAGS","PagingDataTids","root","dots","forwardLink","pageLinkWrapper","pageLink","Paging","PagingLocaleHelper","rootNode","getProps","defaultProps","state","focusedByTab","focusedItem","keyboardControl","useGlobalListener","addedGlobalListener","container","renderItem","item","index","focused","getFocusedItem","key","renderDots","disabled","isItemDisabled","renderForwardLink","active","props","activePage","renderPageLink","styles","theme","dotsDisabled","classes","pageLinkFocused","pageLinkDisabled","forwardLinkFocused","forwardLinkDisabled","Component","component","forward","locale","forwardIcon","parseInt","pagingForwardIconSize","marginLeft","emptyHandler","goForward","caption","pageNumber","pageLinkCurrent","pageLinkCurrentDisabled","handleClick","goToPage","handleMouseDownPageLink","renderNavigationHint","withoutNavigationHint","canGoBackward","canGoForward","hint","transparent","NavigationHelper","getKeyName","pageLinkHint","handleMouseDown","setState","isIE11","globalObject","setTimeout","focus","handleKeyDown","e","shiftKey","target","isArrowLeft","isArrowRight","Element","includes","tagName","toLowerCase","isContentEditable","checkKeyPressed","goBackward","moveFocusLeft","moveFocusRight","executeItemAction","handleFocus","requestAnimationFrame","keyListener","isTabPressed","handleBlur","getItems","pagesCount","concat","isItemFocusable","moveFocus","step","items","findIndex","x","length","onPageChange","addGlobalListener","document","addEventListener","removeGlobalListener","removeEventListener","refContainer","element","isForward","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","shouldBeVisibleWithLessThanTwoPages","renderMain","dataTid","setRootNode","paging","pagingDisabled","undefined","map","React","PureComponent","__KONTUR_REACT_UI__","PagingDefaultComponent","propTypes","number","isRequired","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { func, number } from 'prop-types';\nimport { globalObject, isInstanceOf } from '@skbkontur/global-object';\n\nimport { isKeyArrowLeft, isKeyArrowRight, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { Nullable } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { emptyHandler } from '../../lib/utils';\nimport { isIE11 } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ArrowChevronRightIcon } from '../../internal/icons/16px';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\n\nimport { styles } from './Paging.styles';\nimport * as NavigationHelper from './NavigationHelper';\nimport { getItems } from './PagingHelper';\nimport { PagingLocale, PagingLocaleHelper } from './locale';\nimport { PagingDefaultComponent } from './PagingDefaultComponent';\nimport { ForwardIcon } from './ForwardIcon';\n\nconst IGNORE_EVENT_TAGS = ['input', 'textarea'];\n\nexport interface ItemComponentProps {\n active: boolean;\n children?: React.ReactNode;\n className: string;\n onClick: () => void;\n pageNumber: number | 'forward';\n tabIndex: number;\n}\n\nexport interface PagingProps extends CommonProps {\n activePage: number;\n /**\n * Компонент обертки по умолчанию\n * @default <span />\n */\n component?: React.ComponentType<ItemComponentProps>;\n onPageChange: (pageNumber: number) => void;\n pagesCount: number;\n disabled?: boolean;\n /**\n * Отключает навигационные подсказки.\n * По-умолчанию подсказки появляются, когда доступно управление с клавиатуры\n * (либо элемент в фокусе, либо globalListeners === true)\n */\n withoutNavigationHint?: boolean;\n caption?: string;\n /**\n * Глобальный слушатель **keyDown**, для навигации клавишами без фокуса на компоненте.\n * Если на странице используется несколько элементов\n * **Paging** с useGlobalListener === true, то обработчик keyDown будет вызываться\n * на каждом из них. Такие случаи лучше обрабатывать отдельно.\n */\n useGlobalListener?: boolean;\n /**\n * Определяет, нужно ли показывать `Paging` когда страница всего одна.\n *\n * Этот проп будет удалён в 5-ой версии библиотеки,\n * так как поведение со скрытием `Paging`'а станет поведением по умолчанию.\n *\n * @default false\n */\n shouldBeVisibleWithLessThanTwoPages?: boolean;\n}\n\nexport interface PagingState {\n focusedByTab: boolean;\n focusedItem: Nullable<ItemType>;\n keyboardControl: boolean;\n}\n\nexport type ItemType = number | '.' | 'forward';\n\nexport const PagingDataTids = {\n root: 'Paging__root',\n dots: 'Paging__dots',\n forwardLink: 'Paging__forwardLink',\n pageLinkWrapper: 'Paging__pageLinkWrapper',\n pageLink: 'Paging__pageLink',\n} as const;\n\ntype DefaultProps = Required<\n Pick<PagingProps, 'component' | 'shouldBeVisibleWithLessThanTwoPages' | 'useGlobalListener' | 'data-tid'>\n>;\n\n@rootNode\n@locale('Paging', PagingLocaleHelper)\nexport class Paging extends React.PureComponent<PagingProps, PagingState> {\n public static __KONTUR_REACT_UI__ = 'Paging';\n\n public static defaultProps: DefaultProps = {\n component: PagingDefaultComponent,\n shouldBeVisibleWithLessThanTwoPages: true,\n useGlobalListener: false,\n 'data-tid': PagingDataTids.root,\n };\n\n private getProps = createPropsGetter(Paging.defaultProps);\n\n public static propTypes = {};\n private setRootNode!: TSetRootNode;\n\n public static isForward(pageNumber: number | 'forward'): boolean /* %checks */ {\n return pageNumber === 'forward';\n }\n\n public state: PagingState = {\n focusedByTab: false,\n focusedItem: null,\n keyboardControl: this.getProps().useGlobalListener,\n };\n\n private theme!: Theme;\n private readonly locale!: PagingLocale;\n private addedGlobalListener = false;\n private container: HTMLSpanElement | null = null;\n\n public componentDidMount() {\n const useGlobalListener = this.getProps().useGlobalListener;\n if (useGlobalListener) {\n this.addGlobalListener();\n }\n }\n\n public componentDidUpdate(prevProps: PagingProps) {\n const useGlobalListener = this.getProps().useGlobalListener;\n if (!prevProps.useGlobalListener && useGlobalListener) {\n this.addGlobalListener();\n }\n\n if (prevProps.useGlobalListener && !useGlobalListener) {\n this.removeGlobalListener();\n }\n\n if (prevProps.useGlobalListener !== useGlobalListener) {\n this.setState({\n keyboardControl: useGlobalListener,\n });\n }\n }\n\n public componentWillUnmount() {\n this.removeGlobalListener();\n }\n\n public render() {\n if (this.props.pagesCount < 2 && !this.getProps().shouldBeVisibleWithLessThanTwoPages) {\n return null;\n }\n\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 { 'data-tid': dataTid, useGlobalListener } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <span\n tabIndex={this.props.disabled ? -1 : 0}\n data-tid={dataTid}\n className={cx({ [styles.paging(this.theme)]: true, [styles.pagingDisabled()]: this.props.disabled })}\n onKeyDown={useGlobalListener ? undefined : this.handleKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onMouseDown={this.handleMouseDown}\n ref={this.refContainer}\n >\n {this.getItems().map(this.renderItem)}\n </span>\n </CommonWrapper>\n );\n }\n\n private renderItem = (item: ItemType, index: number) => {\n const focused = this.getFocusedItem() === item;\n switch (item) {\n case '.': {\n const key = `dots${index < 5 ? 'Left' : 'Right'}`;\n return this.renderDots(key);\n }\n case 'forward': {\n const disabled = this.isItemDisabled(item);\n return this.renderForwardLink(disabled, focused);\n }\n default: {\n const active = this.props.activePage === item;\n return this.renderPageLink(item, active, focused);\n }\n }\n };\n\n private renderDots = (key: string) => {\n return (\n <span\n data-tid={PagingDataTids.dots}\n key={key}\n className={cx({ [styles.dots(this.theme)]: true, [styles.dotsDisabled(this.theme)]: this.props.disabled })}\n >\n {'...'}\n </span>\n );\n };\n\n private renderForwardLink = (disabled: boolean, focused: boolean): JSX.Element => {\n const classes = isTheme2022(this.theme)\n ? cx(\n styles.pageLink(this.theme),\n styles.forwardLink(this.theme),\n focused && styles.pageLinkFocused(this.theme),\n (disabled || this.props.disabled) && styles.pageLinkDisabled(this.theme),\n )\n : cx({\n [styles.forwardLink(this.theme)]: true,\n [styles.forwardLinkFocused()]: focused,\n [styles.forwardLinkDisabled(this.theme)]: disabled || this.props.disabled,\n });\n const Component = this.getProps().component;\n const { forward } = this.locale;\n\n const forwardIcon = isTheme2022(this.theme) ? (\n <ForwardIcon size={parseInt(this.theme.pagingForwardIconSize)} style={{ marginLeft: 4 }} />\n ) : (\n <span className={styles.forwardIcon(this.theme)}>\n <ArrowChevronRightIcon size={this.theme.pagingForwardIconSize} />\n </span>\n );\n\n return (\n <Component\n key={'forward'}\n data-tid={PagingDataTids.forwardLink}\n active={false}\n className={classes}\n onClick={disabled ? emptyHandler : this.goForward}\n tabIndex={-1}\n pageNumber={'forward' as const}\n >\n {this.props.caption || forward}\n {forwardIcon}\n </Component>\n );\n };\n\n private renderPageLink = (pageNumber: number, active: boolean, focused: boolean): JSX.Element => {\n const classes = cx({\n [styles.pageLink(this.theme)]: true,\n [styles.pageLinkFocused(this.theme)]: focused,\n [styles.pageLinkDisabled(this.theme)]: this.props.disabled,\n [styles.pageLinkCurrent(this.theme)]: active,\n [styles.pageLinkCurrentDisabled(this.theme)]: active && this.props.disabled,\n });\n const Component = this.getProps().component;\n const handleClick = () => this.goToPage(pageNumber);\n\n return (\n <span\n data-tid={PagingDataTids.pageLinkWrapper}\n key={pageNumber}\n className={styles.pageLinkWrapper()}\n onMouseDown={this.handleMouseDownPageLink}\n >\n <Component\n data-tid={PagingDataTids.pageLink}\n active={active}\n className={classes}\n onClick={handleClick}\n tabIndex={-1}\n pageNumber={pageNumber}\n >\n {pageNumber}\n </Component>\n {active && this.renderNavigationHint()}\n </span>\n );\n };\n\n private renderNavigationHint = () => {\n if (this.props.withoutNavigationHint) {\n return null;\n }\n\n const { keyboardControl } = this.state;\n const canGoBackward = this.canGoBackward();\n const canGoForward = this.canGoForward();\n\n let hint = null;\n if (keyboardControl && (canGoBackward || canGoForward)) {\n hint = (\n <>\n <span className={canGoBackward ? '' : styles.transparent()}>{'←'}</span>\n <span>{NavigationHelper.getKeyName()}</span>\n <span className={canGoForward ? '' : styles.transparent()}>{'→'}</span>\n </>\n );\n }\n return <div className={styles.pageLinkHint(this.theme)}>{hint}</div>;\n };\n\n private handleMouseDown = () => {\n this.setState({ focusedByTab: false, focusedItem: null });\n };\n\n private handleMouseDownPageLink = () => {\n if (isIE11) {\n // Клик по span внутри контейнера с tabindex=\"0\" переносит фокус именно на этот span.\n // Поэтому горячие клавиши работают пока span существует на странице.\n globalObject.setTimeout(() => this.container && this.container.focus(), 0);\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent | React.KeyboardEvent<HTMLElement>) => {\n if (e.shiftKey) {\n return;\n }\n\n const target = e.target;\n\n const isArrowLeft = isKeyArrowLeft(e);\n const isArrowRight = isKeyArrowRight(e);\n\n if (\n isInstanceOf(target, globalObject.Element) &&\n (IGNORE_EVENT_TAGS.includes(target.tagName.toLowerCase()) || (target as HTMLElement).isContentEditable)\n ) {\n return;\n }\n\n if (NavigationHelper.checkKeyPressed(e) && isArrowLeft) {\n this.setState({ focusedItem: null }, this.goBackward);\n return;\n }\n if (NavigationHelper.checkKeyPressed(e) && isArrowRight) {\n this.setState({ focusedItem: null }, this.goForward);\n return;\n }\n\n if (this.container && this.container === e.target) {\n if (isArrowLeft) {\n this.setState({ focusedByTab: true }, this.moveFocusLeft);\n return;\n }\n if (isArrowRight) {\n this.setState({ focusedByTab: true }, this.moveFocusRight);\n return;\n }\n if (isKeyEnter(e)) {\n this.executeItemAction(this.getFocusedItem());\n return;\n }\n }\n };\n\n private handleFocus = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.setState({ keyboardControl: true });\n\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n keyboardControl: this.getProps().useGlobalListener || false,\n });\n };\n\n private getItems = (): ItemType[] => {\n return getItems(this.props.activePage, this.props.pagesCount).concat('forward');\n };\n\n private getFocusedItem = (): Nullable<ItemType> => {\n if (!this.state.focusedByTab) {\n return null;\n }\n\n const { focusedItem } = this.state;\n if (focusedItem && this.getItems().includes(focusedItem) && this.isItemFocusable(focusedItem)) {\n return focusedItem;\n }\n\n return this.props.activePage;\n };\n\n private isItemFocusable = (item: ItemType) => {\n return !this.isItemDisabled(item);\n };\n\n private isItemDisabled = (item: ItemType) => {\n switch (item) {\n case '.':\n return true;\n case 'forward':\n return !this.canGoForward();\n default:\n return false;\n }\n };\n\n private executeItemAction = (item: Nullable<ItemType>) => {\n if (item === 'forward') {\n this.goForward();\n }\n if (typeof item === 'number') {\n this.goToPage(item);\n }\n };\n\n private moveFocusLeft = () => {\n this.moveFocus(-1);\n };\n\n private moveFocusRight = () => {\n this.moveFocus(1);\n };\n\n private moveFocus = (step: number) => {\n const focusedItem = this.getFocusedItem();\n const items = this.getItems();\n let index = items.findIndex((x) => x === focusedItem);\n do {\n index = (index + step + items.length) % items.length;\n } while (!this.isItemFocusable(items[index]));\n this.setState({ focusedItem: items[index] });\n };\n\n private canGoBackward = (): boolean => {\n return this.props.activePage > 1;\n };\n\n private canGoForward = (): boolean => {\n return this.props.activePage < this.props.pagesCount;\n };\n\n private goBackward = () => {\n this.goToPage(this.props.activePage - 1);\n };\n\n private goForward = () => {\n this.goToPage(this.props.activePage + 1);\n };\n\n private goToPage = (pageNumber: number) => {\n if (pageNumber >= 1 && pageNumber !== this.props.activePage && pageNumber <= this.props.pagesCount) {\n this.props.onPageChange(pageNumber);\n }\n };\n\n private addGlobalListener = () => {\n if (this.addedGlobalListener) {\n return;\n }\n\n globalObject.document?.addEventListener('keydown', this.handleKeyDown);\n this.addedGlobalListener = true;\n };\n\n private removeGlobalListener = () => {\n if (this.addedGlobalListener) {\n globalObject.document?.removeEventListener('keydown', this.handleKeyDown);\n\n this.addedGlobalListener = false;\n }\n };\n\n private refContainer = (element: HTMLSpanElement | null) => {\n this.container = element;\n };\n}\n\nPaging.propTypes = {\n /**\n * Current active page\n */\n activePage: number.isRequired,\n\n /**\n * React component that would be used for rendering items\n *\n * Usefull for router integration\n */\n component: func,\n\n /**\n * Total page count\n */\n pagesCount: number.isRequired,\n\n /**\n * Calls when page has been changed\n */\n onPageChange: func.isRequired,\n};\n"]}
1
+ {"version":3,"sources":["Paging.tsx"],"names":["IGNORE_EVENT_TAGS","PagingDataTids","root","dots","forwardLink","pageLinkWrapper","pageLink","Paging","PagingLocaleHelper","rootNode","getProps","defaultProps","state","focusedByTab","focusedItem","keyboardControl","useGlobalListener","addedGlobalListener","container","renderItem","item","index","focused","getFocusedItem","key","renderDots","disabled","isItemDisabled","renderForwardLink","active","props","activePage","renderPageLink","styles","theme","dotsDisabled","classes","pageLinkFocused","pageLinkDisabled","forwardLinkFocused","forwardLinkDisabled","Component","component","forward","locale","forwardIcon","parseInt","pagingForwardIconSize","marginLeft","emptyHandler","goForward","caption","pageNumber","pageLinkCurrent","pageLinkCurrentDisabled","handleClick","goToPage","handleMouseDownPageLink","renderNavigationHint","withoutNavigationHint","canGoBackward","canGoForward","hint","transparent","NavigationHelper","getKeyName","pageLinkHint","handleMouseDown","setState","isIE11","globalObject","setTimeout","focus","handleKeyDown","e","shiftKey","target","isArrowLeft","isArrowRight","Element","includes","tagName","toLowerCase","isContentEditable","checkKeyPressed","goBackward","moveFocusLeft","moveFocusRight","executeItemAction","handleFocus","requestAnimationFrame","keyListener","isTabPressed","handleBlur","getItems","pagesCount","concat","isItemFocusable","moveFocus","step","items","findIndex","x","length","onPageChange","addGlobalListener","document","addEventListener","removeGlobalListener","removeEventListener","refContainer","element","isForward","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","shouldBeVisibleWithLessThanTwoPages","renderMain","dataTid","setRootNode","paging","pagingDisabled","undefined","map","React","PureComponent","__KONTUR_REACT_UI__","PagingDefaultComponent","propTypes","number","isRequired","func"],"mappings":"6VAAA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4C;;AAEA,IAAMA,iBAAiB,GAAG,CAAC,OAAD,EAAU,UAAV,CAA1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDO,IAAMC,cAAc,GAAG;AAC5BC,EAAAA,IAAI,EAAE,cADsB;AAE5BC,EAAAA,IAAI,EAAE,cAFsB;AAG5BC,EAAAA,WAAW,EAAE,qBAHe;AAI5BC,EAAAA,eAAe,EAAE,yBAJW;AAK5BC,EAAAA,QAAQ,EAAE,kBALkB,EAAvB,C;;;;;;;;;AAcMC,M,WADZ,wBAAO,QAAP,EAAiBC,0BAAjB,C,MADAC,kB;;;;;;;;;;AAYSC,IAAAA,Q,GAAW,0CAAkBH,MAAM,CAACI,YAAzB,C;;;;;;;;;AASZC,IAAAA,K,GAAqB;AAC1BC,MAAAA,YAAY,EAAE,KADY;AAE1BC,MAAAA,WAAW,EAAE,IAFa;AAG1BC,MAAAA,eAAe,EAAE,MAAKL,QAAL,GAAgBM,iBAHP,E;;;;;AAQpBC,IAAAA,mB,GAAsB,K;AACtBC,IAAAA,S,GAAoC,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEpCC,IAAAA,U,GAAa,UAACC,IAAD,EAAiBC,KAAjB,EAAmC;AACtD,UAAMC,OAAO,GAAG,MAAKC,cAAL,OAA0BH,IAA1C;AACA,cAAQA,IAAR;AACE,aAAK,GAAL,CAAU;AACR,gBAAMI,GAAG,aAAUH,KAAK,GAAG,CAAR,GAAY,MAAZ,GAAqB,OAA/B,CAAT;AACA,mBAAO,MAAKI,UAAL,CAAgBD,GAAhB,CAAP;AACD;AACD,aAAK,SAAL,CAAgB;AACd,gBAAME,QAAQ,GAAG,MAAKC,cAAL,CAAoBP,IAApB,CAAjB;AACA,mBAAO,MAAKQ,iBAAL,CAAuBF,QAAvB,EAAiCJ,OAAjC,CAAP;AACD;AACD,gBAAS;AACP,gBAAMO,MAAM,GAAG,MAAKC,KAAL,CAAWC,UAAX,KAA0BX,IAAzC;AACA,mBAAO,MAAKY,cAAL,CAAoBZ,IAApB,EAA0BS,MAA1B,EAAkCP,OAAlC,CAAP;AACD,WAZH;;AAcD,K;;AAEOG,IAAAA,U,GAAa,UAACD,GAAD,EAAiB;AACpC;AACE;AACE,sBAAUvB,cAAc,CAACE,IAD3B;AAEE,UAAA,GAAG,EAAEqB,GAFP;AAGE,UAAA,SAAS,EAAE,gCAAMS,eAAO9B,IAAP,CAAY,MAAK+B,KAAjB,CAAN,IAAgC,IAAhC,MAAuCD,eAAOE,YAAP,CAAoB,MAAKD,KAAzB,CAAvC,IAAyE,MAAKJ,KAAL,CAAWJ,QAApF,OAHb;;AAKG,aALH,CADF;;;AASD,K;;AAEOE,IAAAA,iB,GAAoB,UAACF,QAAD,EAAoBJ,OAApB,EAAsD;AAChF,UAAMc,OAAO,GAAG,+BAAY,MAAKF,KAAjB;AACZ;AACED,qBAAO3B,QAAP,CAAgB,MAAK4B,KAArB,CADF;AAEED,qBAAO7B,WAAP,CAAmB,MAAK8B,KAAxB,CAFF;AAGEZ,MAAAA,OAAO,IAAIW,eAAOI,eAAP,CAAuB,MAAKH,KAA5B,CAHb;AAIE,OAACR,QAAQ,IAAI,MAAKI,KAAL,CAAWJ,QAAxB,KAAqCO,eAAOK,gBAAP,CAAwB,MAAKJ,KAA7B,CAJvC,CADY;;AAOZ;AACGD,qBAAO7B,WAAP,CAAmB,MAAK8B,KAAxB,CADH,IACoC,IADpC;AAEGD,qBAAOM,kBAAP,EAFH,IAEiCjB,OAFjC;AAGGW,qBAAOO,mBAAP,CAA2B,MAAKN,KAAhC,CAHH,IAG4CR,QAAQ,IAAI,MAAKI,KAAL,CAAWJ,QAHnE,QAPJ;;AAYA,UAAMe,SAAS,GAAG,MAAK/B,QAAL,GAAgBgC,SAAlC;AACA,UAAQC,OAAR,GAAoB,MAAKC,MAAzB,CAAQD,OAAR;;AAEA,UAAME,WAAW,GAAG,+BAAY,MAAKX,KAAjB;AAClB,mCAAC,wBAAD,IAAa,IAAI,EAAEY,QAAQ,CAAC,MAAKZ,KAAL,CAAWa,qBAAZ,CAA3B,EAA+D,KAAK,EAAE,EAAEC,UAAU,EAAE,CAAd,EAAtE,GADkB;;AAGlB,6CAAM,SAAS,EAAEf,eAAOY,WAAP,CAAmB,MAAKX,KAAxB,CAAjB;AACE,mCAAC,yBAAD,IAAuB,IAAI,EAAE,MAAKA,KAAL,CAAWa,qBAAxC,GADF,CAHF;;;;AAQA;AACE,qCAAC,SAAD;AACE,UAAA,GAAG,EAAE,SADP;AAEE,sBAAU9C,cAAc,CAACG,WAF3B;AAGE,UAAA,MAAM,EAAE,KAHV;AAIE,UAAA,SAAS,EAAEgC,OAJb;AAKE,UAAA,OAAO,EAAEV,QAAQ,GAAGuB,mBAAH,GAAkB,MAAKC,SAL1C;AAME,UAAA,QAAQ,EAAE,CAAC,CANb;AAOE,UAAA,UAAU,EAAE,SAPd;;AASG,cAAKpB,KAAL,CAAWqB,OAAX,IAAsBR,OATzB;AAUGE,QAAAA,WAVH,CADF;;;AAcD,K;;AAEOb,IAAAA,c,GAAiB,UAACoB,UAAD,EAAqBvB,MAArB,EAAsCP,OAAtC,EAAwE;AAC/F,UAAMc,OAAO,GAAG;AACbH,qBAAO3B,QAAP,CAAgB,MAAK4B,KAArB,CADa,IACiB,IADjB;AAEbD,qBAAOI,eAAP,CAAuB,MAAKH,KAA5B,CAFa,IAEwBZ,OAFxB;AAGbW,qBAAOK,gBAAP,CAAwB,MAAKJ,KAA7B,CAHa,IAGyB,MAAKJ,KAAL,CAAWJ,QAHpC;AAIbO,qBAAOoB,eAAP,CAAuB,MAAKnB,KAA5B,CAJa,IAIwBL,MAJxB;AAKbI,qBAAOqB,uBAAP,CAA+B,MAAKpB,KAApC,CALa,IAKgCL,MAAM,IAAI,MAAKC,KAAL,CAAWJ,QALrD,QAAhB;;AAOA,UAAMe,SAAS,GAAG,MAAK/B,QAAL,GAAgBgC,SAAlC;AACA,UAAMa,WAAW,GAAG,SAAdA,WAAc,WAAM,MAAKC,QAAL,CAAcJ,UAAd,CAAN,EAApB;;AAEA;AACE;AACE,sBAAUnD,cAAc,CAACI,eAD3B;AAEE,UAAA,GAAG,EAAE+C,UAFP;AAGE,UAAA,SAAS,EAAEnB,eAAO5B,eAAP,EAHb;AAIE,UAAA,WAAW,EAAE,MAAKoD,uBAJpB;;AAME,qCAAC,SAAD;AACE,sBAAUxD,cAAc,CAACK,QAD3B;AAEE,UAAA,MAAM,EAAEuB,MAFV;AAGE,UAAA,SAAS,EAAEO,OAHb;AAIE,UAAA,OAAO,EAAEmB,WAJX;AAKE,UAAA,QAAQ,EAAE,CAAC,CALb;AAME,UAAA,UAAU,EAAEH,UANd;;AAQGA,QAAAA,UARH,CANF;;AAgBGvB,QAAAA,MAAM,IAAI,MAAK6B,oBAAL,EAhBb,CADF;;;AAoBD,K;;AAEOA,IAAAA,oB,GAAuB,YAAM;AACnC,UAAI,MAAK5B,KAAL,CAAW6B,qBAAf,EAAsC;AACpC,eAAO,IAAP;AACD;;AAED,UAAQ5C,eAAR,GAA4B,MAAKH,KAAjC,CAAQG,eAAR;AACA,UAAM6C,aAAa,GAAG,MAAKA,aAAL,EAAtB;AACA,UAAMC,YAAY,GAAG,MAAKA,YAAL,EAArB;;AAEA,UAAIC,IAAI,GAAG,IAAX;AACA,UAAI/C,eAAe,KAAK6C,aAAa,IAAIC,YAAtB,CAAnB,EAAwD;AACtDC,QAAAA,IAAI;AACF;AACE,+CAAM,SAAS,EAAEF,aAAa,GAAG,EAAH,GAAQ3B,eAAO8B,WAAP,EAAtC,IAA6D,GAA7D,CADF;AAEE,mDAAOC,gBAAgB,CAACC,UAAjB,EAAP,CAFF;AAGE,+CAAM,SAAS,EAAEJ,YAAY,GAAG,EAAH,GAAQ5B,eAAO8B,WAAP,EAArC,IAA4D,GAA5D,CAHF,CADF;;;AAOD;AACD,0BAAO,sCAAK,SAAS,EAAE9B,eAAOiC,YAAP,CAAoB,MAAKhC,KAAzB,CAAhB,IAAkD4B,IAAlD,CAAP;AACD,K;;AAEOK,IAAAA,e,GAAkB,YAAM;AAC9B,YAAKC,QAAL,CAAc,EAAEvD,YAAY,EAAE,KAAhB,EAAuBC,WAAW,EAAE,IAApC,EAAd;AACD,K;;AAEO2C,IAAAA,uB,GAA0B,YAAM;AACtC,UAAIY,cAAJ,EAAY;AACV;AACA;AACAC,mCAAaC,UAAb,CAAwB,oBAAM,MAAKrD,SAAL,IAAkB,MAAKA,SAAL,CAAesD,KAAf,EAAxB,EAAxB,EAAwE,CAAxE;AACD;AACF,K;;AAEOC,IAAAA,a,GAAgB,UAACC,CAAD,EAAyD;AAC/E,UAAIA,CAAC,CAACC,QAAN,EAAgB;AACd;AACD;;AAED,UAAMC,MAAM,GAAGF,CAAC,CAACE,MAAjB;;AAEA,UAAMC,WAAW,GAAG,iCAAeH,CAAf,CAApB;AACA,UAAMI,YAAY,GAAG,kCAAgBJ,CAAhB,CAArB;;AAEA;AACE,sCAAaE,MAAb,EAAqBN,2BAAaS,OAAlC;AACC/E,MAAAA,iBAAiB,CAACgF,QAAlB,CAA2BJ,MAAM,CAACK,OAAP,CAAeC,WAAf,EAA3B,KAA6DN,MAAD,CAAwBO,iBADrF,CADF;AAGE;AACA;AACD;;AAED,UAAInB,gBAAgB,CAACoB,eAAjB,CAAiCV,CAAjC,KAAuCG,WAA3C,EAAwD;AACtD,cAAKT,QAAL,CAAc,EAAEtD,WAAW,EAAE,IAAf,EAAd,EAAqC,MAAKuE,UAA1C;AACA;AACD;AACD,UAAIrB,gBAAgB,CAACoB,eAAjB,CAAiCV,CAAjC,KAAuCI,YAA3C,EAAyD;AACvD,cAAKV,QAAL,CAAc,EAAEtD,WAAW,EAAE,IAAf,EAAd,EAAqC,MAAKoC,SAA1C;AACA;AACD;;AAED,UAAI,MAAKhC,SAAL,IAAkB,MAAKA,SAAL,KAAmBwD,CAAC,CAACE,MAA3C,EAAmD;AACjD,YAAIC,WAAJ,EAAiB;AACf,gBAAKT,QAAL,CAAc,EAAEvD,YAAY,EAAE,IAAhB,EAAd,EAAsC,MAAKyE,aAA3C;AACA;AACD;AACD,YAAIR,YAAJ,EAAkB;AAChB,gBAAKV,QAAL,CAAc,EAAEvD,YAAY,EAAE,IAAhB,EAAd,EAAsC,MAAK0E,cAA3C;AACA;AACD;AACD,YAAI,6BAAWb,CAAX,CAAJ,EAAmB;AACjB,gBAAKc,iBAAL,CAAuB,MAAKjE,cAAL,EAAvB;AACA;AACD;AACF;AACF,K;;AAEOkE,IAAAA,W,GAAc,YAAM;AAC1B,UAAI,MAAK3D,KAAL,CAAWJ,QAAf,EAAyB;AACvB;AACD;;AAED,YAAK0C,QAAL,CAAc,EAAErD,eAAe,EAAE,IAAnB,EAAd;;AAEA;AACA;AACAuD,iCAAaoB,qBAAb,+CAAaA,qBAAb,CAAqC,YAAM;AACzC,YAAIC,yBAAYC,YAAhB,EAA8B;AAC5B,gBAAKxB,QAAL,CAAc,EAAEvD,YAAY,EAAE,IAAhB,EAAd;AACD;AACF,OAJD;AAKD,K;;AAEOgF,IAAAA,U,GAAa,YAAM;AACzB,YAAKzB,QAAL,CAAc;AACZvD,QAAAA,YAAY,EAAE,KADF;AAEZE,QAAAA,eAAe,EAAE,MAAKL,QAAL,GAAgBM,iBAAhB,IAAqC,KAF1C,EAAd;;AAID,K;;AAEO8E,IAAAA,Q,GAAW,YAAkB;AACnC,aAAO,4BAAS,MAAKhE,KAAL,CAAWC,UAApB,EAAgC,MAAKD,KAAL,CAAWiE,UAA3C,EAAuDC,MAAvD,CAA8D,SAA9D,CAAP;AACD,K;;AAEOzE,IAAAA,c,GAAiB,YAA0B;AACjD,UAAI,CAAC,MAAKX,KAAL,CAAWC,YAAhB,EAA8B;AAC5B,eAAO,IAAP;AACD;;AAED,UAAQC,WAAR,GAAwB,MAAKF,KAA7B,CAAQE,WAAR;AACA,UAAIA,WAAW,IAAI,MAAKgF,QAAL,GAAgBd,QAAhB,CAAyBlE,WAAzB,CAAf,IAAwD,MAAKmF,eAAL,CAAqBnF,WAArB,CAA5D,EAA+F;AAC7F,eAAOA,WAAP;AACD;;AAED,aAAO,MAAKgB,KAAL,CAAWC,UAAlB;AACD,K;;AAEOkE,IAAAA,e,GAAkB,UAAC7E,IAAD,EAAoB;AAC5C,aAAO,CAAC,MAAKO,cAAL,CAAoBP,IAApB,CAAR;AACD,K;;AAEOO,IAAAA,c,GAAiB,UAACP,IAAD,EAAoB;AAC3C,cAAQA,IAAR;AACE,aAAK,GAAL;AACE,iBAAO,IAAP;AACF,aAAK,SAAL;AACE,iBAAO,CAAC,MAAKyC,YAAL,EAAR;AACF;AACE,iBAAO,KAAP,CANJ;;AAQD,K;;AAEO2B,IAAAA,iB,GAAoB,UAACpE,IAAD,EAA8B;AACxD,UAAIA,IAAI,KAAK,SAAb,EAAwB;AACtB,cAAK8B,SAAL;AACD;AACD,UAAI,OAAO9B,IAAP,KAAgB,QAApB,EAA8B;AAC5B,cAAKoC,QAAL,CAAcpC,IAAd;AACD;AACF,K;;AAEOkE,IAAAA,a,GAAgB,YAAM;AAC5B,YAAKY,SAAL,CAAe,CAAC,CAAhB;AACD,K;;AAEOX,IAAAA,c,GAAiB,YAAM;AAC7B,YAAKW,SAAL,CAAe,CAAf;AACD,K;;AAEOA,IAAAA,S,GAAY,UAACC,IAAD,EAAkB;AACpC,UAAMrF,WAAW,GAAG,MAAKS,cAAL,EAApB;AACA,UAAM6E,KAAK,GAAG,MAAKN,QAAL,EAAd;AACA,UAAIzE,KAAK,GAAG+E,KAAK,CAACC,SAAN,CAAgB,UAACC,CAAD,UAAOA,CAAC,KAAKxF,WAAb,EAAhB,CAAZ;AACA,SAAG;AACDO,QAAAA,KAAK,GAAG,CAACA,KAAK,GAAG8E,IAAR,GAAeC,KAAK,CAACG,MAAtB,IAAgCH,KAAK,CAACG,MAA9C;AACD,OAFD,QAES,CAAC,MAAKN,eAAL,CAAqBG,KAAK,CAAC/E,KAAD,CAA1B,CAFV;AAGA,YAAK+C,QAAL,CAAc,EAAEtD,WAAW,EAAEsF,KAAK,CAAC/E,KAAD,CAApB,EAAd;AACD,K;;AAEOuC,IAAAA,a,GAAgB,YAAe;AACrC,aAAO,MAAK9B,KAAL,CAAWC,UAAX,GAAwB,CAA/B;AACD,K;;AAEO8B,IAAAA,Y,GAAe,YAAe;AACpC,aAAO,MAAK/B,KAAL,CAAWC,UAAX,GAAwB,MAAKD,KAAL,CAAWiE,UAA1C;AACD,K;;AAEOV,IAAAA,U,GAAa,YAAM;AACzB,YAAK7B,QAAL,CAAc,MAAK1B,KAAL,CAAWC,UAAX,GAAwB,CAAtC;AACD,K;;AAEOmB,IAAAA,S,GAAY,YAAM;AACxB,YAAKM,QAAL,CAAc,MAAK1B,KAAL,CAAWC,UAAX,GAAwB,CAAtC;AACD,K;;AAEOyB,IAAAA,Q,GAAW,UAACJ,UAAD,EAAwB;AACzC,UAAIA,UAAU,IAAI,CAAd,IAAmBA,UAAU,KAAK,MAAKtB,KAAL,CAAWC,UAA7C,IAA2DqB,UAAU,IAAI,MAAKtB,KAAL,CAAWiE,UAAxF,EAAoG;AAClG,cAAKjE,KAAL,CAAW0E,YAAX,CAAwBpD,UAAxB;AACD;AACF,K;;AAEOqD,IAAAA,iB,GAAoB,YAAM;AAChC,UAAI,MAAKxF,mBAAT,EAA8B;AAC5B;AACD;;AAED,0DAAayF,QAAb,2CAAuBC,gBAAvB,CAAwC,SAAxC,EAAmD,MAAKlC,aAAxD;AACA,YAAKxD,mBAAL,GAA2B,IAA3B;AACD,K;;AAEO2F,IAAAA,oB,GAAuB,YAAM;AACnC,UAAI,MAAK3F,mBAAT,EAA8B;AAC5B,6DAAayF,QAAb,4CAAuBG,mBAAvB,CAA2C,SAA3C,EAAsD,MAAKpC,aAA3D;;AAEA,cAAKxD,mBAAL,GAA2B,KAA3B;AACD;AACF,K;;AAEO6F,IAAAA,Y,GAAe,UAACC,OAAD,EAAqC;AAC1D,YAAK7F,SAAL,GAAiB6F,OAAjB;AACD,K,sBA5XaC,S,GAAd,mBAAwB5D,UAAxB,EAAiE,aAAc,CAC7E,OAAOA,UAAU,KAAK,SAAtB,CACD,C,sCAaM6D,iB,GAAP,6BAA2B,CACzB,IAAMjG,iBAAiB,GAAG,KAAKN,QAAL,GAAgBM,iBAA1C,CACA,IAAIA,iBAAJ,EAAuB,CACrB,KAAKyF,iBAAL,GACD,CACF,C,QAEMS,kB,GAAP,4BAA0BC,SAA1B,EAAkD,CAChD,IAAMnG,iBAAiB,GAAG,KAAKN,QAAL,GAAgBM,iBAA1C,CACA,IAAI,CAACmG,SAAS,CAACnG,iBAAX,IAAgCA,iBAApC,EAAuD,CACrD,KAAKyF,iBAAL,GACD,CAED,IAAIU,SAAS,CAACnG,iBAAV,IAA+B,CAACA,iBAApC,EAAuD,CACrD,KAAK4F,oBAAL,GACD,CAED,IAAIO,SAAS,CAACnG,iBAAV,KAAgCA,iBAApC,EAAuD,CACrD,KAAKoD,QAAL,CAAc,EACZrD,eAAe,EAAEC,iBADL,EAAd,EAGD,CACF,C,QAEMoG,oB,GAAP,gCAA8B,CAC5B,KAAKR,oBAAL,GACD,C,QAEMS,M,GAAP,kBAAgB,mBACd,IAAI,KAAKvF,KAAL,CAAWiE,UAAX,GAAwB,CAAxB,IAA6B,CAAC,KAAKrF,QAAL,GAAgB4G,mCAAlD,EAAuF,CACrF,OAAO,IAAP,CACD,CAED,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAACpF,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAACqF,UAAL,EAAP,CACD,CAJH,CADF,CAQD,C,QAEOA,U,GAAR,sBAAqB,UACnB,qBAAmD,KAAK7G,QAAL,EAAnD,CAAoB8G,OAApB,kBAAQ,UAAR,EAA6BxG,iBAA7B,kBAA6BA,iBAA7B,CACA,oBACE,6BAAC,4BAAD,2BAAe,WAAW,EAAE,KAAKyG,WAAjC,IAAkD,KAAK3F,KAAvD,gBACE,uCACE,QAAQ,EAAE,KAAKA,KAAL,CAAWJ,QAAX,GAAsB,CAAC,CAAvB,GAA2B,CADvC,EAEE,YAAU8F,OAFZ,EAGE,SAAS,EAAE,kCAAMvF,eAAOyF,MAAP,CAAc,KAAKxF,KAAnB,CAAN,IAAkC,IAAlC,OAAyCD,eAAO0F,cAAP,EAAzC,IAAmE,KAAK7F,KAAL,CAAWJ,QAA9E,QAHb,EAIE,SAAS,EAAEV,iBAAiB,GAAG4G,SAAH,GAAe,KAAKnD,aAJlD,EAKE,OAAO,EAAE,KAAKgB,WALhB,EAME,MAAM,EAAE,KAAKI,UANf,EAOE,WAAW,EAAE,KAAK1B,eAPpB,EAQE,GAAG,EAAE,KAAK2C,YARZ,IAUG,KAAKhB,QAAL,GAAgB+B,GAAhB,CAAoB,KAAK1G,UAAzB,CAVH,CADF,CADF,CAgBD,C,iBA3FyB2G,eAAMC,a,WAClBC,mB,GAAsB,Q,UAEtBrH,Y,GAA6B,EACzC+B,SAAS,EAAEuF,8CAD8B,EAEzCX,mCAAmC,EAAE,IAFI,EAGzCtG,iBAAiB,EAAE,KAHsB,EAIzC,YAAYf,cAAc,CAACC,IAJc,E,UAS7BgI,S,GAAY,E;;;AAkY5B3H,MAAM,CAAC2H,SAAP,GAAmB;AACjB;AACF;AACA;AACEnG,EAAAA,UAAU,EAAEoG,kBAAOC,UAJF;;AAMjB;AACF;AACA;AACA;AACA;AACE1F,EAAAA,SAAS,EAAE2F,eAXM;;AAajB;AACF;AACA;AACEtC,EAAAA,UAAU,EAAEoC,kBAAOC,UAhBF;;AAkBjB;AACF;AACA;AACE5B,EAAAA,YAAY,EAAE6B,gBAAKD,UArBF,EAAnB","sourcesContent":["import React from 'react';\nimport { func, number } from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport { isKeyArrowLeft, isKeyArrowRight, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { Nullable } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { emptyHandler } from '../../lib/utils';\nimport { isIE11 } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ArrowChevronRightIcon } from '../../internal/icons/16px';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\n\nimport { styles } from './Paging.styles';\nimport * as NavigationHelper from './NavigationHelper';\nimport { getItems } from './PagingHelper';\nimport { PagingLocale, PagingLocaleHelper } from './locale';\nimport { PagingDefaultComponent } from './PagingDefaultComponent';\nimport { ForwardIcon } from './ForwardIcon';\n\nconst IGNORE_EVENT_TAGS = ['input', 'textarea'];\n\nexport interface ItemComponentProps {\n active: boolean;\n children?: React.ReactNode;\n className: string;\n onClick: () => void;\n pageNumber: number | 'forward';\n tabIndex: number;\n}\n\nexport interface PagingProps extends CommonProps {\n activePage: number;\n /**\n * Компонент обертки по умолчанию\n * @default <span />\n */\n component?: React.ComponentType<ItemComponentProps>;\n onPageChange: (pageNumber: number) => void;\n pagesCount: number;\n disabled?: boolean;\n /**\n * Отключает навигационные подсказки.\n * По-умолчанию подсказки появляются, когда доступно управление с клавиатуры\n * (либо элемент в фокусе, либо globalListeners === true)\n */\n withoutNavigationHint?: boolean;\n caption?: string;\n /**\n * Глобальный слушатель **keyDown**, для навигации клавишами без фокуса на компоненте.\n * Если на странице используется несколько элементов\n * **Paging** с useGlobalListener === true, то обработчик keyDown будет вызываться\n * на каждом из них. Такие случаи лучше обрабатывать отдельно.\n */\n useGlobalListener?: boolean;\n /**\n * Определяет, нужно ли показывать `Paging` когда страница всего одна.\n *\n * Этот проп будет удалён в 5-ой версии библиотеки,\n * так как поведение со скрытием `Paging`'а станет поведением по умолчанию.\n *\n * @default false\n */\n shouldBeVisibleWithLessThanTwoPages?: boolean;\n}\n\nexport interface PagingState {\n focusedByTab: boolean;\n focusedItem: Nullable<ItemType>;\n keyboardControl: boolean;\n}\n\nexport type ItemType = number | '.' | 'forward';\n\nexport const PagingDataTids = {\n root: 'Paging__root',\n dots: 'Paging__dots',\n forwardLink: 'Paging__forwardLink',\n pageLinkWrapper: 'Paging__pageLinkWrapper',\n pageLink: 'Paging__pageLink',\n} as const;\n\ntype DefaultProps = Required<\n Pick<PagingProps, 'component' | 'shouldBeVisibleWithLessThanTwoPages' | 'useGlobalListener' | 'data-tid'>\n>;\n\n@rootNode\n@locale('Paging', PagingLocaleHelper)\nexport class Paging extends React.PureComponent<PagingProps, PagingState> {\n public static __KONTUR_REACT_UI__ = 'Paging';\n\n public static defaultProps: DefaultProps = {\n component: PagingDefaultComponent,\n shouldBeVisibleWithLessThanTwoPages: true,\n useGlobalListener: false,\n 'data-tid': PagingDataTids.root,\n };\n\n private getProps = createPropsGetter(Paging.defaultProps);\n\n public static propTypes = {};\n private setRootNode!: TSetRootNode;\n\n public static isForward(pageNumber: number | 'forward'): boolean /* %checks */ {\n return pageNumber === 'forward';\n }\n\n public state: PagingState = {\n focusedByTab: false,\n focusedItem: null,\n keyboardControl: this.getProps().useGlobalListener,\n };\n\n private theme!: Theme;\n private readonly locale!: PagingLocale;\n private addedGlobalListener = false;\n private container: HTMLSpanElement | null = null;\n\n public componentDidMount() {\n const useGlobalListener = this.getProps().useGlobalListener;\n if (useGlobalListener) {\n this.addGlobalListener();\n }\n }\n\n public componentDidUpdate(prevProps: PagingProps) {\n const useGlobalListener = this.getProps().useGlobalListener;\n if (!prevProps.useGlobalListener && useGlobalListener) {\n this.addGlobalListener();\n }\n\n if (prevProps.useGlobalListener && !useGlobalListener) {\n this.removeGlobalListener();\n }\n\n if (prevProps.useGlobalListener !== useGlobalListener) {\n this.setState({\n keyboardControl: useGlobalListener,\n });\n }\n }\n\n public componentWillUnmount() {\n this.removeGlobalListener();\n }\n\n public render() {\n if (this.props.pagesCount < 2 && !this.getProps().shouldBeVisibleWithLessThanTwoPages) {\n return null;\n }\n\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 { 'data-tid': dataTid, useGlobalListener } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <span\n tabIndex={this.props.disabled ? -1 : 0}\n data-tid={dataTid}\n className={cx({ [styles.paging(this.theme)]: true, [styles.pagingDisabled()]: this.props.disabled })}\n onKeyDown={useGlobalListener ? undefined : this.handleKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onMouseDown={this.handleMouseDown}\n ref={this.refContainer}\n >\n {this.getItems().map(this.renderItem)}\n </span>\n </CommonWrapper>\n );\n }\n\n private renderItem = (item: ItemType, index: number) => {\n const focused = this.getFocusedItem() === item;\n switch (item) {\n case '.': {\n const key = `dots${index < 5 ? 'Left' : 'Right'}`;\n return this.renderDots(key);\n }\n case 'forward': {\n const disabled = this.isItemDisabled(item);\n return this.renderForwardLink(disabled, focused);\n }\n default: {\n const active = this.props.activePage === item;\n return this.renderPageLink(item, active, focused);\n }\n }\n };\n\n private renderDots = (key: string) => {\n return (\n <span\n data-tid={PagingDataTids.dots}\n key={key}\n className={cx({ [styles.dots(this.theme)]: true, [styles.dotsDisabled(this.theme)]: this.props.disabled })}\n >\n {'...'}\n </span>\n );\n };\n\n private renderForwardLink = (disabled: boolean, focused: boolean): JSX.Element => {\n const classes = isTheme2022(this.theme)\n ? cx(\n styles.pageLink(this.theme),\n styles.forwardLink(this.theme),\n focused && styles.pageLinkFocused(this.theme),\n (disabled || this.props.disabled) && styles.pageLinkDisabled(this.theme),\n )\n : cx({\n [styles.forwardLink(this.theme)]: true,\n [styles.forwardLinkFocused()]: focused,\n [styles.forwardLinkDisabled(this.theme)]: disabled || this.props.disabled,\n });\n const Component = this.getProps().component;\n const { forward } = this.locale;\n\n const forwardIcon = isTheme2022(this.theme) ? (\n <ForwardIcon size={parseInt(this.theme.pagingForwardIconSize)} style={{ marginLeft: 4 }} />\n ) : (\n <span className={styles.forwardIcon(this.theme)}>\n <ArrowChevronRightIcon size={this.theme.pagingForwardIconSize} />\n </span>\n );\n\n return (\n <Component\n key={'forward'}\n data-tid={PagingDataTids.forwardLink}\n active={false}\n className={classes}\n onClick={disabled ? emptyHandler : this.goForward}\n tabIndex={-1}\n pageNumber={'forward' as const}\n >\n {this.props.caption || forward}\n {forwardIcon}\n </Component>\n );\n };\n\n private renderPageLink = (pageNumber: number, active: boolean, focused: boolean): JSX.Element => {\n const classes = cx({\n [styles.pageLink(this.theme)]: true,\n [styles.pageLinkFocused(this.theme)]: focused,\n [styles.pageLinkDisabled(this.theme)]: this.props.disabled,\n [styles.pageLinkCurrent(this.theme)]: active,\n [styles.pageLinkCurrentDisabled(this.theme)]: active && this.props.disabled,\n });\n const Component = this.getProps().component;\n const handleClick = () => this.goToPage(pageNumber);\n\n return (\n <span\n data-tid={PagingDataTids.pageLinkWrapper}\n key={pageNumber}\n className={styles.pageLinkWrapper()}\n onMouseDown={this.handleMouseDownPageLink}\n >\n <Component\n data-tid={PagingDataTids.pageLink}\n active={active}\n className={classes}\n onClick={handleClick}\n tabIndex={-1}\n pageNumber={pageNumber}\n >\n {pageNumber}\n </Component>\n {active && this.renderNavigationHint()}\n </span>\n );\n };\n\n private renderNavigationHint = () => {\n if (this.props.withoutNavigationHint) {\n return null;\n }\n\n const { keyboardControl } = this.state;\n const canGoBackward = this.canGoBackward();\n const canGoForward = this.canGoForward();\n\n let hint = null;\n if (keyboardControl && (canGoBackward || canGoForward)) {\n hint = (\n <>\n <span className={canGoBackward ? '' : styles.transparent()}>{'←'}</span>\n <span>{NavigationHelper.getKeyName()}</span>\n <span className={canGoForward ? '' : styles.transparent()}>{'→'}</span>\n </>\n );\n }\n return <div className={styles.pageLinkHint(this.theme)}>{hint}</div>;\n };\n\n private handleMouseDown = () => {\n this.setState({ focusedByTab: false, focusedItem: null });\n };\n\n private handleMouseDownPageLink = () => {\n if (isIE11) {\n // Клик по span внутри контейнера с tabindex=\"0\" переносит фокус именно на этот span.\n // Поэтому горячие клавиши работают пока span существует на странице.\n globalObject.setTimeout(() => this.container && this.container.focus(), 0);\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent | React.KeyboardEvent<HTMLElement>) => {\n if (e.shiftKey) {\n return;\n }\n\n const target = e.target;\n\n const isArrowLeft = isKeyArrowLeft(e);\n const isArrowRight = isKeyArrowRight(e);\n\n if (\n isInstanceOf(target, globalObject.Element) &&\n (IGNORE_EVENT_TAGS.includes(target.tagName.toLowerCase()) || (target as HTMLElement).isContentEditable)\n ) {\n return;\n }\n\n if (NavigationHelper.checkKeyPressed(e) && isArrowLeft) {\n this.setState({ focusedItem: null }, this.goBackward);\n return;\n }\n if (NavigationHelper.checkKeyPressed(e) && isArrowRight) {\n this.setState({ focusedItem: null }, this.goForward);\n return;\n }\n\n if (this.container && this.container === e.target) {\n if (isArrowLeft) {\n this.setState({ focusedByTab: true }, this.moveFocusLeft);\n return;\n }\n if (isArrowRight) {\n this.setState({ focusedByTab: true }, this.moveFocusRight);\n return;\n }\n if (isKeyEnter(e)) {\n this.executeItemAction(this.getFocusedItem());\n return;\n }\n }\n };\n\n private handleFocus = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.setState({ keyboardControl: true });\n\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n keyboardControl: this.getProps().useGlobalListener || false,\n });\n };\n\n private getItems = (): ItemType[] => {\n return getItems(this.props.activePage, this.props.pagesCount).concat('forward');\n };\n\n private getFocusedItem = (): Nullable<ItemType> => {\n if (!this.state.focusedByTab) {\n return null;\n }\n\n const { focusedItem } = this.state;\n if (focusedItem && this.getItems().includes(focusedItem) && this.isItemFocusable(focusedItem)) {\n return focusedItem;\n }\n\n return this.props.activePage;\n };\n\n private isItemFocusable = (item: ItemType) => {\n return !this.isItemDisabled(item);\n };\n\n private isItemDisabled = (item: ItemType) => {\n switch (item) {\n case '.':\n return true;\n case 'forward':\n return !this.canGoForward();\n default:\n return false;\n }\n };\n\n private executeItemAction = (item: Nullable<ItemType>) => {\n if (item === 'forward') {\n this.goForward();\n }\n if (typeof item === 'number') {\n this.goToPage(item);\n }\n };\n\n private moveFocusLeft = () => {\n this.moveFocus(-1);\n };\n\n private moveFocusRight = () => {\n this.moveFocus(1);\n };\n\n private moveFocus = (step: number) => {\n const focusedItem = this.getFocusedItem();\n const items = this.getItems();\n let index = items.findIndex((x) => x === focusedItem);\n do {\n index = (index + step + items.length) % items.length;\n } while (!this.isItemFocusable(items[index]));\n this.setState({ focusedItem: items[index] });\n };\n\n private canGoBackward = (): boolean => {\n return this.props.activePage > 1;\n };\n\n private canGoForward = (): boolean => {\n return this.props.activePage < this.props.pagesCount;\n };\n\n private goBackward = () => {\n this.goToPage(this.props.activePage - 1);\n };\n\n private goForward = () => {\n this.goToPage(this.props.activePage + 1);\n };\n\n private goToPage = (pageNumber: number) => {\n if (pageNumber >= 1 && pageNumber !== this.props.activePage && pageNumber <= this.props.pagesCount) {\n this.props.onPageChange(pageNumber);\n }\n };\n\n private addGlobalListener = () => {\n if (this.addedGlobalListener) {\n return;\n }\n\n globalObject.document?.addEventListener('keydown', this.handleKeyDown);\n this.addedGlobalListener = true;\n };\n\n private removeGlobalListener = () => {\n if (this.addedGlobalListener) {\n globalObject.document?.removeEventListener('keydown', this.handleKeyDown);\n\n this.addedGlobalListener = false;\n }\n };\n\n private refContainer = (element: HTMLSpanElement | null) => {\n this.container = element;\n };\n}\n\nPaging.propTypes = {\n /**\n * Current active page\n */\n activePage: number.isRequired,\n\n /**\n * React component that would be used for rendering items\n *\n * Usefull for router integration\n */\n component: func,\n\n /**\n * Total page count\n */\n pagesCount: number.isRequired,\n\n /**\n * Calls when page has been changed\n */\n onPageChange: func.isRequired,\n};\n"]}
@@ -5,6 +5,7 @@ var _globalObject = require("@skbkontur/global-object");
5
5
 
6
6
  var _ThemeContext = require("../../lib/theming/ThemeContext");
7
7
  var _Emotion = require("../../lib/theming/Emotion");
8
+ var _isInstanceOf = require("../../lib/isInstanceOf");
8
9
 
9
10
  var _ScrollContainer = require("./ScrollContainer.constants");
10
11
  var _ScrollContainer2 = require("./ScrollContainer.styles");
@@ -233,7 +234,7 @@ ScrollBar = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.defaul
233
234
  };_this.
234
235
 
235
236
  handleScrollWheel = function (event, axis) {
236
- if (!_this.inner || !(0, _globalObject.isInstanceOf)(event, _globalObject.globalObject.WheelEvent) || axis === 'x' && !event.shiftKey) {
237
+ if (!_this.inner || !(0, _isInstanceOf.isInstanceOf)(event, _globalObject.globalObject.WheelEvent) || axis === 'x' && !event.shiftKey) {
237
238
  return;
238
239
  }
239
240