@skbkontur/react-ui 4.22.3 → 4.22.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +16 -2
  2. package/cjs/components/Calendar/DayCellView.js +1 -1
  3. package/cjs/components/Calendar/DayCellView.js.map +1 -1
  4. package/cjs/components/Kebab/Kebab.js +6 -1
  5. package/cjs/components/Kebab/Kebab.js.map +1 -1
  6. package/cjs/components/Link/Link.js +2 -1
  7. package/cjs/components/Link/Link.js.map +1 -1
  8. package/cjs/components/MenuItem/MenuItem.js +1 -1
  9. package/cjs/components/MenuItem/MenuItem.js.map +1 -1
  10. package/cjs/components/Paging/Paging.js +8 -3
  11. package/cjs/components/Paging/Paging.js.map +1 -1
  12. package/cjs/components/Tabs/Tab.js +1 -1
  13. package/cjs/components/Tabs/Tab.js.map +1 -1
  14. package/cjs/internal/CommonWrapper/CommonWrapper.js +2 -2
  15. package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
  16. package/cjs/internal/CommonWrapper/{extractCommonProps.d.ts → utils/extractCommonProps.d.ts} +2 -2
  17. package/cjs/internal/CommonWrapper/utils/extractCommonProps.js.map +1 -0
  18. package/cjs/internal/CommonWrapper/{getCommonVisualStateDataAttributes.js → utils/getCommonVisualStateDataAttributes.js} +3 -4
  19. package/cjs/internal/CommonWrapper/utils/getCommonVisualStateDataAttributes.js.map +1 -0
  20. package/cjs/internal/CommonWrapper/{getVisualStateDataAttributes.d.ts → utils/getVisualStateDataAttributes.d.ts} +1 -1
  21. package/cjs/internal/CommonWrapper/{getVisualStateDataAttributes.js → utils/getVisualStateDataAttributes.js} +3 -3
  22. package/cjs/internal/CommonWrapper/utils/getVisualStateDataAttributes.js.map +1 -0
  23. package/cjs/internal/CommonWrapper/utils/tryGetBoolean.d.ts +1 -0
  24. package/cjs/internal/CommonWrapper/utils/tryGetBoolean.js +1 -0
  25. package/cjs/internal/CommonWrapper/utils/tryGetBoolean.js.map +1 -0
  26. package/components/Calendar/DayCellView/DayCellView.js +1 -1
  27. package/components/Calendar/DayCellView/DayCellView.js.map +1 -1
  28. package/components/Kebab/Kebab/Kebab.js +4 -1
  29. package/components/Kebab/Kebab/Kebab.js.map +1 -1
  30. package/components/Link/Link/Link.js +4 -1
  31. package/components/Link/Link/Link.js.map +1 -1
  32. package/components/MenuItem/MenuItem/MenuItem.js +1 -1
  33. package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
  34. package/components/Paging/Paging/Paging.js +8 -4
  35. package/components/Paging/Paging/Paging.js.map +1 -1
  36. package/components/Tabs/Tab/Tab.js +2 -2
  37. package/components/Tabs/Tab/Tab.js.map +1 -1
  38. package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js +2 -2
  39. package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
  40. package/internal/CommonWrapper/utils/extractCommonProps/extractCommonProps.js.map +1 -0
  41. package/internal/CommonWrapper/{extractCommonProps → utils/extractCommonProps}/package.json +1 -1
  42. package/internal/CommonWrapper/{extractCommonProps.d.ts → utils/extractCommonProps.d.ts} +2 -2
  43. package/internal/CommonWrapper/{getCommonVisualStateDataAttributes → utils/getCommonVisualStateDataAttributes}/getCommonVisualStateDataAttributes.js +1 -5
  44. package/internal/CommonWrapper/utils/getCommonVisualStateDataAttributes/getCommonVisualStateDataAttributes.js.map +1 -0
  45. package/internal/CommonWrapper/{getCommonVisualStateDataAttributes → utils/getCommonVisualStateDataAttributes}/package.json +1 -1
  46. package/internal/CommonWrapper/{getVisualStateDataAttributes → utils/getVisualStateDataAttributes}/getVisualStateDataAttributes.js +3 -3
  47. package/internal/CommonWrapper/utils/getVisualStateDataAttributes/getVisualStateDataAttributes.js.map +1 -0
  48. package/internal/CommonWrapper/{getVisualStateDataAttributes → utils/getVisualStateDataAttributes}/package.json +1 -1
  49. package/internal/CommonWrapper/{getVisualStateDataAttributes.d.ts → utils/getVisualStateDataAttributes.d.ts} +1 -1
  50. package/internal/CommonWrapper/utils/tryGetBoolean/package.json +6 -0
  51. package/internal/CommonWrapper/utils/tryGetBoolean/tryGetBoolean.js +3 -0
  52. package/internal/CommonWrapper/utils/tryGetBoolean/tryGetBoolean.js.map +1 -0
  53. package/internal/CommonWrapper/utils/tryGetBoolean.d.ts +1 -0
  54. package/package.json +3 -3
  55. package/cjs/internal/CommonWrapper/extractCommonProps.js.map +0 -1
  56. package/cjs/internal/CommonWrapper/getCommonVisualStateDataAttributes.js.map +0 -1
  57. package/cjs/internal/CommonWrapper/getVisualStateDataAttributes.js.map +0 -1
  58. package/internal/CommonWrapper/extractCommonProps/extractCommonProps.js.map +0 -1
  59. package/internal/CommonWrapper/getCommonVisualStateDataAttributes/getCommonVisualStateDataAttributes.js.map +0 -1
  60. package/internal/CommonWrapper/getVisualStateDataAttributes/getVisualStateDataAttributes.js.map +0 -1
  61. /package/cjs/internal/CommonWrapper/{extractCommonProps.js → utils/extractCommonProps.js} +0 -0
  62. /package/cjs/internal/CommonWrapper/{getCommonVisualStateDataAttributes.d.ts → utils/getCommonVisualStateDataAttributes.d.ts} +0 -0
  63. /package/internal/CommonWrapper/{extractCommonProps → utils/extractCommonProps}/extractCommonProps.js +0 -0
  64. /package/internal/CommonWrapper/{getCommonVisualStateDataAttributes.d.ts → utils/getCommonVisualStateDataAttributes.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -3,10 +3,24 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [4.22.3](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.22.3-next.0...@skbkontur/react-ui@4.22.3) (2024-04-25)
6
+ ## [4.22.4](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.22.3...@skbkontur/react-ui@4.22.4) (2024-05-07)
7
7
 
8
- **Note:** Version bump only for package @skbkontur/react-ui
9
8
 
9
+ ### Features
10
+
11
+ * **Kebab,Link,Paging:** add visual state disabled ([#3418](https://github.com/skbkontur/retail-ui/issues/3418)) ([c47c213](https://github.com/skbkontur/retail-ui/commit/c47c213f3986b4c8a16e0f542fa2b530fc78b632))
12
+ * boolean visual state attributes ([#3407](https://github.com/skbkontur/retail-ui/issues/3407)) ([132a177](https://github.com/skbkontur/retail-ui/commit/132a177782baa51cdca5d59d97d41780217ef73d))
13
+
14
+
15
+
16
+
17
+
18
+ ## [4.22.3](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.22.2...@skbkontur/react-ui@4.22.3) (2024-04-25)
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * Reset focus if disabled ([#3378](https://github.com/skbkontur/retail-ui/issues/3378)) ([ed728b6](https://github.com/skbkontur/retail-ui/commit/ed728b66e30735cfe01e5d2acec3b81efa3fcdb8))
10
24
 
11
25
 
12
26
 
@@ -6,7 +6,7 @@ var _ThemeContext = require("../../lib/theming/ThemeContext");
6
6
  var _Emotion = require("../../lib/theming/Emotion");
7
7
  var _ThemeHelpers = require("../../lib/theming/ThemeHelpers");
8
8
  var _locale = require("../DatePicker/locale");
9
- var _getVisualStateDataAttributes = require("../../internal/CommonWrapper/getVisualStateDataAttributes");
9
+ var _getVisualStateDataAttributes = require("../../internal/CommonWrapper/utils/getVisualStateDataAttributes");
10
10
 
11
11
  var CDS = _interopRequireWildcard(require("./CalendarDateShape"));
12
12
  var _DayCellView = require("./DayCellView.styles");
@@ -1 +1 @@
1
- {"version":3,"sources":["DayCellView.tsx"],"names":["DayCellView","props","date","minDate","maxDate","today","value","isWeekend","onDateClick","theme","ThemeContext","_isTheme2022","handleClick","month","year","child","globalClasses","todayCaption","styles","isToday","Boolean","CDS","isEqual","isSelected","locale","DatePickerLocaleHelper","CalendarDataTids","dayCell","dayCellChooseDateAriaLabel","isBetween","cell","today2022","selected","weekend"],"mappings":"uVAAA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;AAYO,SAASA,WAAT,CAAqBC,KAArB,EAA8C;AACnD,MAAQC,IAAR,GAAyED,KAAzE,CAAQC,IAAR,CAAcC,OAAd,GAAyEF,KAAzE,CAAcE,OAAd,CAAuBC,OAAvB,GAAyEH,KAAzE,CAAuBG,OAAvB,CAAgCC,KAAhC,GAAyEJ,KAAzE,CAAgCI,KAAhC,CAAuCC,KAAvC,GAAyEL,KAAzE,CAAuCK,KAAvC,CAA8CC,SAA9C,GAAyEN,KAAzE,CAA8CM,SAA9C,CAAyDC,WAAzD,GAAyEP,KAAzE,CAAyDO,WAAzD;AACA,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,YAAY,GAAG,+BAAYF,KAAZ,CAArB;;AAEA,MAAMG,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB,sBAA8BX,KAAK,CAACC,IAApC,CAAQA,IAAR,eAAQA,IAAR,CAAcW,KAAd,eAAcA,KAAd,CAAqBC,IAArB,eAAqBA,IAArB;AACAN,IAAAA,WAAW,QAAX,YAAAA,WAAW,CAAG,EAAEN,IAAI,EAAJA,IAAF,EAAQW,KAAK,EAALA,KAAR,EAAeC,IAAI,EAAJA,IAAf,EAAH,CAAX;AACD,GAHD;;AAKA,MAAMC,KAAK,GAAGJ,YAAY;AACxB,yCAAM,SAAS,EAAE,iBAAGK,2BAAcC,YAAjB,EAA+BC,oBAAOD,YAAP,EAA/B,CAAjB,IAAyEf,IAAI,CAACA,IAA9E,CADwB;;AAGxBA,EAAAA,IAAI,CAACA,IAHP;;;AAMA,MAAMiB,OAAO,GAAGC,OAAO,CAACf,KAAK,IAAIgB,GAAG,CAACC,OAAJ,CAAYpB,IAAZ,EAAkBG,KAAlB,CAAV,CAAvB;AACA,MAAMkB,UAAU,GAAGH,OAAO,CAACd,KAAK,IAAIe,GAAG,CAACC,OAAJ,CAAYpB,IAAZ,EAAkBI,KAAlB,CAAV,CAA1B;;AAEA,MAAMkB,MAAM,GAAG,8CAAoB,UAApB,EAAgCC,8BAAhC,CAAf;;AAEA;AACE;AACE,kBAAUC,2BAAiBC,OAD7B;AAEE,MAAA,QAAQ,EAAE,CAAC,CAFb;AAGE,oBAAeH,MAAM,CAACI,0BAAtB,UAAoDtB,KAApD,oBAAoDA,KAAK,CAAEJ,IAA3D,WAAmEI,KAAK,IAAIA,KAAK,CAACO,KAAN,GAAc,CAA1F,WAA+FP,KAA/F,oBAA+FA,KAAK,CAAEQ,IAAtG,CAHF;AAIE,MAAA,QAAQ,EAAE,CAACO,GAAG,CAACQ,SAAJ,CAAc3B,IAAd,EAAoBC,OAApB,EAA6BC,OAA7B,CAJb;AAKE,MAAA,SAAS,EAAE;AACRc,0BAAOY,IAAP,CAAYrB,KAAZ,CADQ,IACa,IADb;AAERS,0BAAOb,KAAP,CAAaI,KAAb,CAFQ,IAEcU,OAAO,IAAI,CAACR,YAF1B;AAGRO,0BAAOa,SAAP,CAAiBtB,KAAjB,CAHQ,IAGkBU,OAAO,IAAIR,YAH7B;AAIRO,0BAAOc,QAAP,CAAgBvB,KAAhB,CAJQ,IAIiBc,UAJjB;AAKRL,0BAAOe,OAAP,CAAexB,KAAf,CALQ,IAKgBW,OAAO,CAACb,SAAD,CALvB,OALb;;AAYM,oEAA6B,EAAEyB,QAAQ,EAAET,UAAZ,EAA7B,CAZN;AAaE,MAAA,OAAO,EAAEX,WAbX;;AAeGG,IAAAA,KAfH,CADF;;;AAmBD","sourcesContent":["import React, { useContext } from 'react';\n\nimport { useLocaleForControl } from '../../lib/locale/useLocaleForControl';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { DatePickerLocaleHelper } from '../DatePicker/locale';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/getVisualStateDataAttributes';\n\nimport * as CDS from './CalendarDateShape';\nimport { globalClasses, styles } from './DayCellView.styles';\nimport { CalendarDataTids } from './Calendar';\n\ninterface DayCellViewProps {\n date: CDS.CalendarDateShape;\n today?: CDS.CalendarDateShape;\n value?: Nullable<CDS.CalendarDateShape>;\n minDate?: CDS.CalendarDateShape;\n maxDate?: CDS.CalendarDateShape;\n onDateClick?: (day: CDS.CalendarDateShape) => void;\n isWeekend?: boolean;\n}\n\nexport function DayCellView(props: DayCellViewProps) {\n const { date, minDate, maxDate, today, value, isWeekend, onDateClick } = props;\n const theme = useContext(ThemeContext);\n const _isTheme2022 = isTheme2022(theme);\n\n const handleClick = () => {\n const { date, month, year } = props.date;\n onDateClick?.({ date, month, year });\n };\n\n const child = _isTheme2022 ? (\n <span className={cx(globalClasses.todayCaption, styles.todayCaption())}>{date.date}</span>\n ) : (\n date.date\n );\n\n const isToday = Boolean(today && CDS.isEqual(date, today));\n const isSelected = Boolean(value && CDS.isEqual(date, value));\n\n const locale = useLocaleForControl('Calendar', DatePickerLocaleHelper);\n\n return (\n <button\n data-tid={CalendarDataTids.dayCell}\n tabIndex={-1}\n aria-label={`${locale.dayCellChooseDateAriaLabel} ${value?.date}.${value && value.month + 1}.${value?.year}`}\n disabled={!CDS.isBetween(date, minDate, maxDate)}\n className={cx({\n [styles.cell(theme)]: true,\n [styles.today(theme)]: isToday && !_isTheme2022,\n [styles.today2022(theme)]: isToday && _isTheme2022,\n [styles.selected(theme)]: isSelected,\n [styles.weekend(theme)]: Boolean(isWeekend),\n })}\n {...getVisualStateDataAttributes({ selected: isSelected })}\n onClick={handleClick}\n >\n {child}\n </button>\n );\n}\n"]}
1
+ {"version":3,"sources":["DayCellView.tsx"],"names":["DayCellView","props","date","minDate","maxDate","today","value","isWeekend","onDateClick","theme","ThemeContext","_isTheme2022","handleClick","month","year","child","globalClasses","todayCaption","styles","isToday","Boolean","CDS","isEqual","isSelected","locale","DatePickerLocaleHelper","CalendarDataTids","dayCell","dayCellChooseDateAriaLabel","isBetween","cell","today2022","selected","weekend"],"mappings":"uVAAA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;AAYO,SAASA,WAAT,CAAqBC,KAArB,EAA8C;AACnD,MAAQC,IAAR,GAAyED,KAAzE,CAAQC,IAAR,CAAcC,OAAd,GAAyEF,KAAzE,CAAcE,OAAd,CAAuBC,OAAvB,GAAyEH,KAAzE,CAAuBG,OAAvB,CAAgCC,KAAhC,GAAyEJ,KAAzE,CAAgCI,KAAhC,CAAuCC,KAAvC,GAAyEL,KAAzE,CAAuCK,KAAvC,CAA8CC,SAA9C,GAAyEN,KAAzE,CAA8CM,SAA9C,CAAyDC,WAAzD,GAAyEP,KAAzE,CAAyDO,WAAzD;AACA,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,YAAY,GAAG,+BAAYF,KAAZ,CAArB;;AAEA,MAAMG,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB,sBAA8BX,KAAK,CAACC,IAApC,CAAQA,IAAR,eAAQA,IAAR,CAAcW,KAAd,eAAcA,KAAd,CAAqBC,IAArB,eAAqBA,IAArB;AACAN,IAAAA,WAAW,QAAX,YAAAA,WAAW,CAAG,EAAEN,IAAI,EAAJA,IAAF,EAAQW,KAAK,EAALA,KAAR,EAAeC,IAAI,EAAJA,IAAf,EAAH,CAAX;AACD,GAHD;;AAKA,MAAMC,KAAK,GAAGJ,YAAY;AACxB,yCAAM,SAAS,EAAE,iBAAGK,2BAAcC,YAAjB,EAA+BC,oBAAOD,YAAP,EAA/B,CAAjB,IAAyEf,IAAI,CAACA,IAA9E,CADwB;;AAGxBA,EAAAA,IAAI,CAACA,IAHP;;;AAMA,MAAMiB,OAAO,GAAGC,OAAO,CAACf,KAAK,IAAIgB,GAAG,CAACC,OAAJ,CAAYpB,IAAZ,EAAkBG,KAAlB,CAAV,CAAvB;AACA,MAAMkB,UAAU,GAAGH,OAAO,CAACd,KAAK,IAAIe,GAAG,CAACC,OAAJ,CAAYpB,IAAZ,EAAkBI,KAAlB,CAAV,CAA1B;;AAEA,MAAMkB,MAAM,GAAG,8CAAoB,UAApB,EAAgCC,8BAAhC,CAAf;;AAEA;AACE;AACE,kBAAUC,2BAAiBC,OAD7B;AAEE,MAAA,QAAQ,EAAE,CAAC,CAFb;AAGE,oBAAeH,MAAM,CAACI,0BAAtB,UAAoDtB,KAApD,oBAAoDA,KAAK,CAAEJ,IAA3D,WAAmEI,KAAK,IAAIA,KAAK,CAACO,KAAN,GAAc,CAA1F,WAA+FP,KAA/F,oBAA+FA,KAAK,CAAEQ,IAAtG,CAHF;AAIE,MAAA,QAAQ,EAAE,CAACO,GAAG,CAACQ,SAAJ,CAAc3B,IAAd,EAAoBC,OAApB,EAA6BC,OAA7B,CAJb;AAKE,MAAA,SAAS,EAAE;AACRc,0BAAOY,IAAP,CAAYrB,KAAZ,CADQ,IACa,IADb;AAERS,0BAAOb,KAAP,CAAaI,KAAb,CAFQ,IAEcU,OAAO,IAAI,CAACR,YAF1B;AAGRO,0BAAOa,SAAP,CAAiBtB,KAAjB,CAHQ,IAGkBU,OAAO,IAAIR,YAH7B;AAIRO,0BAAOc,QAAP,CAAgBvB,KAAhB,CAJQ,IAIiBc,UAJjB;AAKRL,0BAAOe,OAAP,CAAexB,KAAf,CALQ,IAKgBW,OAAO,CAACb,SAAD,CALvB,OALb;;AAYM,oEAA6B,EAAEyB,QAAQ,EAAET,UAAZ,EAA7B,CAZN;AAaE,MAAA,OAAO,EAAEX,WAbX;;AAeGG,IAAAA,KAfH,CADF;;;AAmBD","sourcesContent":["import React, { useContext } from 'react';\n\nimport { useLocaleForControl } from '../../lib/locale/useLocaleForControl';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { DatePickerLocaleHelper } from '../DatePicker/locale';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport * as CDS from './CalendarDateShape';\nimport { globalClasses, styles } from './DayCellView.styles';\nimport { CalendarDataTids } from './Calendar';\n\ninterface DayCellViewProps {\n date: CDS.CalendarDateShape;\n today?: CDS.CalendarDateShape;\n value?: Nullable<CDS.CalendarDateShape>;\n minDate?: CDS.CalendarDateShape;\n maxDate?: CDS.CalendarDateShape;\n onDateClick?: (day: CDS.CalendarDateShape) => void;\n isWeekend?: boolean;\n}\n\nexport function DayCellView(props: DayCellViewProps) {\n const { date, minDate, maxDate, today, value, isWeekend, onDateClick } = props;\n const theme = useContext(ThemeContext);\n const _isTheme2022 = isTheme2022(theme);\n\n const handleClick = () => {\n const { date, month, year } = props.date;\n onDateClick?.({ date, month, year });\n };\n\n const child = _isTheme2022 ? (\n <span className={cx(globalClasses.todayCaption, styles.todayCaption())}>{date.date}</span>\n ) : (\n date.date\n );\n\n const isToday = Boolean(today && CDS.isEqual(date, today));\n const isSelected = Boolean(value && CDS.isEqual(date, value));\n\n const locale = useLocaleForControl('Calendar', DatePickerLocaleHelper);\n\n return (\n <button\n data-tid={CalendarDataTids.dayCell}\n tabIndex={-1}\n aria-label={`${locale.dayCellChooseDateAriaLabel} ${value?.date}.${value && value.month + 1}.${value?.year}`}\n disabled={!CDS.isBetween(date, minDate, maxDate)}\n className={cx({\n [styles.cell(theme)]: true,\n [styles.today(theme)]: isToday && !_isTheme2022,\n [styles.today2022(theme)]: isToday && _isTheme2022,\n [styles.selected(theme)]: isSelected,\n [styles.weekend(theme)]: Boolean(isWeekend),\n })}\n {...getVisualStateDataAttributes({ selected: isSelected })}\n onClick={handleClick}\n >\n {child}\n </button>\n );\n}\n"]}
@@ -22,6 +22,7 @@ var _createPropsGetter = require("../../lib/createPropsGetter");
22
22
  var _ThemeHelpers = require("../../lib/theming/ThemeHelpers");
23
23
 
24
24
  var _featureFlagsContext = require("../../lib/featureFlagsContext");
25
+ var _getVisualStateDataAttributes = require("../../internal/CommonWrapper/utils/getVisualStateDataAttributes");
25
26
 
26
27
  var _Kebab = require("./Kebab.styles");
27
28
  var _KebabIcon = require("./KebabIcon");var _class, _class2, _temp;
@@ -158,6 +159,10 @@ Kebab = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
158
159
 
159
160
 
160
161
 
162
+
163
+
164
+
165
+
161
166
 
162
167
 
163
168
 
@@ -235,7 +240,7 @@ Kebab = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
235
240
  _this.setState({
236
241
  focusedByTab: false });
237
242
 
238
- };return _this;}var _proto = Kebab.prototype;_proto.componentDidMount = function componentDidMount() {/** addListener'у нужен колбэк в аргумент */this.listener = LayoutEvents.addListener(function () {return undefined;});};_proto.componentWillUnmount = function componentWillUnmount() {this.listener.remove();};_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(_ThemeContext.ThemeContext.Provider, { value: _ThemeFactory.ThemeFactory.create({ popupPinOffset: theme.kebabPinOffset, popupMargin: theme.kebabMargin, popupPinSize: theme.kebabPinSize, menuScrollContainerContentWrapperPaddingY: theme.menuLegacyPaddingY }, theme) }, _this2.renderMain());});};_proto.renderMain = function renderMain() {var _this3 = this;var disabled = this.props.disabled;var _this$getProps2 = this.getProps(),positions = _this$getProps2.positions,disableAnimations = _this$getProps2.disableAnimations,onOpen = _this$getProps2.onOpen,onClose = _this$getProps2.onClose;return /*#__PURE__*/_react.default.createElement(_featureFlagsContext.ReactUIFeatureFlagsContext.Consumer, null, function (flags) {var hasPin = !(0, _featureFlagsContext.getFullReactUIFlagsContext)(flags).kebabHintRemovePin || !(0, _ThemeHelpers.isTheme2022)(_this3.theme);return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this3.setRootNode }, _this3.props), /*#__PURE__*/_react.default.createElement(_PopupMenu.PopupMenu, { popupHasPin: hasPin, preventIconsOffset: _this3.props.preventIconsOffset, positions: positions, onChangeMenuState: _this3.handleChangeMenuState, caption: _this3.renderCaption, disableAnimations: disableAnimations, menuMaxHeight: _this3.props.menuMaxHeight, onOpen: onOpen, onClose: onClose, popupMenuId: _this3.props.popupMenuId, "aria-label": _this3.props['aria-label'] }, !disabled && _this3.props.children));});};_proto.
243
+ };return _this;}var _proto = Kebab.prototype;_proto.componentDidMount = function componentDidMount() {/** addListener'у нужен колбэк в аргумент */this.listener = LayoutEvents.addListener(function () {return undefined;});};_proto.componentWillUnmount = function componentWillUnmount() {this.listener.remove();};_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(_ThemeContext.ThemeContext.Provider, { value: _ThemeFactory.ThemeFactory.create({ popupPinOffset: theme.kebabPinOffset, popupMargin: theme.kebabMargin, popupPinSize: theme.kebabPinSize, menuScrollContainerContentWrapperPaddingY: theme.menuLegacyPaddingY }, theme) }, _this2.renderMain());});};_proto.renderMain = function renderMain() {var _this3 = this;var disabled = this.props.disabled;var _this$getProps2 = this.getProps(),positions = _this$getProps2.positions,disableAnimations = _this$getProps2.disableAnimations,onOpen = _this$getProps2.onOpen,onClose = _this$getProps2.onClose;return /*#__PURE__*/_react.default.createElement(_featureFlagsContext.ReactUIFeatureFlagsContext.Consumer, null, function (flags) {var hasPin = !(0, _featureFlagsContext.getFullReactUIFlagsContext)(flags).kebabHintRemovePin || !(0, _ThemeHelpers.isTheme2022)(_this3.theme);return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this3.setRootNode }, _this3.props, (0, _getVisualStateDataAttributes.getVisualStateDataAttributes)({ disabled: disabled })), /*#__PURE__*/_react.default.createElement(_PopupMenu.PopupMenu, { popupHasPin: hasPin, preventIconsOffset: _this3.props.preventIconsOffset, positions: positions, onChangeMenuState: _this3.handleChangeMenuState, caption: _this3.renderCaption, disableAnimations: disableAnimations, menuMaxHeight: _this3.props.menuMaxHeight, onOpen: onOpen, onClose: onClose, popupMenuId: _this3.props.popupMenuId, "aria-label": _this3.props['aria-label'] }, !disabled && _this3.props.children));});};_proto.
239
244
 
240
245
  renderIcon = function renderIcon() {var _cx;
241
246
  var _this$getProps3 = this.getProps(),size = _this$getProps3.size,_this$getProps3$icon = _this$getProps3.icon,icon = _this$getProps3$icon === void 0 ? /*#__PURE__*/_react.default.createElement(_px.MenuKebabIcon, null) : _this$getProps3$icon;
@@ -1 +1 @@
1
- {"version":3,"sources":["Kebab.tsx"],"names":["KebabDataTids","caption","Kebab","rootNode","getProps","defaultProps","state","focusedByTab","anchor","listener","remove","undefined","renderCaption","captionProps","disabled","size","handleCaptionKeyDown","event","openMenu","handleCaptionClick","toggleMenu","handleFocus","handleBlur","styles","kebab","theme","kebabSmall","kebabMedium","kebabLarge","kebab2022","opened","focused","props","renderIcon2022","renderIcon","e","isKeyEnter","isKeySpace","isKeyArrowVertical","preventDefault","handleChangeMenuState","isOpened","restoreFocus","setState","globalObject","requestAnimationFrame","keyListener","isTabPressed","componentDidMount","LayoutEvents","addListener","componentWillUnmount","render","ThemeFactory","create","popupPinOffset","kebabPinOffset","popupMargin","kebabMargin","popupPinSize","kebabPinSize","menuScrollContainerContentWrapperPaddingY","menuLegacyPaddingY","renderMain","positions","disableAnimations","onOpen","onClose","flags","hasPin","kebabHintRemovePin","setRootNode","preventIconsOffset","menuMaxHeight","popupMenuId","children","icon","iconsmall","iconmedium","iconlarge","sizes","small","parseInt","kebabIconSizeSmall","medium","kebabIconSizeMedium","large","kebabIconSizeLarge","React","cloneElement","color","kebabIconColor","Component","__KONTUR_REACT_UI__","displayName","propTypes","isTestEnv","PropTypes","node","bool","oneOfType","string","number","func"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { isElement } from 'react-is';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isKonturIcon } from '../../lib/utils';\nimport { isKeyArrowVertical, isKeyEnter, isKeySpace, someKeys } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { PopupMenu, PopupMenuCaptionProps, PopupMenuProps } from '../../internal/PopupMenu';\nimport { Nullable } from '../../typings/utility-types';\nimport { PopupPositionsType } from '../../internal/Popup';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MenuKebabIcon } from '../../internal/icons/16px';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { SizeProp } from '../../lib/types/props';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\n\nimport { styles } from './Kebab.styles';\nimport { KebabIcon } from './KebabIcon';\n\nexport interface KebabProps\n extends Pick<AriaAttributes, 'aria-label'>,\n Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId' | 'preventIconsOffset'>,\n CommonProps {\n disabled?: boolean;\n size?: SizeProp;\n /**\n * Список позиций доступных для расположения выпадашки.\n *\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n * @default ['bottom left', 'bottom right', 'top left', 'top right']\n */\n positions?: PopupPositionsType[];\n menuMaxHeight?: number | string;\n /**\n * Не показывать анимацию\n */\n disableAnimations?: boolean;\n /**\n * Кастомная иконка\n */\n icon?: React.ReactNode;\n /**\n * Атрибут для указания id элемента(-ов), описывающих его\n */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n}\n\nexport const KebabDataTids = {\n caption: 'Kebab__caption',\n} as const;\n\nexport interface KebabState {\n anchor: Nullable<HTMLElement>;\n focusedByTab: boolean;\n}\n\ntype DefaultProps = Required<Pick<KebabProps, 'onOpen' | 'onClose' | 'positions' | 'size' | 'disableAnimations'>>;\n\n@rootNode\nexport class Kebab extends React.Component<KebabProps, KebabState> {\n public static __KONTUR_REACT_UI__ = 'Kebab';\n public static displayName = 'Kebab';\n\n public static propTypes = {};\n\n public static defaultProps: DefaultProps = {\n onOpen: () => undefined,\n onClose: () => undefined,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n size: 'small',\n disableAnimations: isTestEnv,\n };\n\n private getProps = createPropsGetter(Kebab.defaultProps);\n\n public state: KebabState = {\n focusedByTab: false,\n anchor: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n private listener: {\n remove: () => void;\n } = {\n remove: () => undefined,\n };\n\n public componentDidMount() {\n /** addListener'у нужен колбэк в аргумент */\n this.listener = LayoutEvents.addListener(() => undefined);\n }\n\n public componentWillUnmount() {\n this.listener.remove();\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.kebabPinOffset,\n popupMargin: theme.kebabMargin,\n popupPinSize: theme.kebabPinSize,\n menuScrollContainerContentWrapperPaddingY: theme.menuLegacyPaddingY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { disabled } = this.props;\n const { positions, disableAnimations, onOpen, onClose } = this.getProps();\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n const hasPin = !getFullReactUIFlagsContext(flags).kebabHintRemovePin || !isTheme2022(this.theme);\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <PopupMenu\n popupHasPin={hasPin}\n preventIconsOffset={this.props.preventIconsOffset}\n positions={positions}\n onChangeMenuState={this.handleChangeMenuState}\n caption={this.renderCaption}\n disableAnimations={disableAnimations}\n menuMaxHeight={this.props.menuMaxHeight}\n onOpen={onOpen}\n onClose={onClose}\n popupMenuId={this.props.popupMenuId}\n aria-label={this.props['aria-label']}\n >\n {!disabled && this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n private renderCaption = (captionProps: PopupMenuCaptionProps) => {\n const { disabled, size } = this.getProps();\n const handleCaptionKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled) {\n this.handleCaptionKeyDown(event, captionProps.openMenu);\n }\n };\n\n const handleCaptionClick = () => {\n if (!disabled) {\n captionProps.toggleMenu();\n }\n };\n\n return (\n <span\n role=\"button\"\n data-tid={KebabDataTids.caption}\n tabIndex={disabled ? -1 : 0}\n onClick={handleCaptionClick}\n onKeyDown={handleCaptionKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n className={cx(\n styles.kebab(this.theme),\n size === 'small' && styles.kebabSmall(this.theme),\n size === 'medium' && styles.kebabMedium(this.theme),\n size === 'large' && styles.kebabLarge(this.theme),\n isTheme2022(this.theme) && styles.kebab2022(),\n captionProps.opened && styles.opened(this.theme),\n disabled && styles.disabled(),\n this.state.focusedByTab && styles.focused(this.theme),\n )}\n aria-describedby={this.props['aria-describedby']}\n >\n {isTheme2022(this.theme) ? this.renderIcon2022() : this.renderIcon()}\n </span>\n );\n };\n\n private handleCaptionKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n openMenu: PopupMenuCaptionProps['openMenu'],\n ) => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n private handleChangeMenuState = (isOpened: boolean, restoreFocus: boolean): void => {\n this.setState({\n focusedByTab: !isOpened && restoreFocus,\n });\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n });\n };\n\n private renderIcon() {\n const { size, icon = <MenuKebabIcon /> } = this.getProps();\n return (\n <div\n className={cx({\n [styles.icon(this.theme)]: true,\n [styles.iconsmall(this.theme)]: size === 'small',\n [styles.iconmedium(this.theme)]: size === 'medium',\n [styles.iconlarge(this.theme)]: size === 'large',\n })}\n >\n {icon}\n </div>\n );\n }\n\n private renderIcon2022() {\n const { size, icon = <KebabIcon /> } = this.getProps();\n\n if (isElement(icon) && isKonturIcon(icon)) {\n const sizes: Record<SizeProp, number> = {\n small: parseInt(this.theme.kebabIconSizeSmall),\n medium: parseInt(this.theme.kebabIconSizeMedium),\n large: parseInt(this.theme.kebabIconSizeLarge),\n };\n\n return React.cloneElement(icon, {\n size: icon.props.size ?? sizes[size],\n color: icon.props.color ?? this.theme.kebabIconColor,\n });\n }\n\n return icon;\n }\n}\n\nKebab.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n menuMaxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Размер кебаба small 14px | large 20px\n */\n size: PropTypes.string,\n\n /**\n * Коллбек, вызывающийся перед закрытием кебаба\n */\n onClose: PropTypes.func,\n\n /**\n * Коллбек, вызывающийся перед открытием кебаба\n */\n onOpen: PropTypes.func,\n};\n"]}
1
+ {"version":3,"sources":["Kebab.tsx"],"names":["KebabDataTids","caption","Kebab","rootNode","getProps","defaultProps","state","focusedByTab","anchor","listener","remove","undefined","renderCaption","captionProps","disabled","size","handleCaptionKeyDown","event","openMenu","handleCaptionClick","toggleMenu","handleFocus","handleBlur","styles","kebab","theme","kebabSmall","kebabMedium","kebabLarge","kebab2022","opened","focused","props","renderIcon2022","renderIcon","e","isKeyEnter","isKeySpace","isKeyArrowVertical","preventDefault","handleChangeMenuState","isOpened","restoreFocus","setState","globalObject","requestAnimationFrame","keyListener","isTabPressed","componentDidMount","LayoutEvents","addListener","componentWillUnmount","render","ThemeFactory","create","popupPinOffset","kebabPinOffset","popupMargin","kebabMargin","popupPinSize","kebabPinSize","menuScrollContainerContentWrapperPaddingY","menuLegacyPaddingY","renderMain","positions","disableAnimations","onOpen","onClose","flags","hasPin","kebabHintRemovePin","setRootNode","preventIconsOffset","menuMaxHeight","popupMenuId","children","icon","iconsmall","iconmedium","iconlarge","sizes","small","parseInt","kebabIconSizeSmall","medium","kebabIconSizeMedium","large","kebabIconSizeLarge","React","cloneElement","color","kebabIconColor","Component","__KONTUR_REACT_UI__","displayName","propTypes","isTestEnv","PropTypes","node","bool","oneOfType","string","number","func"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { isElement } from 'react-is';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isKonturIcon } from '../../lib/utils';\nimport { isKeyArrowVertical, isKeyEnter, isKeySpace, someKeys } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { PopupMenu, PopupMenuCaptionProps, PopupMenuProps } from '../../internal/PopupMenu';\nimport { Nullable } from '../../typings/utility-types';\nimport { PopupPositionsType } from '../../internal/Popup';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MenuKebabIcon } from '../../internal/icons/16px';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { SizeProp } from '../../lib/types/props';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { styles } from './Kebab.styles';\nimport { KebabIcon } from './KebabIcon';\n\nexport interface KebabProps\n extends Pick<AriaAttributes, 'aria-label'>,\n Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId' | 'preventIconsOffset'>,\n CommonProps {\n disabled?: boolean;\n size?: SizeProp;\n /**\n * Список позиций доступных для расположения выпадашки.\n *\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n * @default ['bottom left', 'bottom right', 'top left', 'top right']\n */\n positions?: PopupPositionsType[];\n menuMaxHeight?: number | string;\n /**\n * Не показывать анимацию\n */\n disableAnimations?: boolean;\n /**\n * Кастомная иконка\n */\n icon?: React.ReactNode;\n /**\n * Атрибут для указания id элемента(-ов), описывающих его\n */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n}\n\nexport const KebabDataTids = {\n caption: 'Kebab__caption',\n} as const;\n\nexport interface KebabState {\n anchor: Nullable<HTMLElement>;\n focusedByTab: boolean;\n}\n\ntype DefaultProps = Required<Pick<KebabProps, 'onOpen' | 'onClose' | 'positions' | 'size' | 'disableAnimations'>>;\n\n@rootNode\nexport class Kebab extends React.Component<KebabProps, KebabState> {\n public static __KONTUR_REACT_UI__ = 'Kebab';\n public static displayName = 'Kebab';\n\n public static propTypes = {};\n\n public static defaultProps: DefaultProps = {\n onOpen: () => undefined,\n onClose: () => undefined,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n size: 'small',\n disableAnimations: isTestEnv,\n };\n\n private getProps = createPropsGetter(Kebab.defaultProps);\n\n public state: KebabState = {\n focusedByTab: false,\n anchor: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n private listener: {\n remove: () => void;\n } = {\n remove: () => undefined,\n };\n\n public componentDidMount() {\n /** addListener'у нужен колбэк в аргумент */\n this.listener = LayoutEvents.addListener(() => undefined);\n }\n\n public componentWillUnmount() {\n this.listener.remove();\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.kebabPinOffset,\n popupMargin: theme.kebabMargin,\n popupPinSize: theme.kebabPinSize,\n menuScrollContainerContentWrapperPaddingY: theme.menuLegacyPaddingY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { disabled } = this.props;\n const { positions, disableAnimations, onOpen, onClose } = this.getProps();\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n const hasPin = !getFullReactUIFlagsContext(flags).kebabHintRemovePin || !isTheme2022(this.theme);\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...this.props}\n {...getVisualStateDataAttributes({ disabled })}\n >\n <PopupMenu\n popupHasPin={hasPin}\n preventIconsOffset={this.props.preventIconsOffset}\n positions={positions}\n onChangeMenuState={this.handleChangeMenuState}\n caption={this.renderCaption}\n disableAnimations={disableAnimations}\n menuMaxHeight={this.props.menuMaxHeight}\n onOpen={onOpen}\n onClose={onClose}\n popupMenuId={this.props.popupMenuId}\n aria-label={this.props['aria-label']}\n >\n {!disabled && this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n private renderCaption = (captionProps: PopupMenuCaptionProps) => {\n const { disabled, size } = this.getProps();\n const handleCaptionKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled) {\n this.handleCaptionKeyDown(event, captionProps.openMenu);\n }\n };\n\n const handleCaptionClick = () => {\n if (!disabled) {\n captionProps.toggleMenu();\n }\n };\n\n return (\n <span\n role=\"button\"\n data-tid={KebabDataTids.caption}\n tabIndex={disabled ? -1 : 0}\n onClick={handleCaptionClick}\n onKeyDown={handleCaptionKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n className={cx(\n styles.kebab(this.theme),\n size === 'small' && styles.kebabSmall(this.theme),\n size === 'medium' && styles.kebabMedium(this.theme),\n size === 'large' && styles.kebabLarge(this.theme),\n isTheme2022(this.theme) && styles.kebab2022(),\n captionProps.opened && styles.opened(this.theme),\n disabled && styles.disabled(),\n this.state.focusedByTab && styles.focused(this.theme),\n )}\n aria-describedby={this.props['aria-describedby']}\n >\n {isTheme2022(this.theme) ? this.renderIcon2022() : this.renderIcon()}\n </span>\n );\n };\n\n private handleCaptionKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n openMenu: PopupMenuCaptionProps['openMenu'],\n ) => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n private handleChangeMenuState = (isOpened: boolean, restoreFocus: boolean): void => {\n this.setState({\n focusedByTab: !isOpened && restoreFocus,\n });\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n });\n };\n\n private renderIcon() {\n const { size, icon = <MenuKebabIcon /> } = this.getProps();\n return (\n <div\n className={cx({\n [styles.icon(this.theme)]: true,\n [styles.iconsmall(this.theme)]: size === 'small',\n [styles.iconmedium(this.theme)]: size === 'medium',\n [styles.iconlarge(this.theme)]: size === 'large',\n })}\n >\n {icon}\n </div>\n );\n }\n\n private renderIcon2022() {\n const { size, icon = <KebabIcon /> } = this.getProps();\n\n if (isElement(icon) && isKonturIcon(icon)) {\n const sizes: Record<SizeProp, number> = {\n small: parseInt(this.theme.kebabIconSizeSmall),\n medium: parseInt(this.theme.kebabIconSizeMedium),\n large: parseInt(this.theme.kebabIconSizeLarge),\n };\n\n return React.cloneElement(icon, {\n size: icon.props.size ?? sizes[size],\n color: icon.props.color ?? this.theme.kebabIconColor,\n });\n }\n\n return icon;\n }\n}\n\nKebab.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n menuMaxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Размер кебаба small 14px | large 20px\n */\n size: PropTypes.string,\n\n /**\n * Коллбек, вызывающийся перед закрытием кебаба\n */\n onClose: PropTypes.func,\n\n /**\n * Коллбек, вызывающийся перед открытием кебаба\n */\n onOpen: PropTypes.func,\n};\n"]}
@@ -15,6 +15,7 @@ var _ThemeFactory = require("../../lib/theming/ThemeFactory");
15
15
  var _ThemeHelpers = require("../../lib/theming/ThemeHelpers");
16
16
  var _client = require("../../lib/client");
17
17
  var _featureFlagsContext = require("../../lib/featureFlagsContext");
18
+ var _getVisualStateDataAttributes = require("../../internal/CommonWrapper/utils/getVisualStateDataAttributes");
18
19
 
19
20
  var _Link = require("./Link.styles");
20
21
  var _LinkIcon = require("./LinkIcon");var _excluded = ["disabled", "href", "icon", "rightIcon", "use", "loading", "_button", "_buttonOpened", "rel", "as", "focused"];var _class, _class2, _temp;
@@ -225,7 +226,7 @@ Link = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function
225
226
  }
226
227
 
227
228
  return /*#__PURE__*/(
228
- _react.default.createElement(Component, (0, _extends2.default)({ "data-tid": LinkDataTids.root }, rest, linkProps),
229
+ _react.default.createElement(Component, (0, _extends2.default)({ "data-tid": LinkDataTids.root }, rest, linkProps, (0, _getVisualStateDataAttributes.getVisualStateDataAttributes)({ disabled: disabled })),
229
230
  leftIconElement,
230
231
  child,
231
232
  rightIconElement,
@@ -1 +1 @@
1
- {"version":3,"sources":["Link.tsx"],"names":["LinkDataTids","root","Link","rootNode","getProps","defaultProps","state","focusedByTab","renderMain","props","disabled","href","icon","rightIcon","use","loading","_button","_buttonOpened","relOrigin","rel","Component","as","focused","rest","_isTheme2022","theme","arrow","styles","isFocused","leftIconElement","rightIconElement","linkProps","className","useRoot","useDefault","useSuccess","useDanger","useGrayed","button","buttonOpened","getLinkClassName","Boolean","onClick","handleClick","onFocus","handleFocus","onBlur","handleBlur","tabIndex","child","children","globalClasses","textWrapper","lineTextWrapper","lineTextWrapperFocused","text","lineText","isIE11","lineTextIE11","globalObject","requestAnimationFrame","keyListener","isTabPressed","setState","event","preventDefault","render","flags","linkFocusOutline","ThemeFactory","create","setRootNode","isBorderBottom","parseInt","linkLineBorderBottomWidth","focus","useGrayedFocus","lineRoot","disabledDark22Theme","lineFocus","lineFocusSuccess","lineFocusDanger","lineFocusGrayed","focus2022","React","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","bool","string","node","oneOf"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { isExternalLink } from '../../lib/utils';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter, DefaultizedProps } from '../../lib/createPropsGetter';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { isDarkTheme, isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { isIE11 } from '../../lib/client';\nimport { ReactUIFeatureFlagsContext, getFullReactUIFlagsContext } from '../../lib/featureFlagsContext';\n\nimport { globalClasses, styles } from './Link.styles';\nimport { LinkIcon } from './LinkIcon';\n\nexport interface LinkProps\n extends Pick<AriaAttributes, 'aria-label'>,\n CommonProps,\n Override<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n {\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * HTML-атрибут `href`.\n */\n href?: string;\n /**\n * Добавляет ссылке иконку слева.\n */\n icon?: React.ReactElement;\n /**\n * Добавляет ссылке иконку справа.\n */\n rightIcon?: React.ReactElement;\n /**\n * Тема ссылки.\n */\n use?: 'default' | 'success' | 'danger' | 'grayed';\n /**\n * @ignore\n */\n _button?: boolean;\n /**\n * @ignore\n */\n _buttonOpened?: boolean;\n /**\n * HTML-атрибут `tabindex`.\n */\n tabIndex?: number;\n /**\n * Переводит ссылку в состояние загрузки.\n */\n loading?: boolean;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n\n /**\n * Обычный объект с переменными темы.\n * Он будет объединён с темой из контекста.\n */\n theme?: ThemeIn;\n /**\n * Компонент, используемый в качестве корневого узла.\n * @ignore\n */\n as?: React.ElementType | keyof React.ReactHTML;\n /**\n * @ignore\n */\n focused?: boolean;\n }\n > {}\n\nexport interface LinkState {\n focusedByTab: boolean;\n}\n\nexport const LinkDataTids = {\n root: 'Link__root',\n} as const;\n\ntype DefaultProps = Required<Pick<LinkProps, 'href' | 'use' | 'as'>>;\ntype DefaultizedLinkProps = DefaultizedProps<LinkProps, DefaultProps>;\n\n/**\n * Элемент ссылки из HTML.\n */\n@rootNode\nexport class Link extends React.Component<LinkProps, LinkState> {\n public static __KONTUR_REACT_UI__ = 'Link';\n public static displayName = 'Link';\n\n public static propTypes = {\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n use: PropTypes.oneOf(['default', 'success', 'danger', 'grayed']),\n };\n\n public static defaultProps: DefaultProps = {\n href: '',\n use: 'default',\n as: 'a',\n };\n\n private getProps = createPropsGetter(Link.defaultProps);\n\n public state: LinkState = {\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n private linkFocusOutline?: boolean;\n\n public render(): JSX.Element {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.linkFocusOutline = getFullReactUIFlagsContext(flags).linkFocusOutline;\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = this.props.theme ? ThemeFactory.create(this.props.theme as Theme, theme) : theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.getProps()}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n private renderMain = (props: CommonWrapperRestProps<DefaultizedLinkProps>) => {\n const {\n disabled,\n href,\n icon,\n rightIcon,\n use,\n loading,\n _button,\n _buttonOpened,\n rel: relOrigin,\n as: Component,\n focused = false,\n ...rest\n } = props;\n const _isTheme2022 = isTheme2022(this.theme);\n\n let arrow = null;\n if (_button) {\n arrow = <span className={styles.arrow()} />;\n }\n\n let rel = relOrigin;\n if (typeof rel === 'undefined' && href) {\n rel = `noopener${isExternalLink(href) ? ' noreferrer' : ''}`;\n }\n\n const isFocused = !disabled && (this.state.focusedByTab || focused);\n\n const leftIconElement = icon && <LinkIcon icon={icon} loading={loading} position=\"left\" />;\n const rightIconElement = rightIcon && (\n <LinkIcon hasBothIcons={!!icon && !!rightIcon} icon={rightIcon} loading={loading} position=\"right\" />\n );\n\n const linkProps = {\n className: cx(\n styles.useRoot(),\n use === 'default' && styles.useDefault(this.theme),\n use === 'success' && styles.useSuccess(this.theme),\n use === 'danger' && styles.useDanger(this.theme),\n use === 'grayed' && styles.useGrayed(this.theme),\n !!_button && styles.button(this.theme),\n !!_buttonOpened && styles.buttonOpened(this.theme),\n this.getLinkClassName(isFocused, Boolean(disabled || loading), _isTheme2022),\n ),\n href,\n rel,\n onClick: this.handleClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n tabIndex: disabled || loading ? -1 : this.props.tabIndex,\n };\n\n let child = this.props.children;\n if (_isTheme2022) {\n // lineTextWrapper нужен для реализации transition у подчеркивания\n child = (\n <span\n className={cx(globalClasses.textWrapper, styles.lineTextWrapper(this.theme), {\n [styles.lineTextWrapperFocused(this.theme)]: isFocused,\n })}\n >\n <span\n className={cx(globalClasses.text, {\n [styles.lineText(this.theme)]: !isIE11,\n [styles.lineTextIE11(this.theme)]: isIE11,\n })}\n >\n {this.props.children}\n </span>\n </span>\n );\n }\n\n return (\n <Component data-tid={LinkDataTids.root} {...rest} {...linkProps}>\n {leftIconElement}\n {child}\n {rightIconElement}\n {arrow}\n </Component>\n );\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({ focusedByTab: false });\n };\n\n private handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n const { onClick, disabled, loading } = this.props;\n const href = this.getProps().href;\n if (!href) {\n event.preventDefault();\n }\n if (onClick && !disabled && !loading) {\n onClick(event);\n }\n };\n\n private getLinkClassName(focused: boolean, disabled: boolean, _isTheme2022: boolean): string {\n const { use } = this.getProps();\n const isBorderBottom = parseInt(this.theme.linkLineBorderBottomWidth) > 0;\n const isFocused = focused && !disabled;\n\n return !isBorderBottom\n ? cx(\n styles.root(this.theme),\n isFocused && styles.focus(this.theme),\n disabled && styles.disabled(this.theme),\n use === 'grayed' && focused && styles.useGrayedFocus(this.theme),\n )\n : cx(\n styles.lineRoot(),\n disabled && styles.disabled(this.theme),\n disabled && _isTheme2022 && isDarkTheme(this.theme) && styles.disabledDark22Theme(this.theme),\n isFocused && use === 'default' && styles.lineFocus(this.theme),\n isFocused && use === 'success' && styles.lineFocusSuccess(this.theme),\n isFocused && use === 'danger' && styles.lineFocusDanger(this.theme),\n isFocused && use === 'grayed' && styles.lineFocusGrayed(this.theme),\n isFocused && _isTheme2022 && this.linkFocusOutline && styles.focus2022(this.theme),\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["Link.tsx"],"names":["LinkDataTids","root","Link","rootNode","getProps","defaultProps","state","focusedByTab","renderMain","props","disabled","href","icon","rightIcon","use","loading","_button","_buttonOpened","relOrigin","rel","Component","as","focused","rest","_isTheme2022","theme","arrow","styles","isFocused","leftIconElement","rightIconElement","linkProps","className","useRoot","useDefault","useSuccess","useDanger","useGrayed","button","buttonOpened","getLinkClassName","Boolean","onClick","handleClick","onFocus","handleFocus","onBlur","handleBlur","tabIndex","child","children","globalClasses","textWrapper","lineTextWrapper","lineTextWrapperFocused","text","lineText","isIE11","lineTextIE11","globalObject","requestAnimationFrame","keyListener","isTabPressed","setState","event","preventDefault","render","flags","linkFocusOutline","ThemeFactory","create","setRootNode","isBorderBottom","parseInt","linkLineBorderBottomWidth","focus","useGrayedFocus","lineRoot","disabledDark22Theme","lineFocus","lineFocusSuccess","lineFocusDanger","lineFocusGrayed","focus2022","React","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","bool","string","node","oneOf"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { isExternalLink } from '../../lib/utils';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter, DefaultizedProps } from '../../lib/createPropsGetter';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { isDarkTheme, isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { isIE11 } from '../../lib/client';\nimport { ReactUIFeatureFlagsContext, getFullReactUIFlagsContext } from '../../lib/featureFlagsContext';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { globalClasses, styles } from './Link.styles';\nimport { LinkIcon } from './LinkIcon';\n\nexport interface LinkProps\n extends Pick<AriaAttributes, 'aria-label'>,\n CommonProps,\n Override<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n {\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * HTML-атрибут `href`.\n */\n href?: string;\n /**\n * Добавляет ссылке иконку слева.\n */\n icon?: React.ReactElement;\n /**\n * Добавляет ссылке иконку справа.\n */\n rightIcon?: React.ReactElement;\n /**\n * Тема ссылки.\n */\n use?: 'default' | 'success' | 'danger' | 'grayed';\n /**\n * @ignore\n */\n _button?: boolean;\n /**\n * @ignore\n */\n _buttonOpened?: boolean;\n /**\n * HTML-атрибут `tabindex`.\n */\n tabIndex?: number;\n /**\n * Переводит ссылку в состояние загрузки.\n */\n loading?: boolean;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n\n /**\n * Обычный объект с переменными темы.\n * Он будет объединён с темой из контекста.\n */\n theme?: ThemeIn;\n /**\n * Компонент, используемый в качестве корневого узла.\n * @ignore\n */\n as?: React.ElementType | keyof React.ReactHTML;\n /**\n * @ignore\n */\n focused?: boolean;\n }\n > {}\n\nexport interface LinkState {\n focusedByTab: boolean;\n}\n\nexport const LinkDataTids = {\n root: 'Link__root',\n} as const;\n\ntype DefaultProps = Required<Pick<LinkProps, 'href' | 'use' | 'as'>>;\ntype DefaultizedLinkProps = DefaultizedProps<LinkProps, DefaultProps>;\n\n/**\n * Элемент ссылки из HTML.\n */\n@rootNode\nexport class Link extends React.Component<LinkProps, LinkState> {\n public static __KONTUR_REACT_UI__ = 'Link';\n public static displayName = 'Link';\n\n public static propTypes = {\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n use: PropTypes.oneOf(['default', 'success', 'danger', 'grayed']),\n };\n\n public static defaultProps: DefaultProps = {\n href: '',\n use: 'default',\n as: 'a',\n };\n\n private getProps = createPropsGetter(Link.defaultProps);\n\n public state: LinkState = {\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n private linkFocusOutline?: boolean;\n\n public render(): JSX.Element {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.linkFocusOutline = getFullReactUIFlagsContext(flags).linkFocusOutline;\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = this.props.theme ? ThemeFactory.create(this.props.theme as Theme, theme) : theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.getProps()}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n private renderMain = (props: CommonWrapperRestProps<DefaultizedLinkProps>) => {\n const {\n disabled,\n href,\n icon,\n rightIcon,\n use,\n loading,\n _button,\n _buttonOpened,\n rel: relOrigin,\n as: Component,\n focused = false,\n ...rest\n } = props;\n const _isTheme2022 = isTheme2022(this.theme);\n\n let arrow = null;\n if (_button) {\n arrow = <span className={styles.arrow()} />;\n }\n\n let rel = relOrigin;\n if (typeof rel === 'undefined' && href) {\n rel = `noopener${isExternalLink(href) ? ' noreferrer' : ''}`;\n }\n\n const isFocused = !disabled && (this.state.focusedByTab || focused);\n\n const leftIconElement = icon && <LinkIcon icon={icon} loading={loading} position=\"left\" />;\n const rightIconElement = rightIcon && (\n <LinkIcon hasBothIcons={!!icon && !!rightIcon} icon={rightIcon} loading={loading} position=\"right\" />\n );\n\n const linkProps = {\n className: cx(\n styles.useRoot(),\n use === 'default' && styles.useDefault(this.theme),\n use === 'success' && styles.useSuccess(this.theme),\n use === 'danger' && styles.useDanger(this.theme),\n use === 'grayed' && styles.useGrayed(this.theme),\n !!_button && styles.button(this.theme),\n !!_buttonOpened && styles.buttonOpened(this.theme),\n this.getLinkClassName(isFocused, Boolean(disabled || loading), _isTheme2022),\n ),\n href,\n rel,\n onClick: this.handleClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n tabIndex: disabled || loading ? -1 : this.props.tabIndex,\n };\n\n let child = this.props.children;\n if (_isTheme2022) {\n // lineTextWrapper нужен для реализации transition у подчеркивания\n child = (\n <span\n className={cx(globalClasses.textWrapper, styles.lineTextWrapper(this.theme), {\n [styles.lineTextWrapperFocused(this.theme)]: isFocused,\n })}\n >\n <span\n className={cx(globalClasses.text, {\n [styles.lineText(this.theme)]: !isIE11,\n [styles.lineTextIE11(this.theme)]: isIE11,\n })}\n >\n {this.props.children}\n </span>\n </span>\n );\n }\n\n return (\n <Component data-tid={LinkDataTids.root} {...rest} {...linkProps} {...getVisualStateDataAttributes({ disabled })}>\n {leftIconElement}\n {child}\n {rightIconElement}\n {arrow}\n </Component>\n );\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({ focusedByTab: false });\n };\n\n private handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n const { onClick, disabled, loading } = this.props;\n const href = this.getProps().href;\n if (!href) {\n event.preventDefault();\n }\n if (onClick && !disabled && !loading) {\n onClick(event);\n }\n };\n\n private getLinkClassName(focused: boolean, disabled: boolean, _isTheme2022: boolean): string {\n const { use } = this.getProps();\n const isBorderBottom = parseInt(this.theme.linkLineBorderBottomWidth) > 0;\n const isFocused = focused && !disabled;\n\n return !isBorderBottom\n ? cx(\n styles.root(this.theme),\n isFocused && styles.focus(this.theme),\n disabled && styles.disabled(this.theme),\n use === 'grayed' && focused && styles.useGrayedFocus(this.theme),\n )\n : cx(\n styles.lineRoot(),\n disabled && styles.disabled(this.theme),\n disabled && _isTheme2022 && isDarkTheme(this.theme) && styles.disabledDark22Theme(this.theme),\n isFocused && use === 'default' && styles.lineFocus(this.theme),\n isFocused && use === 'success' && styles.lineFocusSuccess(this.theme),\n isFocused && use === 'danger' && styles.lineFocusDanger(this.theme),\n isFocused && use === 'grayed' && styles.lineFocusGrayed(this.theme),\n isFocused && _isTheme2022 && this.linkFocusOutline && styles.focus2022(this.theme),\n );\n }\n}\n"]}
@@ -14,7 +14,7 @@ var _rootNode = require("../../lib/rootNode");
14
14
 
15
15
  var _MenuContext = require("../../internal/Menu/MenuContext");
16
16
  var _featureFlagsContext = require("../../lib/featureFlagsContext");
17
- var _getVisualStateDataAttributes = require("../../internal/CommonWrapper/getVisualStateDataAttributes");
17
+ var _getVisualStateDataAttributes = require("../../internal/CommonWrapper/utils/getVisualStateDataAttributes");
18
18
 
19
19
  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;
20
20
 
@@ -1 +1 @@
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","iconElement","top","styles","theme","getIconSizeClassName","className","getRootSizeClassName","rootMobile","hover","isHover","selected","isSelected","getWithIconSizeClassName","Boolean","context","enableIconPadding","children","Component","getComponent","setRootRef","activeState","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__","displayName","__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';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/getVisualStateDataAttributes';\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 displayName = '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\n rootNodeRef={this.setRootNode}\n {...getVisualStateDataAttributes({\n hover: this.isHover,\n selected: this.isSelected,\n })}\n {...this.props}\n >\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 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)]: this.isHover,\n [styles.selected(this.theme)]: this.isSelected,\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.activeState}\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)]: this.isHover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n private get activeState() {\n return this.state.highlighted ? 'hover' : this.props.state;\n }\n\n private get isHover(): boolean {\n return (this.state.highlighted || this.props.state === 'hover') && !this.props.disabled;\n }\n\n private get isSelected(): boolean {\n return this.props.state === 'selected' && !this.state.highlighted;\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"]}
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","iconElement","top","styles","theme","getIconSizeClassName","className","getRootSizeClassName","rootMobile","hover","isHover","selected","isSelected","getWithIconSizeClassName","Boolean","context","enableIconPadding","children","Component","getComponent","setRootRef","activeState","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__","displayName","__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';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\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 displayName = '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\n rootNodeRef={this.setRootNode}\n {...getVisualStateDataAttributes({\n hover: this.isHover,\n selected: this.isSelected,\n })}\n {...this.props}\n >\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 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)]: this.isHover,\n [styles.selected(this.theme)]: this.isSelected,\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.activeState}\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)]: this.isHover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n private get activeState() {\n return this.state.highlighted ? 'hover' : this.props.state;\n }\n\n private get isHover(): boolean {\n return (this.state.highlighted || this.props.state === 'hover') && !this.props.disabled;\n }\n\n private get isSelected(): boolean {\n return this.props.state === 'selected' && !this.state.highlighted;\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"]}
@@ -17,7 +17,7 @@ var _Emotion = require("../../lib/theming/Emotion");
17
17
  var _rootNode = require("../../lib/rootNode");
18
18
  var _createPropsGetter = require("../../lib/createPropsGetter");
19
19
  var _ThemeHelpers = require("../../lib/theming/ThemeHelpers");
20
- var _getVisualStateDataAttributes = require("../../internal/CommonWrapper/getVisualStateDataAttributes");
20
+ var _getVisualStateDataAttributes = require("../../internal/CommonWrapper/utils/getVisualStateDataAttributes");
21
21
 
22
22
  var _Paging = require("./Paging.styles");
23
23
  var NavigationHelper = _interopRequireWildcard(require("./NavigationHelper"));
@@ -183,6 +183,10 @@ Paging = (_dec = (0, _decorators.locale)('Paging', _locale.PagingLocaleHelper),
183
183
 
184
184
 
185
185
 
186
+
187
+
188
+
189
+
186
190
 
187
191
 
188
192
 
@@ -243,7 +247,7 @@ Paging = (_dec = (0, _decorators.locale)('Paging', _locale.PagingLocaleHelper),
243
247
 
244
248
 
245
249
  return /*#__PURE__*/(
246
- _react.default.createElement(Component, {
250
+ _react.default.createElement(Component, (0, _extends2.default)({
247
251
  key: 'forward',
248
252
  "data-tid": PagingDataTids.forwardLink,
249
253
  active: false,
@@ -251,6 +255,7 @@ Paging = (_dec = (0, _decorators.locale)('Paging', _locale.PagingLocaleHelper),
251
255
  onClick: disabled ? _utils.emptyHandler : _this.goForward,
252
256
  tabIndex: -1,
253
257
  pageNumber: 'forward' },
258
+ (0, _getVisualStateDataAttributes.getVisualStateDataAttributes)({ disabled: disabled })),
254
259
 
255
260
  _this.props.caption || forward,
256
261
  forwardIcon));
@@ -492,7 +497,7 @@ Paging = (_dec = (0, _decorators.locale)('Paging', _locale.PagingLocaleHelper),
492
497
 
493
498
  refContainer = function (element) {
494
499
  _this.container = element;
495
- };return _this;}Paging.isForward = function isForward(pageNumber) /* %checks */{return pageNumber === 'forward';};var _proto = Paging.prototype;_proto.componentDidMount = function componentDidMount() {var useGlobalListener = this.getProps().useGlobalListener;if (useGlobalListener) {this.addGlobalListener();}};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var useGlobalListener = this.getProps().useGlobalListener;if (!prevProps.useGlobalListener && useGlobalListener) {this.addGlobalListener();}if (prevProps.useGlobalListener && !useGlobalListener) {this.removeGlobalListener();}if (prevProps.useGlobalListener !== useGlobalListener) {this.setState({ keyboardControl: useGlobalListener });}};_proto.componentWillUnmount = function componentWillUnmount() {this.removeGlobalListener();};_proto.render = function render() {var _this2 = this;if (this.props.pagesCount < 2 && !this.getProps().shouldBeVisibleWithLessThanTwoPages) {return null;}return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _cx4;var _this$getProps = this.getProps(),dataTid = _this$getProps['data-tid'],useGlobalListener = _this$getProps.useGlobalListener;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement("span", { tabIndex: this.props.disabled ? -1 : 0, "data-tid": dataTid, className: (0, _Emotion.cx)((_cx4 = {}, _cx4[_Paging.styles.paging(this.theme)] = true, _cx4[_Paging.styles.pagingDisabled()] = this.props.disabled, _cx4)), onKeyDown: useGlobalListener ? undefined : this.handleKeyDown, onFocus: this.handleFocus, onBlur: this.handleBlur, onMouseDown: this.handleMouseDown, ref: this.refContainer }, this.getItems().map(this.renderItem)));};return Paging;}(_react.default.PureComponent), _class2.__KONTUR_REACT_UI__ = 'Paging', _class2.displayName = 'Paging', _class2.defaultProps = { component: _PagingDefaultComponent.PagingDefaultComponent, shouldBeVisibleWithLessThanTwoPages: true, useGlobalListener: false, 'data-tid': PagingDataTids.root }, _class2.propTypes = {}, _temp)) || _class) || _class);exports.Paging = Paging;
500
+ };return _this;}Paging.isForward = function isForward(pageNumber) /* %checks */{return pageNumber === 'forward';};var _proto = Paging.prototype;_proto.componentDidMount = function componentDidMount() {var useGlobalListener = this.getProps().useGlobalListener;if (useGlobalListener) {this.addGlobalListener();}};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var useGlobalListener = this.getProps().useGlobalListener;if (!prevProps.useGlobalListener && useGlobalListener) {this.addGlobalListener();}if (prevProps.useGlobalListener && !useGlobalListener) {this.removeGlobalListener();}if (prevProps.useGlobalListener !== useGlobalListener) {this.setState({ keyboardControl: useGlobalListener });}};_proto.componentWillUnmount = function componentWillUnmount() {this.removeGlobalListener();};_proto.render = function render() {var _this2 = this;if (this.props.pagesCount < 2 && !this.getProps().shouldBeVisibleWithLessThanTwoPages) {return null;}return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _cx4;var _this$getProps = this.getProps(),dataTid = _this$getProps['data-tid'],useGlobalListener = _this$getProps.useGlobalListener;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props, (0, _getVisualStateDataAttributes.getVisualStateDataAttributes)({ disabled: this.props.disabled })), /*#__PURE__*/_react.default.createElement("span", { tabIndex: this.props.disabled ? -1 : 0, "data-tid": dataTid, className: (0, _Emotion.cx)((_cx4 = {}, _cx4[_Paging.styles.paging(this.theme)] = true, _cx4[_Paging.styles.pagingDisabled()] = this.props.disabled, _cx4)), onKeyDown: useGlobalListener ? undefined : this.handleKeyDown, onFocus: this.handleFocus, onBlur: this.handleBlur, onMouseDown: this.handleMouseDown, ref: this.refContainer }, this.getItems().map(this.renderItem)));};return Paging;}(_react.default.PureComponent), _class2.__KONTUR_REACT_UI__ = 'Paging', _class2.displayName = 'Paging', _class2.defaultProps = { component: _PagingDefaultComponent.PagingDefaultComponent, shouldBeVisibleWithLessThanTwoPages: true, useGlobalListener: false, 'data-tid': PagingDataTids.root }, _class2.propTypes = {}, _temp)) || _class) || _class);exports.Paging = Paging;
496
501
 
497
502
 
498
503
  Paging.propTypes = {