@skbkontur/react-ui 3.11.0-select-right-2 → 3.12.1

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 +29 -0
  2. package/LICENSE +21 -21
  3. package/cjs/components/CurrencyLabel/CurrencyLabel.md +23 -23
  4. package/cjs/components/Gapped/Gapped.md +43 -43
  5. package/cjs/components/Input/Input.md +13 -13
  6. package/cjs/components/PasswordInput/PasswordInput.md +9 -9
  7. package/cjs/components/RadioGroup/RadioGroup.md +43 -43
  8. package/cjs/components/Select/Select.js +2 -1
  9. package/cjs/components/Select/Select.js.map +1 -1
  10. package/cjs/components/SidePage/SidePage.d.ts +4 -1
  11. package/cjs/components/SidePage/SidePage.js +18 -9
  12. package/cjs/components/SidePage/SidePage.js.map +1 -1
  13. package/cjs/components/SidePage/SidePageContext.d.ts +2 -0
  14. package/cjs/components/SidePage/SidePageContext.js +3 -0
  15. package/cjs/components/SidePage/SidePageContext.js.map +1 -1
  16. package/cjs/components/SidePage/SidePageHeader.d.ts +3 -0
  17. package/cjs/components/SidePage/SidePageHeader.js +26 -8
  18. package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
  19. package/cjs/components/Sticky/Sticky.d.ts +6 -1
  20. package/cjs/components/Sticky/Sticky.js +5 -0
  21. package/cjs/components/Sticky/Sticky.js.map +1 -1
  22. package/cjs/components/Token/Token.md +112 -112
  23. package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
  24. package/cjs/internal/DropdownContainer/DropdownContainer.js +1 -1
  25. package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
  26. package/cjs/internal/Menu/Menu.js +29 -23
  27. package/cjs/internal/Menu/Menu.js.map +1 -1
  28. package/cjs/internal/Menu/Menu.styles.d.ts +1 -1
  29. package/cjs/internal/Menu/Menu.styles.js +3 -2
  30. package/cjs/internal/Menu/Menu.styles.js.map +1 -1
  31. package/cjs/internal/Popup/Popup.js +3 -1
  32. package/cjs/internal/Popup/Popup.js.map +1 -1
  33. package/cjs/internal/ThemeShowcase/ThemeShowcase.md +13 -13
  34. package/components/CurrencyLabel/CurrencyLabel.md +23 -23
  35. package/components/Gapped/Gapped.md +43 -43
  36. package/components/Input/Input.md +13 -13
  37. package/components/PasswordInput/PasswordInput.md +9 -9
  38. package/components/RadioGroup/RadioGroup.md +43 -43
  39. package/components/Select/Select/Select.js +2 -1
  40. package/components/Select/Select/Select.js.map +1 -1
  41. package/components/SidePage/SidePage/SidePage.js +20 -13
  42. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  43. package/components/SidePage/SidePage.d.ts +4 -1
  44. package/components/SidePage/SidePageContext/SidePageContext.js +3 -0
  45. package/components/SidePage/SidePageContext/SidePageContext.js.map +1 -1
  46. package/components/SidePage/SidePageContext.d.ts +2 -0
  47. package/components/SidePage/SidePageHeader/SidePageHeader.js +21 -2
  48. package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
  49. package/components/SidePage/SidePageHeader.d.ts +3 -0
  50. package/components/Sticky/Sticky/Sticky.js.map +1 -1
  51. package/components/Sticky/Sticky.d.ts +6 -1
  52. package/components/Token/Token.md +112 -112
  53. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +1 -1
  54. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
  55. package/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
  56. package/internal/Menu/Menu/Menu.js +28 -13
  57. package/internal/Menu/Menu/Menu.js.map +1 -1
  58. package/internal/Menu/Menu.styles/Menu.styles.js +2 -2
  59. package/internal/Menu/Menu.styles/Menu.styles.js.map +1 -1
  60. package/internal/Menu/Menu.styles.d.ts +1 -1
  61. package/internal/Popup/Popup/Popup.js +2 -1
  62. package/internal/Popup/Popup/Popup.js.map +1 -1
  63. package/internal/ThemeShowcase/ThemeShowcase.md +13 -13
  64. package/package.json +6 -2
@@ -1,112 +1,112 @@
1
- Token example
2
-
3
- ```jsx harmony
4
- import { Token } from '@skbkontur/react-ui';
5
-
6
- <Token>Example</Token>;
7
- ```
8
-
9
- You can control color of each token
10
-
11
- ```jsx harmony
12
- import { Gapped, Token } from '@skbkontur/react-ui';
13
-
14
- const colors = {
15
- default: {
16
- idle: 'defaultIdle',
17
- active: 'defaultActive',
18
- },
19
- gray: {
20
- idle: 'grayIdle',
21
- active: 'grayActive',
22
- },
23
- blue: {
24
- idle: 'blueIdle',
25
- active: 'blueActive',
26
- },
27
- green: {
28
- idle: 'greenIdle',
29
- active: 'greenActive',
30
- },
31
- yellow: {
32
- idle: 'yellowIdle',
33
- active: 'yellowActive',
34
- },
35
- red: {
36
- idle: 'redIdle',
37
- active: 'redActive',
38
- },
39
- mono: {
40
- idle: 'white',
41
- active: 'black',
42
- },
43
- };
44
-
45
- <Gapped gap={20} vertical>
46
- <Gapped gap={10}>
47
- <Token colors={colors.default}>Default</Token>
48
- <Token isActive colors={colors.default}>
49
- Default
50
- </Token>
51
- </Gapped>
52
- <Gapped gap={10}>
53
- <Token colors={colors.gray}>Gray</Token>
54
- <Token isActive colors={colors.gray}>
55
- Gray
56
- </Token>
57
- </Gapped>
58
- <Gapped gap={10}>
59
- <Token colors={colors.blue}>Blue</Token>
60
- <Token isActive colors={colors.blue}>
61
- Blue
62
- </Token>
63
- </Gapped>
64
- <Gapped gap={10}>
65
- <Token colors={colors.green}>Green</Token>
66
- <Token isActive colors={colors.green}>
67
- Green
68
- </Token>
69
- </Gapped>
70
- <Gapped gap={10}>
71
- <Token colors={colors.yellow}>Yellow</Token>
72
- <Token isActive colors={colors.yellow}>
73
- Yellow
74
- </Token>
75
- </Gapped>
76
- <Gapped gap={10}>
77
- <Token colors={colors.red}>Red</Token>
78
- <Token isActive colors={colors.red}>
79
- Red
80
- </Token>
81
- </Gapped>
82
- <Gapped gap={10}>
83
- <Token colors={colors.mono}>Monochrome</Token>
84
- <Token isActive colors={colors.mono}>
85
- Monochrome
86
- </Token>
87
- </Gapped>
88
- </Gapped>;
89
- ```
90
-
91
- Can accept validation state
92
-
93
- ```jsx harmony
94
- import { Gapped, Token } from '@skbkontur/react-ui';
95
-
96
- <Gapped gap={20} vertical>
97
- <Gapped gap={10}>
98
- <Token>Correct</Token>
99
- <Token warning>Warned</Token>
100
- <Token error>Errored</Token>
101
- </Gapped>
102
- <Gapped gap={10}>
103
- <Token isActive>Correct</Token>
104
- <Token isActive warning>
105
- Warned
106
- </Token>
107
- <Token isActive error>
108
- Errored
109
- </Token>
110
- </Gapped>
111
- </Gapped>;
112
- ```
1
+ Token example
2
+
3
+ ```jsx harmony
4
+ import { Token } from '@skbkontur/react-ui';
5
+
6
+ <Token>Example</Token>;
7
+ ```
8
+
9
+ You can control color of each token
10
+
11
+ ```jsx harmony
12
+ import { Gapped, Token } from '@skbkontur/react-ui';
13
+
14
+ const colors = {
15
+ default: {
16
+ idle: 'defaultIdle',
17
+ active: 'defaultActive',
18
+ },
19
+ gray: {
20
+ idle: 'grayIdle',
21
+ active: 'grayActive',
22
+ },
23
+ blue: {
24
+ idle: 'blueIdle',
25
+ active: 'blueActive',
26
+ },
27
+ green: {
28
+ idle: 'greenIdle',
29
+ active: 'greenActive',
30
+ },
31
+ yellow: {
32
+ idle: 'yellowIdle',
33
+ active: 'yellowActive',
34
+ },
35
+ red: {
36
+ idle: 'redIdle',
37
+ active: 'redActive',
38
+ },
39
+ mono: {
40
+ idle: 'white',
41
+ active: 'black',
42
+ },
43
+ };
44
+
45
+ <Gapped gap={20} vertical>
46
+ <Gapped gap={10}>
47
+ <Token colors={colors.default}>Default</Token>
48
+ <Token isActive colors={colors.default}>
49
+ Default
50
+ </Token>
51
+ </Gapped>
52
+ <Gapped gap={10}>
53
+ <Token colors={colors.gray}>Gray</Token>
54
+ <Token isActive colors={colors.gray}>
55
+ Gray
56
+ </Token>
57
+ </Gapped>
58
+ <Gapped gap={10}>
59
+ <Token colors={colors.blue}>Blue</Token>
60
+ <Token isActive colors={colors.blue}>
61
+ Blue
62
+ </Token>
63
+ </Gapped>
64
+ <Gapped gap={10}>
65
+ <Token colors={colors.green}>Green</Token>
66
+ <Token isActive colors={colors.green}>
67
+ Green
68
+ </Token>
69
+ </Gapped>
70
+ <Gapped gap={10}>
71
+ <Token colors={colors.yellow}>Yellow</Token>
72
+ <Token isActive colors={colors.yellow}>
73
+ Yellow
74
+ </Token>
75
+ </Gapped>
76
+ <Gapped gap={10}>
77
+ <Token colors={colors.red}>Red</Token>
78
+ <Token isActive colors={colors.red}>
79
+ Red
80
+ </Token>
81
+ </Gapped>
82
+ <Gapped gap={10}>
83
+ <Token colors={colors.mono}>Monochrome</Token>
84
+ <Token isActive colors={colors.mono}>
85
+ Monochrome
86
+ </Token>
87
+ </Gapped>
88
+ </Gapped>;
89
+ ```
90
+
91
+ Can accept validation state
92
+
93
+ ```jsx harmony
94
+ import { Gapped, Token } from '@skbkontur/react-ui';
95
+
96
+ <Gapped gap={20} vertical>
97
+ <Gapped gap={10}>
98
+ <Token>Correct</Token>
99
+ <Token warning>Warned</Token>
100
+ <Token error>Errored</Token>
101
+ </Gapped>
102
+ <Gapped gap={10}>
103
+ <Token isActive>Correct</Token>
104
+ <Token isActive warning>
105
+ Warned
106
+ </Token>
107
+ <Token isActive error>
108
+ Errored
109
+ </Token>
110
+ </Gapped>
111
+ </Gapped>;
112
+ ```
@@ -13,7 +13,7 @@ export interface DropdownContainerProps {
13
13
  disablePortal?: boolean;
14
14
  offsetY?: number;
15
15
  offsetX?: number;
16
- fixedWidth?: boolean;
16
+ hasFixedWidth?: boolean;
17
17
  }
18
18
  export interface DropdownContainerState {
19
19
  position: Nullable<DropdownContainerPosition>;
@@ -207,4 +207,4 @@ DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsL
207
207
  left: offsetX,
208
208
  right: null };
209
209
 
210
- };return _this;}var _proto = DropdownContainer.prototype;_proto.componentDidMount = function componentDidMount() {this.position();this.layoutSub = LayoutEvents.addListener(this.position);var _document2 = document,body = _document2.body,docEl = _document2.documentElement;var htmlPosition = getComputedStyle(docEl).position;var bodyPosition = getComputedStyle(body).position;var hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;var hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';this.setState({ isDocumentElementRoot: hasLimitedHeightRoot || hasStaticRoot });};_proto.componentWillUnmount = function componentWillUnmount() {if (this.layoutSub) {this.layoutSub.remove();}};_proto.render = function render() {var _cx;var style = { position: 'absolute', top: '0' };if (this.state.position) {var _this$state$position = this.state.position,top = _this$state$position.top,bottom = _this$state$position.bottom,left = _this$state$position.left,right = _this$state$position.right;style = (0, _extends2.default)({}, style, { top: top !== null ? top : undefined, bottom: bottom !== null ? bottom : undefined, left: left !== null ? left : undefined, right: right !== null ? right : undefined, minWidth: this.state.minWidth, maxWidth: this.props.fixedWidth ? this.state.minWidth : undefined });}var content = /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'DropdownContainer', wrapperRef: this.ZIndexRef, style: style, className: (0, _Emotion.cx)((_cx = {}, _cx[_DropdownContainer.styles.alignRight()] = this.props.align === 'right' && !_client.isIE11, _cx)) }, this.props.children);return this.props.disablePortal ? content : /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, null, content);};return DropdownContainer;}(_react.default.PureComponent);exports.DropdownContainer = DropdownContainer;DropdownContainer.__KONTUR_REACT_UI__ = 'DropdownContainer';DropdownContainer.defaultProps = { align: 'left', disablePortal: false, offsetX: 0, offsetY: -1 };
210
+ };return _this;}var _proto = DropdownContainer.prototype;_proto.componentDidMount = function componentDidMount() {this.position();this.layoutSub = LayoutEvents.addListener(this.position);var _document2 = document,body = _document2.body,docEl = _document2.documentElement;var htmlPosition = getComputedStyle(docEl).position;var bodyPosition = getComputedStyle(body).position;var hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;var hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';this.setState({ isDocumentElementRoot: hasLimitedHeightRoot || hasStaticRoot });};_proto.componentWillUnmount = function componentWillUnmount() {if (this.layoutSub) {this.layoutSub.remove();}};_proto.render = function render() {var _cx;var style = { position: 'absolute', top: '0' };if (this.state.position) {var _this$state$position = this.state.position,top = _this$state$position.top,bottom = _this$state$position.bottom,left = _this$state$position.left,right = _this$state$position.right;style = (0, _extends2.default)({}, style, { top: top !== null ? top : undefined, bottom: bottom !== null ? bottom : undefined, left: left !== null ? left : undefined, right: right !== null ? right : undefined, minWidth: this.state.minWidth, maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined });}var content = /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'DropdownContainer', wrapperRef: this.ZIndexRef, style: style, className: (0, _Emotion.cx)((_cx = {}, _cx[_DropdownContainer.styles.alignRight()] = this.props.align === 'right' && !_client.isIE11, _cx)) }, this.props.children);return this.props.disablePortal ? content : /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, null, content);};return DropdownContainer;}(_react.default.PureComponent);exports.DropdownContainer = DropdownContainer;DropdownContainer.__KONTUR_REACT_UI__ = 'DropdownContainer';DropdownContainer.defaultProps = { align: 'left', disablePortal: false, offsetX: 0, offsetY: -1 };
@@ -1 +1 @@
1
- {"version":3,"sources":["DropdownContainer.tsx"],"names":["DropdownContainer","state","position","minWidth","isDocumentElementRoot","getProps","defaultProps","dom","layoutSub","ZIndexRef","element","isElement","node","Element","target","props","getParent","targetRect","getBoundingClientRect","document","body","docEl","documentElement","Error","scrollX","window","pageXOffset","scrollLeft","scrollY","pageYOffset","scrollTop","left","right","align","docWidth","offsetWidth","offsetX","offsetY","bottom","top","distanceToBottom","clientHeight","dropdownHeight","getHeight","scrollHeight","setState","getMinWidth","disablePortal","convertToRelativePosition","child","children","item","height","width","targetHeight","componentDidMount","LayoutEvents","addListener","htmlPosition","getComputedStyle","bodyPosition","hasLimitedHeightRoot","hasStaticRoot","componentWillUnmount","remove","render","style","undefined","maxWidth","fixedWidth","content","styles","alignRight","isIE11","React","PureComponent","__KONTUR_REACT_UI__"],"mappings":"saAAA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+D;;;;;;;;;;;;;;;;;;;;;;;;;AAyBaA,iB;;;;;;;;;;AAUJC,IAAAA,K,GAAgC;AACrCC,MAAAA,QAAQ,EAAE,IAD2B;AAErCC,MAAAA,QAAQ,EAAE,CAF2B;AAGrCC,MAAAA,qBAAqB,EAAE,IAHc,E;;;AAM/BC,IAAAA,Q,GAAW,0CAAkBL,iBAAiB,CAACM,YAApC,C;;AAEXC,IAAAA,G;AACAC,IAAAA,S;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDAC,IAAAA,S,GAAY,UAACC,OAAD,EAAuC;AACzD,YAAKH,GAAL,GAAWG,OAAX;AACD,K;;AAEOC,IAAAA,S,GAAY,UAACC,IAAD,EAA8C;AAChE,aAAOA,IAAI,YAAYC,OAAvB;AACD,K;;AAEMX,IAAAA,Q,GAAW,YAAM;AACtB,UAAMY,MAAM,GAAG,MAAKC,KAAL,CAAWC,SAAX,EAAf;AACA,UAAMT,GAAG,GAAG,MAAKA,GAAjB;;AAEA,UAAIO,MAAM,IAAI,MAAKH,SAAL,CAAeG,MAAf,CAAV,IAAoCP,GAAxC,EAA6C;AAC3C,YAAMU,UAAU,GAAGH,MAAM,CAACI,qBAAP,EAAnB,CAD2C;AAEFC,QAAAA,QAFE,CAEnCC,IAFmC,aAEnCA,IAFmC,CAEZC,KAFY,aAE7BC,eAF6B;;AAI3C,YAAI,CAACD,KAAL,EAAY;AACV,gBAAME,KAAK,CAAC,6CAAD,CAAX;AACD;;AAED,YAAMC,OAAO,GAAGC,MAAM,CAACC,WAAP,IAAsBL,KAAK,CAACM,UAA5B,IAA0C,CAA1D;AACA,YAAMC,OAAO,GAAGH,MAAM,CAACI,WAAP,IAAsBR,KAAK,CAACS,SAA5B,IAAyC,CAAzD;;AAEA,YAAIC,IAAI,GAAG,IAAX;AACA,YAAIC,KAAK,GAAG,IAAZ;;AAEA,YAAI,MAAKjB,KAAL,CAAWkB,KAAX,KAAqB,OAAzB,EAAkC;AAChC,cAAMC,QAAQ,GAAGb,KAAK,CAACc,WAAN,IAAqB,CAAtC;AACAH,UAAAA,KAAK,GAAGE,QAAQ,IAAIjB,UAAU,CAACe,KAAX,GAAmBR,OAAvB,CAAR,GAA0C,MAAKnB,QAAL,GAAgB+B,OAAlE;AACD,SAHD,MAGO;AACLL,UAAAA,IAAI,GAAGd,UAAU,CAACc,IAAX,GAAkBP,OAAlB,GAA4B,MAAKnB,QAAL,GAAgB+B,OAAnD;AACD,SAnB0C;;AAqBnB,cAAKrB,KArBc,CAqBnCsB,OArBmC,CAqBnCA,OArBmC,oCAqBzB,CArByB;AAsB3C,YAAIC,MAAM,GAAG,IAAb;AACA,YAAIC,GAAkB,GAAGtB,UAAU,CAACqB,MAAX,GAAoBV,OAApB,GAA8BS,OAAvD;;AAEA,YAAMG,gBAAgB,GAAGnB,KAAK,CAACoB,YAAN,GAAqBxB,UAAU,CAACqB,MAAzD;AACA,YAAMI,cAAc,GAAG,MAAKC,SAAL,EAAvB;;AAEA,YAAIH,gBAAgB,GAAGE,cAAnB,IAAqCzB,UAAU,CAACsB,GAAX,GAAiBG,cAA1D,EAA0E;AACxE,cAAMD,YAAY,GAAG,MAAKxC,KAAL,CAAWG,qBAAX,GAAmCiB,KAAK,CAACoB,YAAzC,GAAwDrB,IAAI,CAACwB,YAAlF;;AAEAL,UAAAA,GAAG,GAAG,IAAN;AACAD,UAAAA,MAAM,GAAGG,YAAY,GAAGJ,OAAf,GAAyBT,OAAzB,GAAmCX,UAAU,CAACsB,GAAvD;AACD;;AAED,YAAMrC,QAAQ,GAAG;AACfqC,UAAAA,GAAG,EAAHA,GADe;AAEfR,UAAAA,IAAI,EAAJA,IAFe;AAGfC,UAAAA,KAAK,EAALA,KAHe;AAIfM,UAAAA,MAAM,EAANA,MAJe,EAAjB;;;AAOA,cAAKO,QAAL,CAAc;AACZ1C,UAAAA,QAAQ,EAAE,MAAK2C,WAAL,EADE;AAEZ5C,UAAAA,QAAQ,EAAE,MAAKa,KAAL,CAAWgC,aAAX,GAA2B,MAAKC,yBAAL,CAA+B9C,QAA/B,CAA3B,GAAsEA,QAFpE,EAAd;;AAID;AACF,K;;AAEOyC,IAAAA,S,GAAY,YAAM;AACxB,UAAI,CAAC,MAAKhC,SAAL,CAAe,MAAKJ,GAApB,CAAL,EAA+B;AAC7B,eAAO,CAAP;AACD;AACD,UAAM0C,KAAK,GAAG,MAAK1C,GAAL,CAAS2C,QAAT,CAAkBC,IAAlB,CAAuB,CAAvB,CAAd;AACA,UAAI,CAACF,KAAL,EAAY;AACV,eAAO,CAAP;AACD;AACD,aAAOA,KAAK,CAAC/B,qBAAN,GAA8BkC,MAArC;AACD,K;;AAEON,IAAAA,W,GAAc,YAAM;AAC1B,UAAMhC,MAAM,GAAG,MAAKC,KAAL,CAAWC,SAAX,EAAf;AACA,UAAI,CAACF,MAAD,IAAW,CAAC,MAAKH,SAAL,CAAeG,MAAf,CAAhB,EAAwC;AACtC,eAAO,CAAP;AACD;AACD,aAAOA,MAAM,CAACI,qBAAP,GAA+BmC,KAAtC;AACD,K;;AAEOL,IAAAA,yB,GAA4B,UAAC9C,QAAD,EAAoE;AACtG,UAAMY,MAAM,GAAG,MAAKC,KAAL,CAAWC,SAAX,EAAf,CADsG;AAEjE,YAAKD,KAF4D,mCAE9FqB,OAF8F,CAE9FA,OAF8F,oCAEpF,CAFoF,0DAEjFC,OAFiF,CAEjFA,OAFiF,qCAEvE,CAFuE;AAG9FE,MAAAA,GAH8F,GAGjErC,QAHiE,CAG9FqC,GAH8F,CAGzFD,MAHyF,GAGjEpC,QAHiE,CAGzFoC,MAHyF,CAGjFP,IAHiF,GAGjE7B,QAHiE,CAGjF6B,IAHiF,CAG3EC,KAH2E,GAGjE9B,QAHiE,CAG3E8B,KAH2E;AAItG,UAAIlB,MAAM,IAAI,MAAKH,SAAL,CAAeG,MAAf,CAAd,EAAsC;AACpC,YAAMwC,YAAY,GAAGxC,MAAM,CAACI,qBAAP,GAA+BkC,MAApD;AACA,eAAO;AACLb,UAAAA,GAAG,EAAEA,GAAG,KAAK,IAAR,GAAee,YAAY,GAAGjB,OAA9B,GAAwC,IADxC;AAELC,UAAAA,MAAM,EAAEA,MAAM,KAAK,IAAX,GAAkBgB,YAAY,GAAGjB,OAAjC,GAA2C,IAF9C;AAGLN,UAAAA,IAAI,EAAEA,IAAI,KAAK,IAAT,GAAgBK,OAAhB,GAA0B,IAH3B;AAILJ,UAAAA,KAAK,EAAEA,KAAK,KAAK,IAAV,GAAiBI,OAAjB,GAA2B,IAJ7B,EAAP;;AAMD;AACD,aAAO;AACLG,QAAAA,GAAG,EAAEF,OADA;AAELC,QAAAA,MAAM,EAAE,IAFH;AAGLP,QAAAA,IAAI,EAAEK,OAHD;AAILJ,QAAAA,KAAK,EAAE,IAJF,EAAP;;AAMD,K,+DAzJMuB,iB,GAAP,6BAA2B,CACzB,KAAKrD,QAAL,GACA,KAAKM,SAAL,GAAiBgD,YAAY,CAACC,WAAb,CAAyB,KAAKvD,QAA9B,CAAjB,CAFyB,iBAIgBiB,QAJhB,CAIjBC,IAJiB,cAIjBA,IAJiB,CAIMC,KAJN,cAIXC,eAJW,CAKzB,IAAMoC,YAAY,GAAGC,gBAAgB,CAACtC,KAAD,CAAhB,CAAwBnB,QAA7C,CACA,IAAM0D,YAAY,GAAGD,gBAAgB,CAACvC,IAAD,CAAhB,CAAuBlB,QAA5C,CAEA,IAAM2D,oBAAoB,GAAGzC,IAAI,CAACwB,YAAL,GAAoBxB,IAAI,CAACqB,YAAtD,CACA,IAAMqB,aAAa,GAAGJ,YAAY,KAAK,QAAjB,IAA6BE,YAAY,KAAK,QAApE,CAEA,KAAKf,QAAL,CAAc,EAAEzC,qBAAqB,EAAEyD,oBAAoB,IAAIC,aAAjD,EAAd,EACD,C,QAEMC,oB,GAAP,gCAA8B,CAC5B,IAAI,KAAKvD,SAAT,EAAoB,CAClB,KAAKA,SAAL,CAAewD,MAAf,GACD,CACF,C,QAEMC,M,GAAP,kBAAgB,SACd,IAAIC,KAA0B,GAAG,EAC/BhE,QAAQ,EAAE,UADqB,EAE/BqC,GAAG,EAAE,GAF0B,EAAjC,CAIA,IAAI,KAAKtC,KAAL,CAAWC,QAAf,EAAyB,4BACc,KAAKD,KAAL,CAAWC,QADzB,CACfqC,GADe,wBACfA,GADe,CACVD,MADU,wBACVA,MADU,CACFP,IADE,wBACFA,IADE,CACIC,KADJ,wBACIA,KADJ,CAEvBkC,KAAK,8BACAA,KADA,IAEH3B,GAAG,EAAEA,GAAG,KAAK,IAAR,GAAeA,GAAf,GAAqB4B,SAFvB,EAGH7B,MAAM,EAAEA,MAAM,KAAK,IAAX,GAAkBA,MAAlB,GAA2B6B,SAHhC,EAIHpC,IAAI,EAAEA,IAAI,KAAK,IAAT,GAAgBA,IAAhB,GAAuBoC,SAJ1B,EAKHnC,KAAK,EAAEA,KAAK,KAAK,IAAV,GAAiBA,KAAjB,GAAyBmC,SAL7B,EAMHhE,QAAQ,EAAE,KAAKF,KAAL,CAAWE,QANlB,EAOHiE,QAAQ,EAAE,KAAKrD,KAAL,CAAWsD,UAAX,GAAwB,KAAKpE,KAAL,CAAWE,QAAnC,GAA8CgE,SAPrD,GAAL,CASD,CAED,IAAMG,OAAO,gBACX,6BAAC,cAAD,IACE,QAAQ,EAAE,mBADZ,EAEE,UAAU,EAAE,KAAK7D,SAFnB,EAGE,KAAK,EAAEyD,KAHT,EAIE,SAAS,EAAE,gCACRK,0BAAOC,UAAP,EADQ,IACc,KAAKzD,KAAL,CAAWkB,KAAX,KAAqB,OAArB,IAAgC,CAACwC,cAD/C,OAJb,IAQG,KAAK1D,KAAL,CAAWmC,QARd,CADF,CAaA,OAAO,KAAKnC,KAAL,CAAWgC,aAAX,GAA2BuB,OAA3B,gBAAqC,6BAAC,gCAAD,QAAkBA,OAAlB,CAA5C,CACD,C,4BAzEoCI,eAAMC,a,gDAAhC3E,iB,CACG4E,mB,GAAsB,mB,CADzB5E,iB,CAGGM,Y,GAAe,EAC3B2B,KAAK,EAAE,MADoB,EAE3Bc,aAAa,EAAE,KAFY,EAG3BX,OAAO,EAAE,CAHkB,EAI3BC,OAAO,EAAE,CAAC,CAJiB,E","sourcesContent":["import React from 'react';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../RenderContainer';\nimport { ZIndex } from '../ZIndex';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './DropdownContainer.styles';\n\nexport interface DropdownContainerPosition {\n top: Nullable<number>;\n bottom: Nullable<number>;\n left: Nullable<number>;\n right: Nullable<number>;\n}\n\nexport interface DropdownContainerProps {\n align?: 'left' | 'right';\n getParent: () => Nullable<HTMLElement>;\n children?: React.ReactNode;\n disablePortal?: boolean;\n offsetY?: number;\n offsetX?: number;\n fixedWidth?: boolean;\n}\n\nexport interface DropdownContainerState {\n position: Nullable<DropdownContainerPosition>;\n minWidth: number;\n isDocumentElementRoot?: boolean;\n}\n\nexport class DropdownContainer extends React.PureComponent<DropdownContainerProps, DropdownContainerState> {\n public static __KONTUR_REACT_UI__ = 'DropdownContainer';\n\n public static defaultProps = {\n align: 'left',\n disablePortal: false,\n offsetX: 0,\n offsetY: -1,\n };\n\n public state: DropdownContainerState = {\n position: null,\n minWidth: 0,\n isDocumentElementRoot: true,\n };\n\n private getProps = createPropsGetter(DropdownContainer.defaultProps);\n\n private dom: Nullable<HTMLDivElement>;\n private layoutSub: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n\n public componentDidMount() {\n this.position();\n this.layoutSub = LayoutEvents.addListener(this.position);\n\n const { body, documentElement: docEl } = document;\n const htmlPosition = getComputedStyle(docEl).position;\n const bodyPosition = getComputedStyle(body).position;\n\n const hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;\n const hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';\n\n this.setState({ isDocumentElementRoot: hasLimitedHeightRoot || hasStaticRoot });\n }\n\n public componentWillUnmount() {\n if (this.layoutSub) {\n this.layoutSub.remove();\n }\n }\n\n public render() {\n let style: React.CSSProperties = {\n position: 'absolute',\n top: '0',\n };\n if (this.state.position) {\n const { top, bottom, left, right } = this.state.position;\n style = {\n ...style,\n top: top !== null ? top : undefined,\n bottom: bottom !== null ? bottom : undefined,\n left: left !== null ? left : undefined,\n right: right !== null ? right : undefined,\n minWidth: this.state.minWidth,\n maxWidth: this.props.fixedWidth ? this.state.minWidth : undefined,\n };\n }\n\n const content = (\n <ZIndex\n priority={'DropdownContainer'}\n wrapperRef={this.ZIndexRef}\n style={style}\n className={cx({\n [styles.alignRight()]: this.props.align === 'right' && !isIE11,\n })}\n >\n {this.props.children}\n </ZIndex>\n );\n\n return this.props.disablePortal ? content : <RenderContainer>{content}</RenderContainer>;\n }\n\n private ZIndexRef = (element: Nullable<HTMLDivElement>) => {\n this.dom = element;\n };\n\n private isElement = (node: Nullable<Element>): node is Element => {\n return node instanceof Element;\n };\n\n public position = () => {\n const target = this.props.getParent();\n const dom = this.dom;\n\n if (target && this.isElement(target) && dom) {\n const targetRect = target.getBoundingClientRect();\n const { body, documentElement: docEl } = document;\n\n if (!docEl) {\n throw Error('There is no \"documentElement\" in \"document\"');\n }\n\n const scrollX = window.pageXOffset || docEl.scrollLeft || 0;\n const scrollY = window.pageYOffset || docEl.scrollTop || 0;\n\n let left = null;\n let right = null;\n\n if (this.props.align === 'right') {\n const docWidth = docEl.offsetWidth || 0;\n right = docWidth - (targetRect.right + scrollX) + this.getProps().offsetX;\n } else {\n left = targetRect.left + scrollX + this.getProps().offsetX;\n }\n\n const { offsetY = 0 } = this.props;\n let bottom = null;\n let top: number | null = targetRect.bottom + scrollY + offsetY;\n\n const distanceToBottom = docEl.clientHeight - targetRect.bottom;\n const dropdownHeight = this.getHeight();\n\n if (distanceToBottom < dropdownHeight && targetRect.top > dropdownHeight) {\n const clientHeight = this.state.isDocumentElementRoot ? docEl.clientHeight : body.scrollHeight;\n\n top = null;\n bottom = clientHeight + offsetY - scrollY - targetRect.top;\n }\n\n const position = {\n top,\n left,\n right,\n bottom,\n };\n\n this.setState({\n minWidth: this.getMinWidth(),\n position: this.props.disablePortal ? this.convertToRelativePosition(position) : position,\n });\n }\n };\n\n private getHeight = () => {\n if (!this.isElement(this.dom)) {\n return 0;\n }\n const child = this.dom.children.item(0);\n if (!child) {\n return 0;\n }\n return child.getBoundingClientRect().height;\n };\n\n private getMinWidth = () => {\n const target = this.props.getParent();\n if (!target || !this.isElement(target)) {\n return 0;\n }\n return target.getBoundingClientRect().width;\n };\n\n private convertToRelativePosition = (position: DropdownContainerPosition): DropdownContainerPosition => {\n const target = this.props.getParent();\n const { offsetX = 0, offsetY = 0 } = this.props;\n const { top, bottom, left, right } = position;\n if (target && this.isElement(target)) {\n const targetHeight = target.getBoundingClientRect().height;\n return {\n top: top !== null ? targetHeight + offsetY : null,\n bottom: bottom !== null ? targetHeight + offsetY : null,\n left: left !== null ? offsetX : null,\n right: right !== null ? offsetX : null,\n };\n }\n return {\n top: offsetY,\n bottom: null,\n left: offsetX,\n right: null,\n };\n };\n}\n"]}
1
+ {"version":3,"sources":["DropdownContainer.tsx"],"names":["DropdownContainer","state","position","minWidth","isDocumentElementRoot","getProps","defaultProps","dom","layoutSub","ZIndexRef","element","isElement","node","Element","target","props","getParent","targetRect","getBoundingClientRect","document","body","docEl","documentElement","Error","scrollX","window","pageXOffset","scrollLeft","scrollY","pageYOffset","scrollTop","left","right","align","docWidth","offsetWidth","offsetX","offsetY","bottom","top","distanceToBottom","clientHeight","dropdownHeight","getHeight","scrollHeight","setState","getMinWidth","disablePortal","convertToRelativePosition","child","children","item","height","width","targetHeight","componentDidMount","LayoutEvents","addListener","htmlPosition","getComputedStyle","bodyPosition","hasLimitedHeightRoot","hasStaticRoot","componentWillUnmount","remove","render","style","undefined","maxWidth","hasFixedWidth","content","styles","alignRight","isIE11","React","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../RenderContainer';\nimport { ZIndex } from '../ZIndex';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './DropdownContainer.styles';\n\nexport interface DropdownContainerPosition {\n top: Nullable<number>;\n bottom: Nullable<number>;\n left: Nullable<number>;\n right: Nullable<number>;\n}\n\nexport interface DropdownContainerProps {\n align?: 'left' | 'right';\n getParent: () => Nullable<HTMLElement>;\n children?: React.ReactNode;\n disablePortal?: boolean;\n offsetY?: number;\n offsetX?: number;\n hasFixedWidth?: boolean;\n}\n\nexport interface DropdownContainerState {\n position: Nullable<DropdownContainerPosition>;\n minWidth: number;\n isDocumentElementRoot?: boolean;\n}\n\nexport class DropdownContainer extends React.PureComponent<DropdownContainerProps, DropdownContainerState> {\n public static __KONTUR_REACT_UI__ = 'DropdownContainer';\n\n public static defaultProps = {\n align: 'left',\n disablePortal: false,\n offsetX: 0,\n offsetY: -1,\n };\n\n public state: DropdownContainerState = {\n position: null,\n minWidth: 0,\n isDocumentElementRoot: true,\n };\n\n private getProps = createPropsGetter(DropdownContainer.defaultProps);\n\n private dom: Nullable<HTMLDivElement>;\n private layoutSub: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n\n public componentDidMount() {\n this.position();\n this.layoutSub = LayoutEvents.addListener(this.position);\n\n const { body, documentElement: docEl } = document;\n const htmlPosition = getComputedStyle(docEl).position;\n const bodyPosition = getComputedStyle(body).position;\n\n const hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;\n const hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';\n\n this.setState({ isDocumentElementRoot: hasLimitedHeightRoot || hasStaticRoot });\n }\n\n public componentWillUnmount() {\n if (this.layoutSub) {\n this.layoutSub.remove();\n }\n }\n\n public render() {\n let style: React.CSSProperties = {\n position: 'absolute',\n top: '0',\n };\n if (this.state.position) {\n const { top, bottom, left, right } = this.state.position;\n style = {\n ...style,\n top: top !== null ? top : undefined,\n bottom: bottom !== null ? bottom : undefined,\n left: left !== null ? left : undefined,\n right: right !== null ? right : undefined,\n minWidth: this.state.minWidth,\n maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined,\n };\n }\n\n const content = (\n <ZIndex\n priority={'DropdownContainer'}\n wrapperRef={this.ZIndexRef}\n style={style}\n className={cx({\n [styles.alignRight()]: this.props.align === 'right' && !isIE11,\n })}\n >\n {this.props.children}\n </ZIndex>\n );\n\n return this.props.disablePortal ? content : <RenderContainer>{content}</RenderContainer>;\n }\n\n private ZIndexRef = (element: Nullable<HTMLDivElement>) => {\n this.dom = element;\n };\n\n private isElement = (node: Nullable<Element>): node is Element => {\n return node instanceof Element;\n };\n\n public position = () => {\n const target = this.props.getParent();\n const dom = this.dom;\n\n if (target && this.isElement(target) && dom) {\n const targetRect = target.getBoundingClientRect();\n const { body, documentElement: docEl } = document;\n\n if (!docEl) {\n throw Error('There is no \"documentElement\" in \"document\"');\n }\n\n const scrollX = window.pageXOffset || docEl.scrollLeft || 0;\n const scrollY = window.pageYOffset || docEl.scrollTop || 0;\n\n let left = null;\n let right = null;\n\n if (this.props.align === 'right') {\n const docWidth = docEl.offsetWidth || 0;\n right = docWidth - (targetRect.right + scrollX) + this.getProps().offsetX;\n } else {\n left = targetRect.left + scrollX + this.getProps().offsetX;\n }\n\n const { offsetY = 0 } = this.props;\n let bottom = null;\n let top: number | null = targetRect.bottom + scrollY + offsetY;\n\n const distanceToBottom = docEl.clientHeight - targetRect.bottom;\n const dropdownHeight = this.getHeight();\n\n if (distanceToBottom < dropdownHeight && targetRect.top > dropdownHeight) {\n const clientHeight = this.state.isDocumentElementRoot ? docEl.clientHeight : body.scrollHeight;\n\n top = null;\n bottom = clientHeight + offsetY - scrollY - targetRect.top;\n }\n\n const position = {\n top,\n left,\n right,\n bottom,\n };\n\n this.setState({\n minWidth: this.getMinWidth(),\n position: this.props.disablePortal ? this.convertToRelativePosition(position) : position,\n });\n }\n };\n\n private getHeight = () => {\n if (!this.isElement(this.dom)) {\n return 0;\n }\n const child = this.dom.children.item(0);\n if (!child) {\n return 0;\n }\n return child.getBoundingClientRect().height;\n };\n\n private getMinWidth = () => {\n const target = this.props.getParent();\n if (!target || !this.isElement(target)) {\n return 0;\n }\n return target.getBoundingClientRect().width;\n };\n\n private convertToRelativePosition = (position: DropdownContainerPosition): DropdownContainerPosition => {\n const target = this.props.getParent();\n const { offsetX = 0, offsetY = 0 } = this.props;\n const { top, bottom, left, right } = position;\n if (target && this.isElement(target)) {\n const targetHeight = target.getBoundingClientRect().height;\n return {\n top: top !== null ? targetHeight + offsetY : null,\n bottom: bottom !== null ? targetHeight + offsetY : null,\n left: left !== null ? offsetX : null,\n right: right !== null ? offsetX : null,\n };\n }\n return {\n top: offsetY,\n bottom: null,\n left: offsetX,\n right: null,\n };\n };\n}\n"]}
@@ -143,27 +143,6 @@ Menu = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function
143
143
 
144
144
 
145
145
 
146
-
147
-
148
-
149
-
150
-
151
-
152
-
153
-
154
-
155
-
156
-
157
-
158
-
159
-
160
-
161
-
162
-
163
-
164
-
165
-
166
-
167
146
 
168
147
 
169
148
 
@@ -255,7 +234,7 @@ Menu = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function
255
234
  * @public
256
235
  */;_proto.reset = function reset() {this.setState({ highlightedIndex: -1 });} /**
257
236
  * @public
258
- */;_proto.hasHighlightedItem = function hasHighlightedItem() {return this.state.highlightedIndex !== -1;};_proto.highlightItem = function highlightItem(index) {this.highlight(index);};_proto.renderMain = function renderMain() {var _cx,_cx2,_this3 = this;var enableIconPadding = _react.default.Children.toArray(this.props.children).some(function (x) {return /*#__PURE__*/_react.default.isValidElement(x) && x.props.icon;});if (this.isEmpty()) {return null;}var style = this.props.align === 'right' ? { maxWidth: this.props.width, minWidth: _client.isIE11 && this.props.width === 'auto' ? '100%' : this.props.width, maxHeight: this.props.maxHeight } : { width: this.props.width, maxHeight: this.props.maxHeight };var alignRightClass = this.props.align === 'right' ? (0, _Emotion.cx)((_cx = {}, _cx[_Menu.styles.alignRight()] = !_client.isIE11, _cx[_Menu.styles.alignRightIE11()] = _client.isIE11, _cx[_Menu.styles.alignRightIE11DefaultWidth()] = _client.isIE11 && this.props.width === 'auto', _cx)) : '';return /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(alignRightClass, (_cx2 = {}, _cx2[_Menu.styles.root(this.theme)] = true, _cx2[_Menu.styles.shadow(this.theme)] = this.props.hasShadow, _cx2)), style: style, ref: this.setRootNode }, /*#__PURE__*/_react.default.createElement(_ScrollContainer.ScrollContainer, { ref: this.refScrollContainer, maxHeight: this.props.maxHeight, preventWindowScroll: this.props.preventWindowScroll }, /*#__PURE__*/_react.default.createElement("div", { className: _Menu.styles.scrollContainer(this.theme) }, _react.default.Children.map(this.props.children, function (child, index) {if (!child) {return child;}if (typeof child === 'string' || typeof child === 'number') {return child;}if (enableIconPadding && ((0, _MenuItem.isMenuItem)(child) || (0, _MenuHeader.isMenuHeader)(child))) {child = /*#__PURE__*/_react.default.cloneElement(child, { _enableIconPadding: true });}if ((0, _isActiveElement.isActiveElement)(child)) {var highlight = _this3.state.highlightedIndex === index;var ref = child.ref;if (highlight && typeof child.ref !== 'string') {ref = _this3.refHighlighted.bind(_this3, child.ref);}return /*#__PURE__*/_react.default.cloneElement(child, { ref: ref, state: highlight ? 'hover' : child.props.state, onClick: _this3.select.bind(_this3, index, false), onMouseEnter: _this3.highlight.bind(_this3, index), onMouseLeave: _this3.unhighlight });}return child;}))));};_proto.refHighlighted = function refHighlighted(originalRef, menuItem) {this.highlighted = menuItem;if (typeof originalRef === 'function') {originalRef(menuItem);}};_proto.select = function select(index, shouldHandleHref, event) {var item = childrenToArray(this.props.children)[index];if ((0, _isActiveElement.isActiveElement)(item)) {if (shouldHandleHref && item.props.href) {if (item.props.target) {window.open(item.props.href, item.props.target);} else {location.href = item.props.href;}}if (item.props.onClick) {item.props.onClick(event);}if (this.props.onItemClick) {this.props.onItemClick();}return true;}return false;};_proto.move = function move(step) {var _this4 = this;if (this.unmounted) {// NOTE workaround, because `ComboBox` call `process.nextTick` in reducer
237
+ */;_proto.hasHighlightedItem = function hasHighlightedItem() {return this.state.highlightedIndex !== -1;};_proto.highlightItem = function highlightItem(index) {this.highlight(index);};_proto.renderMain = function renderMain() {var _cx,_this3 = this;var enableIconPadding = _react.default.Children.toArray(this.props.children).some(function (x) {return /*#__PURE__*/_react.default.isValidElement(x) && x.props.icon;});if (this.isEmpty()) {return null;}return /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(getAlignRightClass(this.props), (_cx = {}, _cx[_Menu.styles.root(this.theme)] = true, _cx[_Menu.styles.shadow(this.theme)] = this.props.hasShadow, _cx)), style: getStyle(this.props), ref: this.setRootNode }, /*#__PURE__*/_react.default.createElement(_ScrollContainer.ScrollContainer, { ref: this.refScrollContainer, maxHeight: this.props.maxHeight, preventWindowScroll: this.props.preventWindowScroll }, /*#__PURE__*/_react.default.createElement("div", { className: _Menu.styles.scrollContainer(this.theme) }, _react.default.Children.map(this.props.children, function (child, index) {if (!child) {return child;}if (typeof child === 'string' || typeof child === 'number') {return child;}if (enableIconPadding && ((0, _MenuItem.isMenuItem)(child) || (0, _MenuHeader.isMenuHeader)(child))) {child = /*#__PURE__*/_react.default.cloneElement(child, { _enableIconPadding: true });}if ((0, _isActiveElement.isActiveElement)(child)) {var highlight = _this3.state.highlightedIndex === index;var ref = child.ref;if (highlight && typeof child.ref !== 'string') {ref = _this3.refHighlighted.bind(_this3, child.ref);}return /*#__PURE__*/_react.default.cloneElement(child, { ref: ref, state: highlight ? 'hover' : child.props.state, onClick: _this3.select.bind(_this3, index, false), onMouseEnter: _this3.highlight.bind(_this3, index), onMouseLeave: _this3.unhighlight });}return child;}))));};_proto.refHighlighted = function refHighlighted(originalRef, menuItem) {this.highlighted = menuItem;if (typeof originalRef === 'function') {originalRef(menuItem);}};_proto.select = function select(index, shouldHandleHref, event) {var item = childrenToArray(this.props.children)[index];if ((0, _isActiveElement.isActiveElement)(item)) {if (shouldHandleHref && item.props.href) {if (item.props.target) {window.open(item.props.href, item.props.target);} else {location.href = item.props.href;}}if (item.props.onClick) {item.props.onClick(event);}if (this.props.onItemClick) {this.props.onItemClick();}return true;}return false;};_proto.move = function move(step) {var _this4 = this;if (this.unmounted) {// NOTE workaround, because `ComboBox` call `process.nextTick` in reducer
259
238
  return;}var children = childrenToArray(this.props.children);var activeElements = children.filter(_isActiveElement.isActiveElement);if (!activeElements.length) {return;
260
239
  }
261
240
  var index = this.state.highlightedIndex;var _loop = function _loop() {
@@ -303,4 +282,31 @@ function childrenToArray(children) {
303
282
  ret.push(child);
304
283
  });
305
284
  return ret;
306
- }
285
+ }
286
+
287
+ var getStyle = function getStyle(props) {
288
+ if (props.align === 'right') {
289
+ return {
290
+ maxWidth: props.width,
291
+ minWidth: props.width,
292
+ maxHeight: props.maxHeight };
293
+
294
+ }
295
+
296
+ return {
297
+ width: props.width,
298
+ maxHeight: props.maxHeight };
299
+
300
+ };
301
+
302
+ var getAlignRightClass = function getAlignRightClass(props) {
303
+ if (props.align === 'right') {var _cx2;
304
+ return (0, _Emotion.cx)((_cx2 = {}, _cx2[
305
+ _Menu.styles.alignRight()] = !_client.isIE11, _cx2[
306
+ _Menu.styles.alignRightIE11()] = _client.isIE11, _cx2[
307
+ _Menu.styles.alignRightIE11FixAutoWidth()] = _client.isIE11 && props.width === 'auto', _cx2));
308
+
309
+ }
310
+
311
+ return null;
312
+ };
@@ -1 +1 @@
1
- {"version":3,"sources":["Menu.tsx"],"names":["Menu","rootNode","state","highlightedIndex","theme","scrollContainer","highlighted","unmounted","setRootNode","refScrollContainer","scrollToSelected","scrollTo","scrollToTop","scrollToBottom","highlight","index","setState","unhighlight","componentWillUnmount","render","renderMain","up","move","down","enter","event","select","reset","hasHighlightedItem","highlightItem","enableIconPadding","React","Children","toArray","props","children","some","x","isValidElement","icon","isEmpty","style","align","maxWidth","width","minWidth","isIE11","maxHeight","alignRightClass","styles","alignRight","alignRightIE11","alignRightIE11DefaultWidth","root","shadow","hasShadow","preventWindowScroll","map","child","cloneElement","_enableIconPadding","ref","refHighlighted","bind","onClick","onMouseEnter","onMouseLeave","originalRef","menuItem","shouldHandleHref","item","childrenToArray","href","target","window","open","location","onItemClick","step","activeElements","filter","isActiveElement","length","indexOf","isExist","Component","__KONTUR_REACT_UI__","defaultProps","value","undefined","ret","forEach","push"],"mappings":"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","sourcesContent":["import React, { CSSProperties } from 'react';\n\nimport { ScrollContainer } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { isMenuHeader } from '../../components/MenuHeader';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './Menu.styles';\nimport { isActiveElement } from './isActiveElement';\n\nexport interface MenuProps {\n children: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: () => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n align?: 'left' | 'right';\n}\n\nexport interface MenuState {\n highlightedIndex: number;\n}\n\n@rootNode\nexport class Menu extends React.Component<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'Menu';\n\n public static defaultProps = {\n align: 'left',\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n };\n\n public state = {\n highlightedIndex: -1,\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private unmounted = false;\n private setRootNode!: TSetRootNode;\n\n public componentWillUnmount() {\n this.unmounted = true;\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public up() {\n this.move(-1);\n }\n\n /**\n * @public\n */\n public down() {\n this.move(1);\n }\n\n /**\n * @public\n */\n public enter(event: React.SyntheticEvent<HTMLElement>) {\n return this.select(this.state.highlightedIndex, true, event);\n }\n\n /**\n * @public\n */\n public reset() {\n this.setState({ highlightedIndex: -1 });\n }\n\n /**\n * @public\n */\n public hasHighlightedItem() {\n return this.state.highlightedIndex !== -1;\n }\n\n public highlightItem(index: number) {\n this.highlight(index);\n }\n\n private renderMain() {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n\n const style: CSSProperties =\n this.props.align === 'right'\n ? {\n maxWidth: this.props.width,\n minWidth: isIE11 && this.props.width === 'auto' ? '100%' : this.props.width,\n maxHeight: this.props.maxHeight,\n }\n : {\n width: this.props.width,\n maxHeight: this.props.maxHeight,\n };\n\n const alignRightClass =\n this.props.align === 'right'\n ? cx({\n [styles.alignRight()]: !isIE11,\n [styles.alignRightIE11()]: isIE11,\n [styles.alignRightIE11DefaultWidth()]: isIE11 && this.props.width === 'auto',\n })\n : '';\n\n return (\n <div\n className={cx(alignRightClass, {\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={style}\n ref={this.setRootNode}\n >\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n >\n <div className={styles.scrollContainer(this.theme)}>\n {React.Children.map(this.props.children, (child, index) => {\n if (!child) {\n return child;\n }\n if (typeof child === 'string' || typeof child === 'number') {\n return child;\n }\n\n if (enableIconPadding && (isMenuItem(child) || isMenuHeader(child))) {\n child = React.cloneElement(child, {\n _enableIconPadding: true,\n });\n }\n if (isActiveElement(child)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = child.ref;\n if (highlight && typeof child.ref !== 'string') {\n ref = this.refHighlighted.bind(this, child.ref);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(child, {\n ref,\n state: highlight ? 'hover' : child.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: this.highlight.bind(this, index),\n onMouseLeave: this.unhighlight,\n });\n }\n return child;\n })}\n </div>\n </ScrollContainer>\n </div>\n );\n }\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: ((menuItem: MenuItem | null) => any) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(getRootNode(this.highlighted));\n }\n };\n\n private scrollToTop = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToTop();\n }\n };\n\n private scrollToBottom = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToBottom();\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick();\n }\n return true;\n }\n return false;\n }\n\n private highlight = (index: number) => {\n this.setState({ highlightedIndex: index });\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n if (this.unmounted) {\n // NOTE workaround, because `ComboBox` call `process.nextTick` in reducer\n return;\n }\n\n const children = childrenToArray(this.props.children);\n const activeElements = children.filter(isActiveElement);\n if (!activeElements.length) {\n return;\n }\n let index = this.state.highlightedIndex;\n do {\n index += step;\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n this.setState({ highlightedIndex: index }, () => {\n switch (activeElements.indexOf(child)) {\n case 0:\n this.scrollToTop();\n break;\n case activeElements.length - 1:\n this.scrollToBottom();\n break;\n default:\n this.scrollToSelected();\n }\n });\n return;\n }\n } while (index !== this.state.highlightedIndex);\n }\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\n }\n}\n\nfunction isExist(value: any): value is any {\n return value !== null && value !== undefined;\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n"]}
1
+ {"version":3,"sources":["Menu.tsx"],"names":["Menu","rootNode","state","highlightedIndex","theme","scrollContainer","highlighted","unmounted","setRootNode","refScrollContainer","scrollToSelected","scrollTo","scrollToTop","scrollToBottom","highlight","index","setState","unhighlight","componentWillUnmount","render","renderMain","up","move","down","enter","event","select","reset","hasHighlightedItem","highlightItem","enableIconPadding","React","Children","toArray","props","children","some","x","isValidElement","icon","isEmpty","getAlignRightClass","styles","root","shadow","hasShadow","getStyle","maxHeight","preventWindowScroll","map","child","cloneElement","_enableIconPadding","ref","refHighlighted","bind","onClick","onMouseEnter","onMouseLeave","originalRef","menuItem","shouldHandleHref","item","childrenToArray","href","target","window","open","location","onItemClick","step","activeElements","filter","isActiveElement","length","indexOf","isExist","Component","__KONTUR_REACT_UI__","defaultProps","align","width","value","undefined","ret","forEach","push","maxWidth","minWidth","alignRight","isIE11","alignRightIE11","alignRightIE11FixAutoWidth"],"mappings":"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","sourcesContent":["import React, { CSSProperties } from 'react';\n\nimport { ScrollContainer } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { isMenuHeader } from '../../components/MenuHeader';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './Menu.styles';\nimport { isActiveElement } from './isActiveElement';\n\nexport interface MenuProps {\n children: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: () => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n align?: 'left' | 'right';\n}\n\nexport interface MenuState {\n highlightedIndex: number;\n}\n\n@rootNode\nexport class Menu extends React.Component<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'Menu';\n\n public static defaultProps = {\n align: 'left',\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n };\n\n public state = {\n highlightedIndex: -1,\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private unmounted = false;\n private setRootNode!: TSetRootNode;\n\n public componentWillUnmount() {\n this.unmounted = true;\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public up() {\n this.move(-1);\n }\n\n /**\n * @public\n */\n public down() {\n this.move(1);\n }\n\n /**\n * @public\n */\n public enter(event: React.SyntheticEvent<HTMLElement>) {\n return this.select(this.state.highlightedIndex, true, event);\n }\n\n /**\n * @public\n */\n public reset() {\n this.setState({ highlightedIndex: -1 });\n }\n\n /**\n * @public\n */\n public hasHighlightedItem() {\n return this.state.highlightedIndex !== -1;\n }\n\n public highlightItem(index: number) {\n this.highlight(index);\n }\n\n private renderMain() {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n className={cx(getAlignRightClass(this.props), {\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={getStyle(this.props)}\n ref={this.setRootNode}\n >\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n >\n <div className={styles.scrollContainer(this.theme)}>\n {React.Children.map(this.props.children, (child, index) => {\n if (!child) {\n return child;\n }\n if (typeof child === 'string' || typeof child === 'number') {\n return child;\n }\n\n if (enableIconPadding && (isMenuItem(child) || isMenuHeader(child))) {\n child = React.cloneElement(child, {\n _enableIconPadding: true,\n });\n }\n if (isActiveElement(child)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = child.ref;\n if (highlight && typeof child.ref !== 'string') {\n ref = this.refHighlighted.bind(this, child.ref);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(child, {\n ref,\n state: highlight ? 'hover' : child.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: this.highlight.bind(this, index),\n onMouseLeave: this.unhighlight,\n });\n }\n return child;\n })}\n </div>\n </ScrollContainer>\n </div>\n );\n }\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: ((menuItem: MenuItem | null) => any) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(getRootNode(this.highlighted));\n }\n };\n\n private scrollToTop = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToTop();\n }\n };\n\n private scrollToBottom = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToBottom();\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick();\n }\n return true;\n }\n return false;\n }\n\n private highlight = (index: number) => {\n this.setState({ highlightedIndex: index });\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n if (this.unmounted) {\n // NOTE workaround, because `ComboBox` call `process.nextTick` in reducer\n return;\n }\n\n const children = childrenToArray(this.props.children);\n const activeElements = children.filter(isActiveElement);\n if (!activeElements.length) {\n return;\n }\n let index = this.state.highlightedIndex;\n do {\n index += step;\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n this.setState({ highlightedIndex: index }, () => {\n switch (activeElements.indexOf(child)) {\n case 0:\n this.scrollToTop();\n break;\n case activeElements.length - 1:\n this.scrollToBottom();\n break;\n default:\n this.scrollToSelected();\n }\n });\n return;\n }\n } while (index !== this.state.highlightedIndex);\n }\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\n }\n}\n\nfunction isExist(value: any): value is any {\n return value !== null && value !== undefined;\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n\nconst getStyle = (props: MenuProps): CSSProperties => {\n if (props.align === 'right') {\n return {\n maxWidth: props.width,\n minWidth: props.width,\n maxHeight: props.maxHeight,\n };\n }\n\n return {\n width: props.width,\n maxHeight: props.maxHeight,\n };\n};\n\nconst getAlignRightClass = (props: MenuProps) => {\n if (props.align === 'right') {\n return cx({\n [styles.alignRight()]: !isIE11,\n [styles.alignRightIE11()]: isIE11,\n [styles.alignRightIE11FixAutoWidth()]: isIE11 && props.width === 'auto',\n });\n }\n\n return null;\n};\n"]}
@@ -3,7 +3,7 @@ export declare const styles: {
3
3
  root(t: Theme): string;
4
4
  alignRight(): string;
5
5
  alignRightIE11(): string;
6
- alignRightIE11DefaultWidth(): string;
6
+ alignRightIE11FixAutoWidth(): string;
7
7
  scrollContainer(t: Theme): string;
8
8
  shadow(t: Theme): string;
9
9
  };
@@ -19,12 +19,13 @@ var styles = (0, _Emotion.memoizeStyle)({
19
19
  },
20
20
 
21
21
  alignRightIE11: function alignRightIE11() {
22
- return (0, _Emotion.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["\n float: right;\n "])));
22
+ return (0, _Emotion.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["\n float: right;\n width: 100%;\n "])));
23
+
23
24
 
24
25
 
25
26
  },
26
27
 
27
- alignRightIE11DefaultWidth: function alignRightIE11DefaultWidth() {
28
+ alignRightIE11FixAutoWidth: function alignRightIE11FixAutoWidth() {
28
29
  return (0, _Emotion.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["\n box-sizing: border-box !important; // override root styles\n overflow: hidden !important; // override root styles\n "])));
29
30
 
30
31
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Menu.styles.ts"],"names":["styles","root","t","css","menuBgDefault","menuPaddingY","alignRight","alignRightIE11","alignRightIE11DefaultWidth","scrollContainer","shadow","menuBorder","menuShadow"],"mappings":"4QAAA;;AAEA,8D;;AAEO,IAAMA,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,eAAOC,YAAP;AACgBD,IAAAA,CAAC,CAACE,aADlB;;;AAIa,kCAAWF,CAAX,IAAgB,CAAhB,GAAoBA,CAAC,CAACG,YAJnC;;AAMD,GARgC;;AAUjCC,EAAAA,UAViC,wBAUpB;AACX,eAAOH,YAAP;;;AAGD,GAdgC;;AAgBjCI,EAAAA,cAhBiC,4BAgBhB;AACf,eAAOJ,YAAP;;;AAGD,GApBgC;;AAsBjCK,EAAAA,0BAtBiC,wCAsBJ;AAC3B,eAAOL,YAAP;;;;AAID,GA3BgC;;AA6BjCM,EAAAA,eA7BiC,2BA6BjBP,CA7BiB,EA6BP;AACxB,eAAOC,YAAP;AACa,kCAAWD,CAAX,IAAgBA,CAAC,CAACG,YAAlB,GAAiC,CAD9C;;AAGD,GAjCgC;;AAmCjCK,EAAAA,MAnCiC,kBAmC1BR,CAnC0B,EAmChB;AACf,eAAOC,YAAP;AACYD,IAAAA,CAAC,CAACS,UADd;AAEgBT,IAAAA,CAAC,CAACU,UAFlB;;AAID,GAxCgC,EAAb,CAAf,C","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\nimport { is8pxTheme } from '../../lib/theming/ThemeHelpers';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n background: ${t.menuBgDefault};\n box-sizing: content-box;\n overflow: auto;\n padding: ${is8pxTheme(t) ? 0 : t.menuPaddingY} 0;\n `;\n },\n\n alignRight() {\n return css`\n flex: 1 1 100%;\n `;\n },\n\n alignRightIE11() {\n return css`\n float: right;\n `;\n },\n\n alignRightIE11DefaultWidth() {\n return css`\n box-sizing: border-box !important; // override root styles\n overflow: hidden !important; // override root styles\n `;\n },\n\n scrollContainer(t: Theme) {\n return css`\n padding: ${is8pxTheme(t) ? t.menuPaddingY : 0} 0;\n `;\n },\n\n shadow(t: Theme) {\n return css`\n border: ${t.menuBorder};\n box-shadow: ${t.menuShadow};\n `;\n },\n});\n"]}
1
+ {"version":3,"sources":["Menu.styles.ts"],"names":["styles","root","t","css","menuBgDefault","menuPaddingY","alignRight","alignRightIE11","alignRightIE11FixAutoWidth","scrollContainer","shadow","menuBorder","menuShadow"],"mappings":"4QAAA;;AAEA,8D;;AAEO,IAAMA,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,eAAOC,YAAP;AACgBD,IAAAA,CAAC,CAACE,aADlB;;;AAIa,kCAAWF,CAAX,IAAgB,CAAhB,GAAoBA,CAAC,CAACG,YAJnC;;AAMD,GARgC;;AAUjCC,EAAAA,UAViC,wBAUpB;AACX,eAAOH,YAAP;;;AAGD,GAdgC;;AAgBjCI,EAAAA,cAhBiC,4BAgBhB;AACf,eAAOJ,YAAP;;;;AAID,GArBgC;;AAuBjCK,EAAAA,0BAvBiC,wCAuBJ;AAC3B,eAAOL,YAAP;;;;AAID,GA5BgC;;AA8BjCM,EAAAA,eA9BiC,2BA8BjBP,CA9BiB,EA8BP;AACxB,eAAOC,YAAP;AACa,kCAAWD,CAAX,IAAgBA,CAAC,CAACG,YAAlB,GAAiC,CAD9C;;AAGD,GAlCgC;;AAoCjCK,EAAAA,MApCiC,kBAoC1BR,CApC0B,EAoChB;AACf,eAAOC,YAAP;AACYD,IAAAA,CAAC,CAACS,UADd;AAEgBT,IAAAA,CAAC,CAACU,UAFlB;;AAID,GAzCgC,EAAb,CAAf,C","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\nimport { is8pxTheme } from '../../lib/theming/ThemeHelpers';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n background: ${t.menuBgDefault};\n box-sizing: content-box;\n overflow: auto;\n padding: ${is8pxTheme(t) ? 0 : t.menuPaddingY} 0;\n `;\n },\n\n alignRight() {\n return css`\n flex: 1 1 100%;\n `;\n },\n\n alignRightIE11() {\n return css`\n float: right;\n width: 100%;\n `;\n },\n\n alignRightIE11FixAutoWidth() {\n return css`\n box-sizing: border-box !important; // override root styles\n overflow: hidden !important; // override root styles\n `;\n },\n\n scrollContainer(t: Theme) {\n return css`\n padding: ${is8pxTheme(t) ? t.menuPaddingY : 0} 0;\n `;\n },\n\n shadow(t: Theme) {\n return css`\n border: ${t.menuBorder};\n box-shadow: ${t.menuShadow};\n `;\n },\n});\n"]}
@@ -285,6 +285,8 @@ Popup = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
285
285
 
286
286
 
287
287
 
288
+
289
+
288
290
 
289
291
 
290
292
 
@@ -499,7 +501,7 @@ Popup = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
499
501
  // or relay on findDOMNode (inside getRootNode)
500
502
  // which should be called with RenderContainer's ref
501
503
  // in the case when the anchor is not refable
502
- return /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, { anchor: anchorWithRef || anchor, ref: anchorWithRef ? null : this.renderContainerRef }, location && this.renderContent(location));};_proto.updateAnchorElement = function updateAnchorElement(childInstance) {var childDomNode = (0, _rootNode.getRootNode)(childInstance);var anchorElement = this.anchorElement;if (childDomNode !== anchorElement) {this.removeEventListeners(anchorElement);this.anchorElement = childDomNode;this.addEventListeners(childDomNode);this.setRootNode(childDomNode);}};_proto.addEventListeners = function addEventListeners(element) {if (element && (0, _SSRSafe.isHTMLElement)(element)) {element.addEventListener('mouseenter', this.handleMouseEnter);element.addEventListener('mouseleave', this.handleMouseLeave);element.addEventListener('click', this.handleClick);element.addEventListener('focusin', this.handleFocus);element.addEventListener('focusout', this.handleBlur);}};_proto.removeEventListeners = function removeEventListeners(element) {if (element && (0, _SSRSafe.isHTMLElement)(element)) {element.removeEventListener('mouseenter', this.handleMouseEnter);element.removeEventListener('mouseleave', this.handleMouseLeave);element.removeEventListener('click', this.handleClick);element.removeEventListener('focusin', this.handleFocus);element.removeEventListener('focusout', this.handleBlur);}};_proto.renderContent = function renderContent(location) {var _this4 = this;var _this$props2 = this.props,backgroundColor = _this$props2.backgroundColor,disableAnimations = _this$props2.disableAnimations,maxWidth = _this$props2.maxWidth,hasShadow = _this$props2.hasShadow,ignoreHover = _this$props2.ignoreHover,opened = _this$props2.opened,width = _this$props2.width;var children = this.renderChildren();var _PopupHelper$getPosit = _PopupHelper.PopupHelper.getPositionObject(location.position),direction = _PopupHelper$getPosit.direction;var rootStyle = (0, _extends3.default)({}, location.coordinates, { maxWidth: maxWidth });var shouldFallbackShadow = _client.isIE11 || _client.isEdge || _client.isSafari;return /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.Transition, { timeout: TRANSITION_TIMEOUT, appear: !disableAnimations, in: Boolean(opened && children), mountOnEnter: true, unmountOnExit: true, enter: !disableAnimations, exit: !disableAnimations, onExited: this.resetLocation, nodeRef: this.refForTransition }, function (state) {var _extends2, _ref;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, _this4.props, /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { wrapperRef: _this4.refPopupElement, priority: 'Popup', className: (0, _Emotion.cx)((0, _extends3.default)((_extends2 = {}, _extends2[_Popup.styles.popup(_this4.theme)] = true, _extends2[_Popup.styles.shadow(_this4.theme)] = hasShadow && !shouldFallbackShadow, _extends2[_Popup.styles.shadowFallback(_this4.theme)] = hasShadow && shouldFallbackShadow, _extends2[_Popup.styles.popupIgnoreHover()] = ignoreHover, _extends2), disableAnimations ? {} : (_ref = {}, _ref[_Popup.styles["transition-enter-" + direction](_this4.theme)] = true, _ref[_Popup.styles.transitionEnter()] = state === 'entering', _ref[_Popup.styles.transitionEnterActive()] = state === 'entered', _ref[_Popup.styles.transitionExit()] = state === 'exiting', _ref))), style: rootStyle, onMouseEnter: _this4.handleMouseEnter, onMouseLeave: _this4.handleMouseLeave }, /*#__PURE__*/_react.default.createElement("div", { className: _Popup.styles.content(_this4.theme), "data-tid": 'PopupContent', ref: _this4.refForTransition }, /*#__PURE__*/_react.default.createElement("div", { className: _Popup.styles.contentInner(_this4.theme), style: { backgroundColor: backgroundColor, width: _this4.calculateWidth(width) }, "data-tid": 'PopupContentInner' }, children)), _this4.renderPin(location.position)));});};_proto.renderChildren = function renderChildren() {return (0, _utils.isFunction)(this.props.children) ? this.props.children() : this.props.children;};_proto.renderPin = function renderPin(positionName) {/**
504
+ var canGetAnchorNode = !!anchorWithRef || (0, _SSRSafe.isHTMLElement)(anchorElement);return /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, { anchor: anchorWithRef || anchor, ref: canGetAnchorNode ? null : this.renderContainerRef }, location && this.renderContent(location));};_proto.updateAnchorElement = function updateAnchorElement(childInstance) {var childDomNode = (0, _rootNode.getRootNode)(childInstance);var anchorElement = this.anchorElement;if (childDomNode !== anchorElement) {this.removeEventListeners(anchorElement);this.anchorElement = childDomNode;this.addEventListeners(childDomNode);this.setRootNode(childDomNode);}};_proto.addEventListeners = function addEventListeners(element) {if (element && (0, _SSRSafe.isHTMLElement)(element)) {element.addEventListener('mouseenter', this.handleMouseEnter);element.addEventListener('mouseleave', this.handleMouseLeave);element.addEventListener('click', this.handleClick);element.addEventListener('focusin', this.handleFocus);element.addEventListener('focusout', this.handleBlur);}};_proto.removeEventListeners = function removeEventListeners(element) {if (element && (0, _SSRSafe.isHTMLElement)(element)) {element.removeEventListener('mouseenter', this.handleMouseEnter);element.removeEventListener('mouseleave', this.handleMouseLeave);element.removeEventListener('click', this.handleClick);element.removeEventListener('focusin', this.handleFocus);element.removeEventListener('focusout', this.handleBlur);}};_proto.renderContent = function renderContent(location) {var _this4 = this;var _this$props2 = this.props,backgroundColor = _this$props2.backgroundColor,disableAnimations = _this$props2.disableAnimations,maxWidth = _this$props2.maxWidth,hasShadow = _this$props2.hasShadow,ignoreHover = _this$props2.ignoreHover,opened = _this$props2.opened,width = _this$props2.width;var children = this.renderChildren();var _PopupHelper$getPosit = _PopupHelper.PopupHelper.getPositionObject(location.position),direction = _PopupHelper$getPosit.direction;var rootStyle = (0, _extends3.default)({}, location.coordinates, { maxWidth: maxWidth });var shouldFallbackShadow = _client.isIE11 || _client.isEdge || _client.isSafari;return /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.Transition, { timeout: TRANSITION_TIMEOUT, appear: !disableAnimations, in: Boolean(opened && children), mountOnEnter: true, unmountOnExit: true, enter: !disableAnimations, exit: !disableAnimations, onExited: this.resetLocation, nodeRef: this.refForTransition }, function (state) {var _extends2, _ref;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, _this4.props, /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { wrapperRef: _this4.refPopupElement, priority: 'Popup', className: (0, _Emotion.cx)((0, _extends3.default)((_extends2 = {}, _extends2[_Popup.styles.popup(_this4.theme)] = true, _extends2[_Popup.styles.shadow(_this4.theme)] = hasShadow && !shouldFallbackShadow, _extends2[_Popup.styles.shadowFallback(_this4.theme)] = hasShadow && shouldFallbackShadow, _extends2[_Popup.styles.popupIgnoreHover()] = ignoreHover, _extends2), disableAnimations ? {} : (_ref = {}, _ref[_Popup.styles["transition-enter-" + direction](_this4.theme)] = true, _ref[_Popup.styles.transitionEnter()] = state === 'entering', _ref[_Popup.styles.transitionEnterActive()] = state === 'entered', _ref[_Popup.styles.transitionExit()] = state === 'exiting', _ref))), style: rootStyle, onMouseEnter: _this4.handleMouseEnter, onMouseLeave: _this4.handleMouseLeave }, /*#__PURE__*/_react.default.createElement("div", { className: _Popup.styles.content(_this4.theme), "data-tid": 'PopupContent', ref: _this4.refForTransition }, /*#__PURE__*/_react.default.createElement("div", { className: _Popup.styles.contentInner(_this4.theme), style: { backgroundColor: backgroundColor, width: _this4.calculateWidth(width) }, "data-tid": 'PopupContentInner' }, children)), _this4.renderPin(location.position)));});};_proto.renderChildren = function renderChildren() {return (0, _utils.isFunction)(this.props.children) ? this.props.children() : this.props.children;};_proto.renderPin = function renderPin(positionName) {/**
503
505
  * Box-shadow does not appear under the pin. Borders are used instead.
504
506
  * In non-ie browsers drop-shadow filter is used. It is applying
505
507
  * shadow to the pin too.