@skbkontur/react-ui 4.12.0 → 4.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +2 -1
- package/cjs/components/Button/Button.d.ts +5 -1
- package/cjs/components/Button/Button.js +8 -2
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.d.ts +5 -1
- package/cjs/components/Checkbox/Checkbox.js +8 -3
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/ComboBox/ComboBox.d.ts +5 -1
- package/cjs/components/ComboBox/ComboBox.js +5 -0
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/Dropdown/Dropdown.d.ts +5 -1
- package/cjs/components/Dropdown/Dropdown.js +7 -1
- package/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +5 -1
- package/cjs/components/Input/Input.js +9 -3
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Kebab/Kebab.d.ts +5 -1
- package/cjs/components/Kebab/Kebab.js +6 -1
- package/cjs/components/Kebab/Kebab.js.map +1 -1
- package/cjs/components/MenuItem/MenuItem.d.ts +5 -1
- package/cjs/components/MenuItem/MenuItem.js +9 -3
- package/cjs/components/MenuItem/MenuItem.js.map +1 -1
- package/cjs/components/RadioGroup/RadioGroup.d.ts +5 -1
- package/cjs/components/RadioGroup/RadioGroup.js +14 -2
- package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollBar.d.ts +8 -2
- package/cjs/components/ScrollContainer/ScrollBar.js +45 -6
- package/cjs/components/ScrollContainer/ScrollBar.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.constants.js +3 -2
- package/cjs/components/ScrollContainer/ScrollContainer.constants.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.d.ts +13 -1
- package/cjs/components/ScrollContainer/ScrollContainer.js +31 -7
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.md +24 -1
- package/cjs/components/ScrollContainer/ScrollContainer.styles.d.ts +5 -0
- package/cjs/components/ScrollContainer/ScrollContainer.styles.js +38 -9
- package/cjs/components/ScrollContainer/ScrollContainer.styles.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +6 -1
- package/cjs/components/Select/Select.js +9 -2
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/Sticky/Sticky.d.ts +1 -1
- package/cjs/components/Sticky/Sticky.js +1 -1
- package/cjs/components/Sticky/Sticky.js.map +1 -1
- package/cjs/components/Tabs/Tab.d.ts +5 -1
- package/cjs/components/Tabs/Tab.js +7 -1
- package/cjs/components/Tabs/Tab.js.map +1 -1
- package/cjs/components/Tabs/Tabs.d.ts +5 -1
- package/cjs/components/Tabs/Tabs.js +7 -1
- package/cjs/components/Tabs/Tabs.js.map +1 -1
- package/cjs/components/Toggle/Toggle.d.ts +5 -1
- package/cjs/components/Toggle/Toggle.js +6 -1
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/components/Token/Token.d.ts +5 -1
- package/cjs/components/Token/Token.js +7 -1
- package/cjs/components/Token/Token.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +5 -1
- package/cjs/components/TokenInput/TokenInput.js +17 -2
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +2 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js +5 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +2 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.js +3 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/cjs/internal/InputLikeText/InputLikeText.d.ts +1 -0
- package/cjs/internal/InputLikeText/InputLikeText.js +12 -4
- package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
- package/cjs/lib/currentEnvironment.js +33 -12
- package/cjs/lib/currentEnvironment.js.map +1 -1
- package/components/Button/Button/Button.js +5 -2
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +5 -1
- package/components/Checkbox/Checkbox/Checkbox.js +5 -2
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +5 -1
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +5 -1
- package/components/Dropdown/Dropdown/Dropdown.js +2 -1
- package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +5 -1
- package/components/Input/Input/Input.js +4 -2
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +5 -1
- package/components/Kebab/Kebab/Kebab.js +2 -1
- package/components/Kebab/Kebab/Kebab.js.map +1 -1
- package/components/Kebab/Kebab.d.ts +5 -1
- package/components/MenuItem/MenuItem/MenuItem.js +4 -2
- package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
- package/components/MenuItem/MenuItem.d.ts +5 -1
- package/components/RadioGroup/RadioGroup/RadioGroup.js +10 -4
- package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +5 -1
- package/components/ScrollContainer/ScrollBar/ScrollBar.js +46 -7
- package/components/ScrollContainer/ScrollBar/ScrollBar.js.map +1 -1
- package/components/ScrollContainer/ScrollBar.d.ts +8 -2
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +18 -7
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.constants/ScrollContainer.constants.js +3 -2
- package/components/ScrollContainer/ScrollContainer.constants/ScrollContainer.constants.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +13 -1
- package/components/ScrollContainer/ScrollContainer.md +24 -1
- package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js +24 -9
- package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.styles.d.ts +5 -0
- package/components/Select/Select/Select.js +4 -2
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +6 -1
- package/components/Sticky/Sticky/Sticky.js +1 -1
- package/components/Sticky/Sticky/Sticky.js.map +1 -1
- package/components/Sticky/Sticky.d.ts +1 -1
- package/components/Tabs/Tab/Tab.js +4 -2
- package/components/Tabs/Tab/Tab.js.map +1 -1
- package/components/Tabs/Tab.d.ts +5 -1
- package/components/Tabs/Tabs/Tabs.js +4 -2
- package/components/Tabs/Tabs/Tabs.js.map +1 -1
- package/components/Tabs/Tabs.d.ts +5 -1
- package/components/Toggle/Toggle/Toggle.js +4 -2
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +5 -1
- package/components/Token/Token/Token.js +2 -0
- package/components/Token/Token/Token.js.map +1 -1
- package/components/Token/Token.d.ts +5 -1
- package/components/TokenInput/TokenInput/TokenInput.js +4 -2
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +5 -1
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +6 -3
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.d.ts +2 -1
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +1 -0
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/CustomComboBox/CustomComboBox.d.ts +2 -1
- package/internal/InputLikeText/InputLikeText/InputLikeText.js +8 -3
- package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
- package/internal/InputLikeText/InputLikeText.d.ts +1 -0
- package/lib/currentEnvironment/currentEnvironment.js +34 -14
- package/lib/currentEnvironment/currentEnvironment.js.map +1 -1
- package/package.json +8 -7
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.styles = exports.globalClasses = void 0;var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _Emotion = require("../../lib/theming/Emotion");var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11;
|
|
1
|
+
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.styles = exports.globalClasses = void 0;var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _Emotion = require("../../lib/theming/Emotion");var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16;
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
var globalClasses = (0, _Emotion.prefix)('scroll-container')({
|
|
@@ -46,23 +46,30 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
46
46
|
},
|
|
47
47
|
|
|
48
48
|
scrollBar: function scrollBar(t) {
|
|
49
|
-
return (0, _Emotion.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["\n position: absolute;\n z-index: 200;\n border-radius: 5px;\n background: ", ";\n "])),
|
|
49
|
+
return (0, _Emotion.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["\n position: absolute;\n z-index: 200;\n border-radius: 5px;\n background: ", ";\n opacity: 0;\n "])),
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
t.scrollContainerScrollBarColor);
|
|
54
54
|
|
|
55
|
+
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
visibleScrollBar: function visibleScrollBar() {
|
|
59
|
+
return (0, _Emotion.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteralLoose2.default)(["\n opacity: 1;\n "])));
|
|
60
|
+
|
|
61
|
+
|
|
55
62
|
},
|
|
56
63
|
|
|
57
64
|
scrollBarInvert: function scrollBarInvert(t) {
|
|
58
|
-
return (0, _Emotion.css)(
|
|
65
|
+
return (0, _Emotion.css)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteralLoose2.default)(["\n background: #ccc;\n background: ", ";\n "])),
|
|
59
66
|
|
|
60
67
|
t.scrollContainerScrollBarInvertColor);
|
|
61
68
|
|
|
62
69
|
},
|
|
63
70
|
|
|
64
71
|
scrollBarContainerY: function scrollBarContainerY() {
|
|
65
|
-
return (0, _Emotion.css)(
|
|
72
|
+
return (0, _Emotion.css)(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteralLoose2.default)(["\n position: absolute;\n right: 2px;\n top: 1px;\n bottom: 1px;\n width: 0;\n "])));
|
|
66
73
|
|
|
67
74
|
|
|
68
75
|
|
|
@@ -72,7 +79,7 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
72
79
|
},
|
|
73
80
|
|
|
74
81
|
scrollBarY: function scrollBarY(t) {
|
|
75
|
-
return (0, _Emotion.css)(
|
|
82
|
+
return (0, _Emotion.css)(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteralLoose2.default)(["\n right: 0;\n transition: width 0.2s;\n width: ", ";\n "])),
|
|
76
83
|
|
|
77
84
|
|
|
78
85
|
t.scrollContainerScrollBarSize);
|
|
@@ -80,13 +87,13 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
80
87
|
},
|
|
81
88
|
|
|
82
89
|
scrollBarYHover: function scrollBarYHover(t) {
|
|
83
|
-
return (0, _Emotion.css)(
|
|
90
|
+
return (0, _Emotion.css)(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteralLoose2.default)(["\n width: ", ";\n "])),
|
|
84
91
|
t.scrollContainerScrollBarHoverSize);
|
|
85
92
|
|
|
86
93
|
},
|
|
87
94
|
|
|
88
95
|
scrollBarContainerX: function scrollBarContainerX(t) {
|
|
89
|
-
return (0, _Emotion.css)(
|
|
96
|
+
return (0, _Emotion.css)(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteralLoose2.default)(["\n position: absolute;\n right: 1px;\n bottom: 1px;\n left: 1px;\n height: 0;\n\n .", " ~ & {\n margin-right: calc(", " + 3px) !important;\n }\n\n & ~ .", " {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(", " + 2px);\n }\n }\n "])),
|
|
90
97
|
|
|
91
98
|
|
|
92
99
|
|
|
@@ -109,7 +116,7 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
109
116
|
},
|
|
110
117
|
|
|
111
118
|
scrollBarX: function scrollBarX(t) {
|
|
112
|
-
return (0, _Emotion.css)(
|
|
119
|
+
return (0, _Emotion.css)(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteralLoose2.default)(["\n bottom: 0;\n transition: height 0.2s;\n height: ", ";\n "])),
|
|
113
120
|
|
|
114
121
|
|
|
115
122
|
t.scrollContainerScrollBarSize);
|
|
@@ -117,7 +124,29 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
117
124
|
},
|
|
118
125
|
|
|
119
126
|
scrollBarXHover: function scrollBarXHover(t) {
|
|
120
|
-
return (0, _Emotion.css)(
|
|
127
|
+
return (0, _Emotion.css)(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteralLoose2.default)(["\n height: ", ";\n "])),
|
|
121
128
|
t.scrollContainerScrollBarHoverSize);
|
|
122
129
|
|
|
130
|
+
},
|
|
131
|
+
transition: function transition() {
|
|
132
|
+
return (0, _Emotion.css)(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteralLoose2.default)(["\n opacity: 0 !important; //override scrollBar opacity\n "])));
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
},
|
|
136
|
+
transitionActive: function transitionActive() {
|
|
137
|
+
return (0, _Emotion.css)(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteralLoose2.default)(["\n transition: opacity 100ms ease-out !important; //override scrollBarX and scrollBarY transition\n opacity: 1 !important; //override scrollBar opacity\n "])));
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
},
|
|
142
|
+
transitionLeave: function transitionLeave() {
|
|
143
|
+
return (0, _Emotion.css)(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteralLoose2.default)(["\n opacity: 1 !important; //override scrollBar opacity\n "])));
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
},
|
|
147
|
+
transitionLeaveActive: function transitionLeaveActive() {
|
|
148
|
+
return (0, _Emotion.css)(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteralLoose2.default)(["\n opacity: 0 !important; //override scrollBar opacity\n transition: opacity 300ms ease-out !important; //override scrollBarX and scrollBarY transition\n "])));
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
123
152
|
} });exports.styles = styles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScrollContainer.styles.ts"],"names":["globalClasses","scrollbarX","scrollbarY","scrollbarContainerX","scrollbarContainerY","inner","styles","root","css","innerIE11","scrollBar","t","scrollContainerScrollBarColor","scrollBarInvert","scrollContainerScrollBarInvertColor","scrollBarContainerY","scrollBarY","scrollContainerScrollBarSize","scrollBarYHover","scrollContainerScrollBarHoverSize","scrollBarContainerX","scrollBarX","scrollBarXHover"],"mappings":"oSAAA,oD;;;AAGO,IAAMA,aAAa,GAAG,qBAAO,kBAAP,EAA2B;AACtDC,EAAAA,UAAU,EAAE,aAD0C;AAEtDC,EAAAA,UAAU,EAAE,aAF0C;AAGtDC,EAAAA,mBAAmB,EAAE,uBAHiC;AAItDC,EAAAA,mBAAmB,EAAE,uBAJiC;AAKtDC,EAAAA,KAAK,EAAE,OAL+C,EAA3B,CAAtB,C;;;AAQA,IAAMC,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,kBAC1B;AACL,eAAOC,YAAP;;;;;AAKD,GAPgC;;AASjCH,EAAAA,KATiC,mBASzB;AACN,eAAOG,YAAP;;;;;;;;;;;;;;AAcD,GAxBgC;;AA0BjCC,EAAAA,SA1BiC,uBA0BrB;AACV,eAAOD,YAAP;;;;;;;AAOD,GAlCgC;;AAoCjCE,EAAAA,SApCiC,qBAoCvBC,CApCuB,EAoCb;AAClB,eAAOH,YAAP;;;;AAIgBG,IAAAA,CAAC,CAACC,6BAJlB;;
|
|
1
|
+
{"version":3,"sources":["ScrollContainer.styles.ts"],"names":["globalClasses","scrollbarX","scrollbarY","scrollbarContainerX","scrollbarContainerY","inner","styles","root","css","innerIE11","scrollBar","t","scrollContainerScrollBarColor","visibleScrollBar","scrollBarInvert","scrollContainerScrollBarInvertColor","scrollBarContainerY","scrollBarY","scrollContainerScrollBarSize","scrollBarYHover","scrollContainerScrollBarHoverSize","scrollBarContainerX","scrollBarX","scrollBarXHover","transition","transitionActive","transitionLeave","transitionLeaveActive"],"mappings":"oSAAA,oD;;;AAGO,IAAMA,aAAa,GAAG,qBAAO,kBAAP,EAA2B;AACtDC,EAAAA,UAAU,EAAE,aAD0C;AAEtDC,EAAAA,UAAU,EAAE,aAF0C;AAGtDC,EAAAA,mBAAmB,EAAE,uBAHiC;AAItDC,EAAAA,mBAAmB,EAAE,uBAJiC;AAKtDC,EAAAA,KAAK,EAAE,OAL+C,EAA3B,CAAtB,C;;;AAQA,IAAMC,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,kBAC1B;AACL,eAAOC,YAAP;;;;;AAKD,GAPgC;;AASjCH,EAAAA,KATiC,mBASzB;AACN,eAAOG,YAAP;;;;;;;;;;;;;;AAcD,GAxBgC;;AA0BjCC,EAAAA,SA1BiC,uBA0BrB;AACV,eAAOD,YAAP;;;;;;;AAOD,GAlCgC;;AAoCjCE,EAAAA,SApCiC,qBAoCvBC,CApCuB,EAoCb;AAClB,eAAOH,YAAP;;;;AAIgBG,IAAAA,CAAC,CAACC,6BAJlB;;;AAOD,GA5CgC;;AA8CjCC,EAAAA,gBA9CiC,8BA8Cd;AACjB,eAAOL,YAAP;;;AAGD,GAlDgC;;AAoDjCM,EAAAA,eApDiC,2BAoDjBH,CApDiB,EAoDP;AACxB,eAAOH,YAAP;;AAEgBG,IAAAA,CAAC,CAACI,mCAFlB;;AAID,GAzDgC;;AA2DjCC,EAAAA,mBA3DiC,iCA2DX;AACpB,eAAOR,YAAP;;;;;;;AAOD,GAnEgC;;AAqEjCS,EAAAA,UArEiC,sBAqEtBN,CArEsB,EAqEZ;AACnB,eAAOH,YAAP;;;AAGWG,IAAAA,CAAC,CAACO,4BAHb;;AAKD,GA3EgC;;AA6EjCC,EAAAA,eA7EiC,2BA6EjBR,CA7EiB,EA6EP;AACxB,eAAOH,YAAP;AACWG,IAAAA,CAAC,CAACS,iCADb;;AAGD,GAjFgC;;AAmFjCC,EAAAA,mBAnFiC,+BAmFbV,CAnFa,EAmFH;AAC5B,eAAOH,YAAP;;;;;;;AAOKR,IAAAA,aAAa,CAACI,mBAPnB;AAQyBO,IAAAA,CAAC,CAACS,iCAR3B;;;AAWSpB,IAAAA,aAAa,CAACK,KAXvB;;;;;AAgBqBM,IAAAA,CAAC,CAACS,iCAhBvB;;;;AAoBD,GAxGgC;;AA0GjCE,EAAAA,UA1GiC,sBA0GtBX,CA1GsB,EA0GZ;AACnB,eAAOH,YAAP;;;AAGYG,IAAAA,CAAC,CAACO,4BAHd;;AAKD,GAhHgC;;AAkHjCK,EAAAA,eAlHiC,2BAkHjBZ,CAlHiB,EAkHP;AACxB,eAAOH,YAAP;AACYG,IAAAA,CAAC,CAACS,iCADd;;AAGD,GAtHgC;AAuHjCI,EAAAA,UAvHiC,wBAuHpB;AACX,eAAOhB,YAAP;;;AAGD,GA3HgC;AA4HjCiB,EAAAA,gBA5HiC,8BA4Hd;AACjB,eAAOjB,YAAP;;;;AAID,GAjIgC;AAkIjCkB,EAAAA,eAlIiC,6BAkIf;AAChB,eAAOlB,YAAP;;;AAGD,GAtIgC;AAuIjCmB,EAAAA,qBAvIiC,mCAuIT;AACtB,eAAOnB,YAAP;;;;AAID,GA5IgC,EAAb,CAAf,C","sourcesContent":["import { css, memoizeStyle, prefix } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const globalClasses = prefix('scroll-container')({\n scrollbarX: 'scrollbar-x',\n scrollbarY: 'scrollbar-y',\n scrollbarContainerX: 'scrollbar-container-x',\n scrollbarContainerY: 'scrollbar-container-y',\n inner: 'inner',\n});\n\nexport const styles = memoizeStyle({\n root() {\n return css`\n height: 100%;\n overflow: hidden;\n position: relative;\n `;\n },\n\n inner() {\n return css`\n position: relative;\n overflow: scroll;\n max-height: 100%;\n max-width: 100%;\n\n /* Hide scrobars without losing functionality */\n scrollbar-width: none;\n -ms-overflow-style: none;\n &::-webkit-scrollbar {\n width: 0;\n height: 0;\n }\n `;\n },\n\n innerIE11() {\n return css`\n /* IE sometimes enabled scroll: http://codepen.io/anon/pen/RRrLNX */\n margin-bottom: -1px;\n padding-bottom: 1px;\n margin-right: -1px;\n padding-right: 1px;\n `;\n },\n\n scrollBar(t: Theme) {\n return css`\n position: absolute;\n z-index: 200;\n border-radius: 5px;\n background: ${t.scrollContainerScrollBarColor};\n opacity: 0;\n `;\n },\n\n visibleScrollBar() {\n return css`\n opacity: 1;\n `;\n },\n\n scrollBarInvert(t: Theme) {\n return css`\n background: #ccc;\n background: ${t.scrollContainerScrollBarInvertColor};\n `;\n },\n\n scrollBarContainerY() {\n return css`\n position: absolute;\n right: 2px;\n top: 1px;\n bottom: 1px;\n width: 0;\n `;\n },\n\n scrollBarY(t: Theme) {\n return css`\n right: 0;\n transition: width 0.2s;\n width: ${t.scrollContainerScrollBarSize};\n `;\n },\n\n scrollBarYHover(t: Theme) {\n return css`\n width: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n\n scrollBarContainerX(t: Theme) {\n return css`\n position: absolute;\n right: 1px;\n bottom: 1px;\n left: 1px;\n height: 0;\n\n .${globalClasses.scrollbarContainerY} ~ & {\n margin-right: calc(${t.scrollContainerScrollBarHoverSize} + 3px) !important;\n }\n\n & ~ .${globalClasses.inner} {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(${t.scrollContainerScrollBarHoverSize} + 2px);\n }\n }\n `;\n },\n\n scrollBarX(t: Theme) {\n return css`\n bottom: 0;\n transition: height 0.2s;\n height: ${t.scrollContainerScrollBarSize};\n `;\n },\n\n scrollBarXHover(t: Theme) {\n return css`\n height: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n transition() {\n return css`\n opacity: 0 !important; //override scrollBar opacity\n `;\n },\n transitionActive() {\n return css`\n transition: opacity 100ms ease-out !important; //override scrollBarX and scrollBarY transition\n opacity: 1 !important; //override scrollBar opacity\n `;\n },\n transitionLeave() {\n return css`\n opacity: 1 !important; //override scrollBar opacity\n `;\n },\n transitionLeaveActive() {\n return css`\n opacity: 0 !important; //override scrollBar opacity\n transition: opacity 300ms ease-out !important; //override scrollBarX and scrollBarY transition\n `;\n },\n});\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { ReactNode, ReactPortal } from 'react';
|
|
1
|
+
import React, { ReactNode, ReactPortal, AriaAttributes } from 'react';
|
|
2
2
|
import { ButtonSize, ButtonUse } from '../Button';
|
|
3
3
|
import { DropdownContainerProps } from '../../internal/DropdownContainer';
|
|
4
4
|
import { Nullable } from '../../typings/utility-types';
|
|
@@ -11,6 +11,7 @@ export interface ButtonParams {
|
|
|
11
11
|
onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;
|
|
12
12
|
opened: boolean;
|
|
13
13
|
isPlaceholder: boolean;
|
|
14
|
+
'aria-describedby'?: AriaAttributes['aria-describedby'];
|
|
14
15
|
}
|
|
15
16
|
export declare const SelectDataTids: {
|
|
16
17
|
readonly root: "Select__root";
|
|
@@ -100,6 +101,10 @@ export interface SelectProps<TValue, TItem> extends CommonProps, Pick<DropdownCo
|
|
|
100
101
|
* Текст заголовка выпадающего меню в мобильной версии
|
|
101
102
|
*/
|
|
102
103
|
mobileMenuHeaderText?: string;
|
|
104
|
+
/**
|
|
105
|
+
* Атрибут для указания id элемента(-ов), описывающих его
|
|
106
|
+
*/
|
|
107
|
+
'aria-describedby'?: AriaAttributes['aria-describedby'];
|
|
103
108
|
}
|
|
104
109
|
export interface SelectState<TValue> {
|
|
105
110
|
opened: boolean;
|
|
@@ -45,6 +45,7 @@ var _selectTheme = require("./selectTheme");var _dec, _class, _class2, _temp;fun
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
|
|
48
|
+
|
|
48
49
|
var PASS_BUTTON_PROPS = {
|
|
49
50
|
disabled: true,
|
|
50
51
|
error: true,
|
|
@@ -168,6 +169,10 @@ var SelectDataTids = {
|
|
|
168
169
|
|
|
169
170
|
|
|
170
171
|
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
171
176
|
|
|
172
177
|
|
|
173
178
|
|
|
@@ -327,7 +332,8 @@ Select = (_dec = (0, _decorators.locale)('Select', _locale.SelectLocaleHelper),
|
|
|
327
332
|
label: label,
|
|
328
333
|
isPlaceholder: isPlaceholder,
|
|
329
334
|
onClick: _this.toggle,
|
|
330
|
-
onKeyDown: _this.handleKey
|
|
335
|
+
onKeyDown: _this.handleKey,
|
|
336
|
+
'aria-describedby': _this.props['aria-describedby'] };
|
|
331
337
|
|
|
332
338
|
|
|
333
339
|
return buttonParams;
|
|
@@ -455,6 +461,7 @@ Select = (_dec = (0, _decorators.locale)('Select', _locale.SelectLocaleHelper),
|
|
|
455
461
|
|
|
456
462
|
|
|
457
463
|
|
|
464
|
+
|
|
458
465
|
|
|
459
466
|
|
|
460
467
|
getSearch = function () {
|
|
@@ -673,7 +680,7 @@ Select = (_dec = (0, _decorators.locale)('Select', _locale.SelectLocaleHelper),
|
|
|
673
680
|
buttonElement;
|
|
674
681
|
};return _this;}var _proto = Select.prototype;_proto.componentDidUpdate = function componentDidUpdate(_prevProps, prevState) {if (!prevState.opened && this.state.opened) {window.addEventListener('popstate', this.close);}if (prevState.opened && !this.state.opened) {window.removeEventListener('popstate', this.close);}};_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: _this2.theme }, _this2.renderMain());});} /**
|
|
675
682
|
* @public
|
|
676
|
-
*/;_proto.getMenuRenderer = function getMenuRenderer() {if (this.props.disabled) {return null;}if (this.isMobileLayout) {return this.renderMobileMenu();}if (this.state.opened) {return this.renderMenu();}return null;};_proto.renderMain = function renderMain() {var _cx;var buttonParams = this.getDefaultButtonParams();var button = /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: (0, _selectTheme.getSelectTheme)(this.theme, this.props) }, this.getButton(buttonParams));var isMobile = this.isMobileLayout;var style = { width: this.props.width, maxWidth: this.props.maxWidth || undefined };var root = /*#__PURE__*/_react.default.createElement("span", { "data-tid": SelectDataTids.root, className: (0, _Emotion.cx)((_cx = {}, _cx[_Select.styles.root()] = true, _cx[_Select.styles.rootMobile(this.theme)] = isMobile, _cx)), style: style }, button, this.getMenuRenderer());return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: this.close, onFocusOutside: this.close, active: isMobile ? false : this.state.opened }, root));};_proto.renderLabel = function renderLabel() {var _this$locale;var value = this.getValue();var item = this.getItemByValue(value);if ((0, _utils.isNonNullable)(value)) {return { label: this.getProps().renderValue(value, item), isPlaceholder: false };}return { label: /*#__PURE__*/_react.default.createElement("span", null, this.props.placeholder || ((_this$locale = this.locale) == null ? void 0 : _this$locale.placeholder)), isPlaceholder: true };};_proto.getLeftIconClass = function getLeftIconClass(size) {if (this.getProps().use === 'link') {return _Select.styles.leftIconLink(this.theme);}switch (size) {case 'large':return _Select.styles.leftIconLarge(this.theme);case 'medium':return _Select.styles.leftIconMedium(this.theme);case 'small':default:return _Select.styles.leftIconSmall(this.theme);}};_proto.renderDefaultButton = function renderDefaultButton(params) {var _cx2, _cx3;var buttonProps = (0, _extends2.default)({}, (0, _filterProps.filterProps)(this.props, PASS_BUTTON_PROPS), { align: 'left', disabled: this.props.disabled, width: '100%', onClick: params.onClick, onKeyDown: params.onKeyDown, active: params.opened });var use = this.getProps().use;var labelProps = { className: (0, _Emotion.cx)((_cx2 = {}, _cx2[_Select.styles.label()] = use !== 'link', _cx2[_Select.styles.placeholder(this.theme)] = params.isPlaceholder, _cx2[_Select.styles.customUsePlaceholder()] = params.isPlaceholder && use !== 'default', _cx2[_Select.styles.placeholderDisabled(this.theme)] = params.isPlaceholder && this.props.disabled, _cx2)), style: { paddingRight: this.getSelectIconGap() } };var useIsCustom = use !== 'default';return /*#__PURE__*/_react.default.createElement(_Button.Button, buttonProps, /*#__PURE__*/_react.default.createElement("div", { className: _Select.styles.selectButtonContainer() }, this.props._icon && /*#__PURE__*/_react.default.createElement("div", { className: this.getLeftIconClass(this.props.size) }, this.props._icon), /*#__PURE__*/_react.default.createElement("span", labelProps, params.label), /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Select.styles.arrowWrap(this.theme), (_cx3 = {}, _cx3[_Select.styles.arrowDisabled(this.theme)] = this.props.disabled, _cx3[_Select.styles.customUseArrow()] = useIsCustom, _cx3)) }, /*#__PURE__*/_react.default.createElement(_px.ArrowChevronDownIcon, null))));};_proto.getSelectIconGap = function getSelectIconGap() {var _this3 = this;var getArrowPadding = function getArrowPadding() {switch (_this3.props.size) {case 'large':return _this3.theme.selectIconGapLarge;case 'medium':return _this3.theme.selectIconGapMedium;case 'small':default:return _this3.theme.selectIconGapSmall;}};var arrowLeftPadding = parseFloat(getArrowPadding()) || 0;return arrowLeftPadding;};_proto.renderMenu = function renderMenu() {var search = this.props.search ? this.getSearch() : null;var value = this.getValue();var hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';return /*#__PURE__*/_react.default.createElement(_DropdownContainer.DropdownContainer, { getParent: this.dropdownContainerGetParent, offsetY: -1, align: this.props.menuAlign, disablePortal: this.props.disablePortal, hasFixedWidth: hasFixedWidth, menuPos: this.props.menuPos }, /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: this.refMenu, width: this.props.menuWidth, onItemClick: this.close, maxHeight: this.props.maxMenuHeight, align: this.props.menuAlign }, search, this.getMenuItems(value)));};_proto.renderMobileMenu = function renderMobileMenu() {var search = this.props.search ? this.getMobileSearch() : null;var value = this.getValue();return /*#__PURE__*/_react.default.createElement(_MobilePopup.MobilePopup, { headerChildComponent: search, caption: this.props.mobileMenuHeaderText, onCloseRequest: this.close, opened: this.state.opened }, /*#__PURE__*/_react.default.createElement(_Menu.Menu, { hasShadow: false, onItemClick: this.close, disableScrollContainer: true, maxHeight: 'auto' }, this.getMenuItems(value)));};_proto.select = function select(value) {this.focus();this.setState({ opened: false, value: value });if (!this.areValuesEqual(this.getValue(), value)) {var _this$props$onValueCh, _this$props;(_this$props$onValueCh = (_this$props = this.props).onValueChange) == null ? void 0 : _this$props$onValueCh.call(_this$props, value);}};_proto.getValue = function getValue() {if (this.props.value !== undefined) {return this.props.value;}return this.state.value;};_proto.mapItems = function mapItems(fn) {var items = this.props.items;if (!items) {return [];}var pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();var result = [];var index = 0;for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {var entry = _step.value;var _normalizeEntry = normalizeEntry(entry),_value = _normalizeEntry[0],_item = _normalizeEntry[1],_comment = _normalizeEntry[2];if (!pattern || this.getProps().filterItem(_value, _item, pattern)) {result.push(fn(_value, _item, index, _comment));++index;}}return result;};_proto.getItemByValue = function getItemByValue(value) {if (value === null || value === undefined) {return null;}var items = this.props.items || [];for (var _iterator2 = _createForOfIteratorHelperLoose(items), _step2; !(_step2 = _iterator2()).done;) {var entry = _step2.value;var _normalizeEntry2 = normalizeEntry(entry),itemValue = _normalizeEntry2[0],_item2 = _normalizeEntry2[1];if (this.areValuesEqual(itemValue, value)) {return _item2;}}return null;};_proto.areValuesEqual = function areValuesEqual(value1, value2) {return (0, _utils.isNonNullable)(value1) && (0, _utils.isNonNullable)(value2) && this.getProps().areValuesEqual(value1, value2);};return Select;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Select', _class2.defaultProps = { renderValue: renderValue, renderItem: renderItem, areValuesEqual: areValuesEqual, filterItem: filterItem, use: 'default' }, _class2.Item = _Item.Item, _class2.SEP = function () {return /*#__PURE__*/_react.default.createElement(_MenuSeparator.MenuSeparator, null);}, _class2.static = function (element) {(0, _invariant.default)( /*#__PURE__*/_react.default.isValidElement(element) || typeof element === 'function', 'Select.static(element) expects element to be a valid react element.');return element;}, _temp)) || _class) || _class) || _class);exports.Select = Select;
|
|
683
|
+
*/;_proto.getMenuRenderer = function getMenuRenderer() {if (this.props.disabled) {return null;}if (this.isMobileLayout) {return this.renderMobileMenu();}if (this.state.opened) {return this.renderMenu();}return null;};_proto.renderMain = function renderMain() {var _cx;var buttonParams = this.getDefaultButtonParams();var button = /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: (0, _selectTheme.getSelectTheme)(this.theme, this.props) }, this.getButton(buttonParams));var isMobile = this.isMobileLayout;var style = { width: this.props.width, maxWidth: this.props.maxWidth || undefined };var root = /*#__PURE__*/_react.default.createElement("span", { "data-tid": SelectDataTids.root, className: (0, _Emotion.cx)((_cx = {}, _cx[_Select.styles.root()] = true, _cx[_Select.styles.rootMobile(this.theme)] = isMobile, _cx)), style: style }, button, this.getMenuRenderer());return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: this.close, onFocusOutside: this.close, active: isMobile ? false : this.state.opened }, root));};_proto.renderLabel = function renderLabel() {var _this$locale;var value = this.getValue();var item = this.getItemByValue(value);if ((0, _utils.isNonNullable)(value)) {return { label: this.getProps().renderValue(value, item), isPlaceholder: false };}return { label: /*#__PURE__*/_react.default.createElement("span", null, this.props.placeholder || ((_this$locale = this.locale) == null ? void 0 : _this$locale.placeholder)), isPlaceholder: true };};_proto.getLeftIconClass = function getLeftIconClass(size) {if (this.getProps().use === 'link') {return _Select.styles.leftIconLink(this.theme);}switch (size) {case 'large':return _Select.styles.leftIconLarge(this.theme);case 'medium':return _Select.styles.leftIconMedium(this.theme);case 'small':default:return _Select.styles.leftIconSmall(this.theme);}};_proto.renderDefaultButton = function renderDefaultButton(params) {var _cx2, _cx3;var buttonProps = (0, _extends2.default)({}, (0, _filterProps.filterProps)(this.props, PASS_BUTTON_PROPS), { align: 'left', disabled: this.props.disabled, width: '100%', onClick: params.onClick, onKeyDown: params.onKeyDown, active: params.opened, 'aria-describedby': params['aria-describedby'] });var use = this.getProps().use;var labelProps = { className: (0, _Emotion.cx)((_cx2 = {}, _cx2[_Select.styles.label()] = use !== 'link', _cx2[_Select.styles.placeholder(this.theme)] = params.isPlaceholder, _cx2[_Select.styles.customUsePlaceholder()] = params.isPlaceholder && use !== 'default', _cx2[_Select.styles.placeholderDisabled(this.theme)] = params.isPlaceholder && this.props.disabled, _cx2)), style: { paddingRight: this.getSelectIconGap() } };var useIsCustom = use !== 'default';return /*#__PURE__*/_react.default.createElement(_Button.Button, buttonProps, /*#__PURE__*/_react.default.createElement("div", { className: _Select.styles.selectButtonContainer() }, this.props._icon && /*#__PURE__*/_react.default.createElement("div", { className: this.getLeftIconClass(this.props.size) }, this.props._icon), /*#__PURE__*/_react.default.createElement("span", labelProps, params.label), /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Select.styles.arrowWrap(this.theme), (_cx3 = {}, _cx3[_Select.styles.arrowDisabled(this.theme)] = this.props.disabled, _cx3[_Select.styles.customUseArrow()] = useIsCustom, _cx3)) }, /*#__PURE__*/_react.default.createElement(_px.ArrowChevronDownIcon, null))));};_proto.getSelectIconGap = function getSelectIconGap() {var _this3 = this;var getArrowPadding = function getArrowPadding() {switch (_this3.props.size) {case 'large':return _this3.theme.selectIconGapLarge;case 'medium':return _this3.theme.selectIconGapMedium;case 'small':default:return _this3.theme.selectIconGapSmall;}};var arrowLeftPadding = parseFloat(getArrowPadding()) || 0;return arrowLeftPadding;};_proto.renderMenu = function renderMenu() {var search = this.props.search ? this.getSearch() : null;var value = this.getValue();var hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';return /*#__PURE__*/_react.default.createElement(_DropdownContainer.DropdownContainer, { getParent: this.dropdownContainerGetParent, offsetY: -1, align: this.props.menuAlign, disablePortal: this.props.disablePortal, hasFixedWidth: hasFixedWidth, menuPos: this.props.menuPos }, /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: this.refMenu, width: this.props.menuWidth, onItemClick: this.close, maxHeight: this.props.maxMenuHeight, align: this.props.menuAlign }, search, this.getMenuItems(value)));};_proto.renderMobileMenu = function renderMobileMenu() {var search = this.props.search ? this.getMobileSearch() : null;var value = this.getValue();return /*#__PURE__*/_react.default.createElement(_MobilePopup.MobilePopup, { headerChildComponent: search, caption: this.props.mobileMenuHeaderText, onCloseRequest: this.close, opened: this.state.opened }, /*#__PURE__*/_react.default.createElement(_Menu.Menu, { hasShadow: false, onItemClick: this.close, disableScrollContainer: true, maxHeight: 'auto' }, this.getMenuItems(value)));};_proto.select = function select(value) {this.focus();this.setState({ opened: false, value: value });if (!this.areValuesEqual(this.getValue(), value)) {var _this$props$onValueCh, _this$props;(_this$props$onValueCh = (_this$props = this.props).onValueChange) == null ? void 0 : _this$props$onValueCh.call(_this$props, value);}};_proto.getValue = function getValue() {if (this.props.value !== undefined) {return this.props.value;}return this.state.value;};_proto.mapItems = function mapItems(fn) {var items = this.props.items;if (!items) {return [];}var pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();var result = [];var index = 0;for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {var entry = _step.value;var _normalizeEntry = normalizeEntry(entry),_value = _normalizeEntry[0],_item = _normalizeEntry[1],_comment = _normalizeEntry[2];if (!pattern || this.getProps().filterItem(_value, _item, pattern)) {result.push(fn(_value, _item, index, _comment));++index;}}return result;};_proto.getItemByValue = function getItemByValue(value) {if (value === null || value === undefined) {return null;}var items = this.props.items || [];for (var _iterator2 = _createForOfIteratorHelperLoose(items), _step2; !(_step2 = _iterator2()).done;) {var entry = _step2.value;var _normalizeEntry2 = normalizeEntry(entry),itemValue = _normalizeEntry2[0],_item2 = _normalizeEntry2[1];if (this.areValuesEqual(itemValue, value)) {return _item2;}}return null;};_proto.areValuesEqual = function areValuesEqual(value1, value2) {return (0, _utils.isNonNullable)(value1) && (0, _utils.isNonNullable)(value2) && this.getProps().areValuesEqual(value1, value2);};return Select;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Select', _class2.defaultProps = { renderValue: renderValue, renderItem: renderItem, areValuesEqual: areValuesEqual, filterItem: filterItem, use: 'default' }, _class2.Item = _Item.Item, _class2.SEP = function () {return /*#__PURE__*/_react.default.createElement(_MenuSeparator.MenuSeparator, null);}, _class2.static = function (element) {(0, _invariant.default)( /*#__PURE__*/_react.default.isValidElement(element) || typeof element === 'function', 'Select.static(element) expects element to be a valid react element.');return element;}, _temp)) || _class) || _class) || _class);exports.Select = Select;
|
|
677
684
|
function renderValue(value, item) {
|
|
678
685
|
return item;
|
|
679
686
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Select.tsx"],"names":["PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","SelectDataTids","root","Select","SelectLocaleHelper","responsiveLayout","rootNode","state","opened","value","props","defaultValue","searchPattern","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","renderLabel","label","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","styles","search","focusInput","handleSearch","getMobileSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","React","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","dropdownContainerGetParent","input","setTimeout","refMenu","menu","e","preventDefault","up","down","enter","highlightItem","buttonRef","getButton","button","_renderButton","renderDefaultButton","Children","only","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","theme","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","rootMobile","setRootNode","getValue","getItemByValue","renderValue","placeholder","locale","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","hasFixedWidth","menuWidth","menuAlign","disablePortal","menuPos","maxMenuHeight","mobileMenuHeaderText","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","value1","value2","Component","__KONTUR_REACT_UI__","Item","SEP","static","Array","isArray","getTextFromItem","toString","itemText","indexOf"],"mappings":"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","sourcesContent":["import React, { ReactNode, ReactPortal } from 'react';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem, MenuItemProps } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction, isNonNullable, isReactUINode } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport const SelectDataTids = {\n root: 'Select__root',\n} as const;\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | TValue\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem> extends CommonProps, Pick<DropdownContainerProps, 'menuPos'> {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<SelectItem<TValue, TItem>>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\ntype DefaultProps<TValue, TItem> = Required<\n Pick<SelectProps<TValue, TItem>, 'renderValue' | 'renderItem' | 'areValuesEqual' | 'filterItem' | 'use'>\n>;\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n// Suggested solutions break current behavior\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static defaultProps: DefaultProps<unknown, ReactNode | ReactPortal> = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const button = (\n <ThemeContext.Provider value={getSelectTheme(this.theme, this.props)}>\n {this.getButton(buttonParams)}\n </ThemeContext.Provider>\n );\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span\n data-tid={SelectDataTids.root}\n className={cx({ [styles.root()]: true, [styles.rootMobile(this.theme)]: isMobile })}\n style={style}\n >\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.getProps().use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n const use = this.getProps().use;\n\n const labelProps = {\n className: cx({\n [styles.label()]: use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch() : null;\n\n const value = this.getValue();\n const hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n hasFixedWidth={hasFixedWidth}\n menuPos={this.props.menuPos}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={this.props.menuAlign}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private getSearch = () => {\n return (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getMobileSearch() : null;\n const value = this.getValue();\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu hasShadow={false} onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getMobileSearch = () => {\n return (\n <Input\n autoFocus\n value={this.state.searchPattern}\n ref={this.focusInput}\n onValueChange={this.handleSearch}\n width=\"100%\"\n />\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile } as MenuItemProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (!this.areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange?.(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual(value1, value2);\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: any): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Select.tsx"],"names":["PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","SelectDataTids","root","Select","SelectLocaleHelper","responsiveLayout","rootNode","state","opened","value","props","defaultValue","searchPattern","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","renderLabel","label","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","styles","search","focusInput","handleSearch","getMobileSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","React","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","dropdownContainerGetParent","input","setTimeout","refMenu","menu","e","preventDefault","up","down","enter","highlightItem","buttonRef","getButton","button","_renderButton","renderDefaultButton","Children","only","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","theme","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","rootMobile","setRootNode","getValue","getItemByValue","renderValue","placeholder","locale","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","hasFixedWidth","menuWidth","menuAlign","disablePortal","menuPos","maxMenuHeight","mobileMenuHeaderText","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","value1","value2","Component","__KONTUR_REACT_UI__","Item","SEP","static","Array","isArray","getTextFromItem","toString","itemText","indexOf"],"mappings":"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","sourcesContent":["import React, { ReactNode, ReactPortal, AriaAttributes } from 'react';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem, MenuItemProps } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction, isNonNullable, isReactUINode } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport const SelectDataTids = {\n root: 'Select__root',\n} as const;\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | TValue\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem> extends CommonProps, Pick<DropdownContainerProps, 'menuPos'> {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<SelectItem<TValue, TItem>>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n /**\n * Атрибут для указания id элемента(-ов), описывающих его\n */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\ntype DefaultProps<TValue, TItem> = Required<\n Pick<SelectProps<TValue, TItem>, 'renderValue' | 'renderItem' | 'areValuesEqual' | 'filterItem' | 'use'>\n>;\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n// Suggested solutions break current behavior\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static defaultProps: DefaultProps<unknown, ReactNode | ReactPortal> = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const button = (\n <ThemeContext.Provider value={getSelectTheme(this.theme, this.props)}>\n {this.getButton(buttonParams)}\n </ThemeContext.Provider>\n );\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span\n data-tid={SelectDataTids.root}\n className={cx({ [styles.root()]: true, [styles.rootMobile(this.theme)]: isMobile })}\n style={style}\n >\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n 'aria-describedby': this.props['aria-describedby'],\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.getProps().use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n 'aria-describedby': params['aria-describedby'],\n };\n const use = this.getProps().use;\n\n const labelProps = {\n className: cx({\n [styles.label()]: use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch() : null;\n\n const value = this.getValue();\n const hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n hasFixedWidth={hasFixedWidth}\n menuPos={this.props.menuPos}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={this.props.menuAlign}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private getSearch = () => {\n return (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getMobileSearch() : null;\n const value = this.getValue();\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu hasShadow={false} onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getMobileSearch = () => {\n return (\n <Input\n autoFocus\n value={this.state.searchPattern}\n ref={this.focusInput}\n onValueChange={this.handleSearch}\n width=\"100%\"\n />\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile } as MenuItemProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (!this.areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange?.(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual(value1, value2);\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: any): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
@@ -22,7 +22,7 @@ export interface StickyState {
|
|
|
22
22
|
relativeTop: number;
|
|
23
23
|
}
|
|
24
24
|
export declare const StickyDataTids: {
|
|
25
|
-
readonly root: "
|
|
25
|
+
readonly root: "Sticky__root";
|
|
26
26
|
};
|
|
27
27
|
declare type DefaultProps = Required<Pick<StickyProps, 'offset'>>;
|
|
28
28
|
export declare class Sticky extends React.Component<StickyProps, StickyState> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Sticky.tsx"],"names":["MAX_REFLOW_RETRIES","StickyDataTids","root","Sticky","rootNode","getProps","defaultProps","state","fixed","deltaHeight","stopped","relativeTop","layoutSubscription","remove","reflowCounter","refWrapper","ref","wrapper","refInner","inner","reflow","document","documentElement","Error","windowHeight","window","innerHeight","clientHeight","top","bottom","left","width","height","props","getStop","side","prevFixed","prevHeight","offset","Math","floor","setState","stop","stopRect","outerHeight","componentDidMount","LayoutEvents","addListener","componentWillUnmount","componentDidUpdate","prevProps","prevState","emit","render","children","innerStyle","setRootNode","styles","container","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","oneOfType","node","func","number","oneOf","isRequired"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport shallowEqual from 'shallowequal';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { styles } from './Sticky.styles';\n\nconst MAX_REFLOW_RETRIES = 5;\n\nexport interface StickyProps extends Omit<CommonProps, 'children'> {\n side: 'top' | 'bottom';\n /**\n * Отступ в пикселях от края экрана, на сколько сдвигается элемент в залипшем состоянии\n * @default 0\n */\n offset?: number;\n getStop?: () => Nullable<HTMLElement>;\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n}\n\nexport interface StickyState {\n fixed: boolean;\n deltaHeight: number;\n height?: number;\n width?: number;\n left?: number;\n stopped: boolean;\n relativeTop: number;\n}\n\nexport const StickyDataTids = {\n root: 'Spinner__root',\n} as const;\n\ntype DefaultProps = Required<Pick<StickyProps, 'offset'>>;\n\n@rootNode\nexport class Sticky extends React.Component<StickyProps, StickyState> {\n public static __KONTUR_REACT_UI__ = 'Sticky';\n\n public static propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Функция, которая возвращает DOM-элемент, который нельзя пересекать.\n */\n getStop: PropTypes.func,\n\n /**\n * Отступ от границы в пикселях\n */\n offset: PropTypes.number,\n\n side: PropTypes.oneOf(['top', 'bottom']).isRequired,\n };\n\n public static defaultProps: DefaultProps = { offset: 0 };\n\n private getProps = createPropsGetter(Sticky.defaultProps);\n\n public state: StickyState = {\n fixed: false,\n deltaHeight: 0,\n stopped: false,\n relativeTop: 0,\n };\n\n private wrapper: Nullable<HTMLElement>;\n private inner: Nullable<HTMLElement>;\n private layoutSubscription: { remove: Nullable<() => void> } = { remove: null };\n private reflowCounter = 0;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.reflow();\n\n this.layoutSubscription = LayoutEvents.addListener(this.reflow);\n }\n\n public componentWillUnmount() {\n if (this.layoutSubscription.remove) {\n this.layoutSubscription.remove();\n }\n }\n\n public componentDidUpdate(prevProps: StickyProps, prevState: StickyState) {\n if (!shallowEqual(prevProps, this.props) || !shallowEqual(prevState, this.state)) {\n if (this.reflowCounter < MAX_REFLOW_RETRIES) {\n LayoutEvents.emit();\n this.reflowCounter += 1;\n return;\n }\n }\n this.reflowCounter = 0;\n }\n\n public render() {\n let { children } = this.props;\n const { side } = this.props;\n const offset = this.getProps().offset;\n const { fixed, stopped, relativeTop, deltaHeight, width, height, left } = this.state;\n const innerStyle: React.CSSProperties = {};\n\n if (fixed) {\n if (stopped) {\n innerStyle.top = relativeTop;\n innerStyle[side === 'top' ? 'marginTop' : 'marginBottom'] = deltaHeight;\n } else {\n innerStyle.width = width;\n innerStyle[side] = offset;\n innerStyle.left = left;\n }\n }\n\n if (isFunction(children)) {\n children = children(fixed);\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={StickyDataTids.root} ref={this.refWrapper} className={styles.wrapper()}>\n <ZIndex\n priority=\"Sticky\"\n applyZIndex={fixed}\n className={cx(styles.inner(), {\n [styles.fixed()]: fixed && !stopped,\n [styles.stopped()]: stopped,\n })}\n style={innerStyle}\n wrapperRef={this.refInner}\n >\n <div className={styles.container()}>{children}</div>\n </ZIndex>\n {fixed && !stopped ? <div style={{ width, height }} /> : null}\n </div>\n </CommonWrapper>\n );\n }\n\n private refWrapper = (ref: Nullable<HTMLElement>) => (this.wrapper = ref);\n\n private refInner = (ref: Nullable<HTMLElement>) => (this.inner = ref);\n\n /**\n * Пересчитать габариты и позицию залипшего элемента\n *\n * @public\n */\n public reflow = () => {\n const { documentElement } = document;\n\n if (!documentElement) {\n throw Error('There is no \"documentElement\" in document');\n }\n\n const windowHeight = window.innerHeight || documentElement.clientHeight;\n if (!this.wrapper || !this.inner) {\n return;\n }\n const { top, bottom, left } = getDOMRect(this.wrapper);\n const { width, height } = getDOMRect(this.inner);\n const { getStop, side } = this.props;\n const { fixed: prevFixed, height: prevHeight = height } = this.state;\n const offset = this.getProps().offset;\n const fixed = side === 'top' ? top < offset : Math.floor(bottom) > windowHeight - offset;\n\n this.setState({ fixed, left });\n\n if (fixed && !prevFixed) {\n this.setState({ width, height });\n }\n\n if (fixed) {\n const stop = getStop && getStop();\n if (stop) {\n const deltaHeight = prevHeight - height;\n const stopRect = getDOMRect(stop);\n const outerHeight = height + offset;\n let stopped = false;\n let relativeTop = 0;\n\n if (side === 'top') {\n stopped = stopRect.top - outerHeight < 0;\n relativeTop = stopRect.top - prevHeight - top;\n } else {\n stopped = stopRect.bottom + outerHeight > windowHeight;\n relativeTop = stopRect.bottom - top;\n }\n\n this.setState({ relativeTop, deltaHeight, stopped });\n }\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Sticky.tsx"],"names":["MAX_REFLOW_RETRIES","StickyDataTids","root","Sticky","rootNode","getProps","defaultProps","state","fixed","deltaHeight","stopped","relativeTop","layoutSubscription","remove","reflowCounter","refWrapper","ref","wrapper","refInner","inner","reflow","document","documentElement","Error","windowHeight","window","innerHeight","clientHeight","top","bottom","left","width","height","props","getStop","side","prevFixed","prevHeight","offset","Math","floor","setState","stop","stopRect","outerHeight","componentDidMount","LayoutEvents","addListener","componentWillUnmount","componentDidUpdate","prevProps","prevState","emit","render","children","innerStyle","setRootNode","styles","container","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","oneOfType","node","func","number","oneOf","isRequired"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport shallowEqual from 'shallowequal';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { styles } from './Sticky.styles';\n\nconst MAX_REFLOW_RETRIES = 5;\n\nexport interface StickyProps extends Omit<CommonProps, 'children'> {\n side: 'top' | 'bottom';\n /**\n * Отступ в пикселях от края экрана, на сколько сдвигается элемент в залипшем состоянии\n * @default 0\n */\n offset?: number;\n getStop?: () => Nullable<HTMLElement>;\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n}\n\nexport interface StickyState {\n fixed: boolean;\n deltaHeight: number;\n height?: number;\n width?: number;\n left?: number;\n stopped: boolean;\n relativeTop: number;\n}\n\nexport const StickyDataTids = {\n root: 'Sticky__root',\n} as const;\n\ntype DefaultProps = Required<Pick<StickyProps, 'offset'>>;\n\n@rootNode\nexport class Sticky extends React.Component<StickyProps, StickyState> {\n public static __KONTUR_REACT_UI__ = 'Sticky';\n\n public static propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Функция, которая возвращает DOM-элемент, который нельзя пересекать.\n */\n getStop: PropTypes.func,\n\n /**\n * Отступ от границы в пикселях\n */\n offset: PropTypes.number,\n\n side: PropTypes.oneOf(['top', 'bottom']).isRequired,\n };\n\n public static defaultProps: DefaultProps = { offset: 0 };\n\n private getProps = createPropsGetter(Sticky.defaultProps);\n\n public state: StickyState = {\n fixed: false,\n deltaHeight: 0,\n stopped: false,\n relativeTop: 0,\n };\n\n private wrapper: Nullable<HTMLElement>;\n private inner: Nullable<HTMLElement>;\n private layoutSubscription: { remove: Nullable<() => void> } = { remove: null };\n private reflowCounter = 0;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.reflow();\n\n this.layoutSubscription = LayoutEvents.addListener(this.reflow);\n }\n\n public componentWillUnmount() {\n if (this.layoutSubscription.remove) {\n this.layoutSubscription.remove();\n }\n }\n\n public componentDidUpdate(prevProps: StickyProps, prevState: StickyState) {\n if (!shallowEqual(prevProps, this.props) || !shallowEqual(prevState, this.state)) {\n if (this.reflowCounter < MAX_REFLOW_RETRIES) {\n LayoutEvents.emit();\n this.reflowCounter += 1;\n return;\n }\n }\n this.reflowCounter = 0;\n }\n\n public render() {\n let { children } = this.props;\n const { side } = this.props;\n const offset = this.getProps().offset;\n const { fixed, stopped, relativeTop, deltaHeight, width, height, left } = this.state;\n const innerStyle: React.CSSProperties = {};\n\n if (fixed) {\n if (stopped) {\n innerStyle.top = relativeTop;\n innerStyle[side === 'top' ? 'marginTop' : 'marginBottom'] = deltaHeight;\n } else {\n innerStyle.width = width;\n innerStyle[side] = offset;\n innerStyle.left = left;\n }\n }\n\n if (isFunction(children)) {\n children = children(fixed);\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={StickyDataTids.root} ref={this.refWrapper} className={styles.wrapper()}>\n <ZIndex\n priority=\"Sticky\"\n applyZIndex={fixed}\n className={cx(styles.inner(), {\n [styles.fixed()]: fixed && !stopped,\n [styles.stopped()]: stopped,\n })}\n style={innerStyle}\n wrapperRef={this.refInner}\n >\n <div className={styles.container()}>{children}</div>\n </ZIndex>\n {fixed && !stopped ? <div style={{ width, height }} /> : null}\n </div>\n </CommonWrapper>\n );\n }\n\n private refWrapper = (ref: Nullable<HTMLElement>) => (this.wrapper = ref);\n\n private refInner = (ref: Nullable<HTMLElement>) => (this.inner = ref);\n\n /**\n * Пересчитать габариты и позицию залипшего элемента\n *\n * @public\n */\n public reflow = () => {\n const { documentElement } = document;\n\n if (!documentElement) {\n throw Error('There is no \"documentElement\" in document');\n }\n\n const windowHeight = window.innerHeight || documentElement.clientHeight;\n if (!this.wrapper || !this.inner) {\n return;\n }\n const { top, bottom, left } = getDOMRect(this.wrapper);\n const { width, height } = getDOMRect(this.inner);\n const { getStop, side } = this.props;\n const { fixed: prevFixed, height: prevHeight = height } = this.state;\n const offset = this.getProps().offset;\n const fixed = side === 'top' ? top < offset : Math.floor(bottom) > windowHeight - offset;\n\n this.setState({ fixed, left });\n\n if (fixed && !prevFixed) {\n this.setState({ width, height });\n }\n\n if (fixed) {\n const stop = getStop && getStop();\n if (stop) {\n const deltaHeight = prevHeight - height;\n const stopRect = getDOMRect(stop);\n const outerHeight = height + offset;\n let stopped = false;\n let relativeTop = 0;\n\n if (side === 'top') {\n stopped = stopRect.top - outerHeight < 0;\n relativeTop = stopRect.top - prevHeight - top;\n } else {\n stopped = stopRect.bottom + outerHeight > windowHeight;\n relativeTop = stopRect.bottom - top;\n }\n\n this.setState({ relativeTop, deltaHeight, stopped });\n }\n }\n };\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { AriaAttributes } from 'react';
|
|
2
2
|
import { Nullable } from '../../typings/utility-types';
|
|
3
3
|
import { CommonProps } from '../../internal/CommonWrapper';
|
|
4
4
|
import { TabsContextType } from './TabsContext';
|
|
@@ -61,6 +61,10 @@ export interface TabProps<T extends string = string> extends CommonProps {
|
|
|
61
61
|
* Style property
|
|
62
62
|
*/
|
|
63
63
|
style?: React.CSSProperties;
|
|
64
|
+
/**
|
|
65
|
+
* Атрибут для указания id элемента(-ов), описывающих его
|
|
66
|
+
*/
|
|
67
|
+
'aria-describedby'?: AriaAttributes['aria-describedby'];
|
|
64
68
|
}
|
|
65
69
|
export interface TabState {
|
|
66
70
|
focusedByKeyboard: boolean;
|
|
@@ -90,6 +90,11 @@ var TabDataTids = {
|
|
|
90
90
|
|
|
91
91
|
|
|
92
92
|
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
93
98
|
|
|
94
99
|
|
|
95
100
|
|
|
@@ -224,6 +229,7 @@ Tab = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function
|
|
|
224
229
|
|
|
225
230
|
|
|
226
231
|
|
|
232
|
+
|
|
227
233
|
|
|
228
234
|
|
|
229
235
|
getId = function () {return _this.props.id || _this.getProps().href;};_this.
|
|
@@ -299,4 +305,4 @@ Tab = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function
|
|
|
299
305
|
}
|
|
300
306
|
|
|
301
307
|
_this.setState({ focusedByKeyboard: false });
|
|
302
|
-
};(0, _invariant.default)(_this.context !== _TabsContext.TabsContextDefaultValue, 'Tab should be placed inside Tabs component');return _this;}var _proto = Tab.prototype;_proto.componentDidMount = function componentDidMount() {var id = this.getId();if (typeof id === 'string') {this.context.addTab(id, this.getTabInstance);}};_proto.componentDidUpdate = function componentDidUpdate() {if (this.context.activeTab === this.props.id) {this.context.notifyUpdate();}};_proto.componentWillUnmount = function componentWillUnmount() {var id = this.getId();if (typeof id === 'string') {this.context.removeTab(id);}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.getIndicators = function getIndicators() {return { error: Boolean(this.props.error), warning: Boolean(this.props.warning), success: Boolean(this.props.success), primary: Boolean(this.props.primary), disabled: Boolean(this.props.disabled) };};_proto.renderMain = function renderMain() {var _cx;var _this$props = this.props,children = _this$props.children,disabled = _this$props.disabled,error = _this$props.error,warning = _this$props.warning,success = _this$props.success,primary = _this$props.primary;var _this$getProps2 = this.getProps(),Component = _this$getProps2.component,href = _this$getProps2.href;var isActive = false;var isVertical = false;var id = this.getId();if (typeof id === 'string') {isActive = this.context.activeTab === this.getId();isVertical = this.context.vertical;}var orientationStyles = isVertical ? _Tab.verticalStyles : _Tab.horizontalStyles;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(Component, { "data-tid": TabDataTids.root, className: (0, _Emotion.cx)((_cx = {}, _cx[_Tab.styles.root(this.theme)] = true, _cx[_Tab.styles.vertical(this.theme)] = !!isVertical, _cx[orientationStyles.primary(this.theme)] = !!primary, _cx[orientationStyles.success(this.theme)] = !!success, _cx[orientationStyles.warning(this.theme)] = !!warning, _cx[orientationStyles.error(this.theme)] = !!error, _cx[_Tab.styles.active()] = !!isActive, _cx[orientationStyles.active(this.theme)] = !!isActive, _cx[_Tab.styles.disabled(this.theme)] = !!disabled, _cx[orientationStyles.disabled()] = !!disabled, _cx)), onBlur: this.handleBlur, onClick: this.switchTab, onFocus: this.handleFocus, onKeyDown: this.handleKeyDown, tabIndex: disabled ? -1 : 0, ref: (0, _utils.isFunctionalComponent)(Component) ? null : this.refTabComponent, href: href }, /*#__PURE__*/_react.default.createElement(_ResizeDetector.ResizeDetector, { onResize: this.context.notifyUpdate }, children), this.state.focusedByKeyboard && /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Tab.styles.focus(this.theme), _Tab.globalClasses.focus) })));};return Tab;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Tab', _class2.contextType = _TabsContext.TabsContext, _class2.defaultProps = { component: 'a', href: '' }, _temp)) || _class;exports.Tab = Tab;
|
|
308
|
+
};(0, _invariant.default)(_this.context !== _TabsContext.TabsContextDefaultValue, 'Tab should be placed inside Tabs component');return _this;}var _proto = Tab.prototype;_proto.componentDidMount = function componentDidMount() {var id = this.getId();if (typeof id === 'string') {this.context.addTab(id, this.getTabInstance);}};_proto.componentDidUpdate = function componentDidUpdate() {if (this.context.activeTab === this.props.id) {this.context.notifyUpdate();}};_proto.componentWillUnmount = function componentWillUnmount() {var id = this.getId();if (typeof id === 'string') {this.context.removeTab(id);}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.getIndicators = function getIndicators() {return { error: Boolean(this.props.error), warning: Boolean(this.props.warning), success: Boolean(this.props.success), primary: Boolean(this.props.primary), disabled: Boolean(this.props.disabled) };};_proto.renderMain = function renderMain() {var _cx;var _this$props = this.props,children = _this$props.children,disabled = _this$props.disabled,error = _this$props.error,warning = _this$props.warning,success = _this$props.success,primary = _this$props.primary,ariaDescribedby = _this$props['aria-describedby'];var _this$getProps2 = this.getProps(),Component = _this$getProps2.component,href = _this$getProps2.href;var isActive = false;var isVertical = false;var id = this.getId();if (typeof id === 'string') {isActive = this.context.activeTab === this.getId();isVertical = this.context.vertical;}var orientationStyles = isVertical ? _Tab.verticalStyles : _Tab.horizontalStyles;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(Component, { "data-tid": TabDataTids.root, className: (0, _Emotion.cx)((_cx = {}, _cx[_Tab.styles.root(this.theme)] = true, _cx[_Tab.styles.vertical(this.theme)] = !!isVertical, _cx[orientationStyles.primary(this.theme)] = !!primary, _cx[orientationStyles.success(this.theme)] = !!success, _cx[orientationStyles.warning(this.theme)] = !!warning, _cx[orientationStyles.error(this.theme)] = !!error, _cx[_Tab.styles.active()] = !!isActive, _cx[orientationStyles.active(this.theme)] = !!isActive, _cx[_Tab.styles.disabled(this.theme)] = !!disabled, _cx[orientationStyles.disabled()] = !!disabled, _cx)), onBlur: this.handleBlur, onClick: this.switchTab, onFocus: this.handleFocus, onKeyDown: this.handleKeyDown, tabIndex: disabled ? -1 : 0, ref: (0, _utils.isFunctionalComponent)(Component) ? null : this.refTabComponent, href: href, "aria-describedby": ariaDescribedby }, /*#__PURE__*/_react.default.createElement(_ResizeDetector.ResizeDetector, { onResize: this.context.notifyUpdate }, children), this.state.focusedByKeyboard && /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Tab.styles.focus(this.theme), _Tab.globalClasses.focus) })));};return Tab;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Tab', _class2.contextType = _TabsContext.TabsContext, _class2.defaultProps = { component: 'a', href: '' }, _temp)) || _class;exports.Tab = Tab;
|