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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/cjs/components/Autocomplete/Autocomplete.md +7 -7
  2. package/cjs/components/CurrencyInput/CurrencyInput.md +24 -24
  3. package/cjs/components/DateInput/DateInput.md +106 -106
  4. package/cjs/components/DatePicker/DatePicker.md +307 -307
  5. package/cjs/components/FxInput/FxInput.md +16 -16
  6. package/cjs/components/Group/Group.md +18 -18
  7. package/cjs/components/Paging/Paging.md +43 -43
  8. package/cjs/components/Select/Select.js +2 -1
  9. package/cjs/components/Select/Select.js.map +1 -1
  10. package/cjs/components/Tabs/Tabs.md +36 -36
  11. package/cjs/components/Textarea/Textarea.md +25 -25
  12. package/cjs/components/TokenInput/TokenInput.md +79 -79
  13. package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +1 -0
  14. package/cjs/internal/DropdownContainer/DropdownContainer.js +6 -1
  15. package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
  16. package/cjs/internal/Menu/Menu.styles.js +1 -1
  17. package/cjs/internal/Menu/Menu.styles.js.map +1 -1
  18. package/components/Autocomplete/Autocomplete.md +7 -7
  19. package/components/CurrencyInput/CurrencyInput.md +24 -24
  20. package/components/DateInput/DateInput.md +106 -106
  21. package/components/DatePicker/DatePicker.md +307 -307
  22. package/components/FxInput/FxInput.md +16 -16
  23. package/components/Group/Group.md +18 -18
  24. package/components/Paging/Paging.md +43 -43
  25. package/components/Select/Select/Select.js +2 -1
  26. package/components/Select/Select/Select.js.map +1 -1
  27. package/components/Tabs/Tabs.md +36 -36
  28. package/components/Textarea/Textarea.md +25 -25
  29. package/components/TokenInput/TokenInput.md +79 -79
  30. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +4 -2
  31. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
  32. package/internal/DropdownContainer/DropdownContainer.d.ts +1 -0
  33. package/internal/Menu/Menu.styles/Menu.styles.js +1 -1
  34. package/internal/Menu/Menu.styles/Menu.styles.js.map +1 -1
  35. package/package.json +1 -1
@@ -1,18 +1,18 @@
1
- ```jsx harmony
2
- import FunctionIcon from '@skbkontur/react-icons/Function';
3
- import SearchIcon from '@skbkontur/react-icons/Search';
4
- import { Button, Input } from '@skbkontur/react-ui';
5
-
6
- const [value, setValue] = React.useState('Foo');
7
-
8
- <Group width={300}>
9
- <Button>
10
- <FunctionIcon />
11
- </Button>
12
- <Input value={value} width="100%" onValueChange={setValue} />
13
- <Button>
14
- <SearchIcon />
15
- </Button>
16
- <Button>Bar</Button>
17
- </Group>;
18
- ```
1
+ ```jsx harmony
2
+ import FunctionIcon from '@skbkontur/react-icons/Function';
3
+ import SearchIcon from '@skbkontur/react-icons/Search';
4
+ import { Button, Input } from '@skbkontur/react-ui';
5
+
6
+ const [value, setValue] = React.useState('Foo');
7
+
8
+ <Group width={300}>
9
+ <Button>
10
+ <FunctionIcon />
11
+ </Button>
12
+ <Input value={value} width="100%" onValueChange={setValue} />
13
+ <Button>
14
+ <SearchIcon />
15
+ </Button>
16
+ <Button>Bar</Button>
17
+ </Group>;
18
+ ```
@@ -1,43 +1,43 @@
1
- Управление с клавиатуры работает в двух вариантах:
2
-
3
- - **useGlobalListener === true** слушатель keydown событий на document, если на стринице несколько компонентов Paging,
4
- обработчик будет срабатывать на каждом
5
- - **useGlobalListener === false** обработка нажатия клавиш будет работать только когда компонент в фокусе.
6
-
7
- Навигационные подсказки появляются когда доступно управление с клавиатуры и `withoutNavigationHint != true`
8
-
9
- ```jsx harmony
10
- class Paginator3000 extends React.Component {
11
- constructor() {
12
- super();
13
- this.state = { active: 1 };
14
- this._handlePageChange = this._handlePageChange.bind(this);
15
- }
16
-
17
- render() {
18
- return <Paging activePage={this.state.active} onPageChange={this._handlePageChange} pagesCount={12} />;
19
- }
20
-
21
- _handlePageChange(pageNumber) {
22
- this.setState({ active: pageNumber });
23
- }
24
- }
25
-
26
- <Paginator3000 />;
27
- ```
28
-
29
- #### Локали по умолчанию
30
-
31
- ```typescript static
32
- interface PagingLocale {
33
- forward?: string;
34
- }
35
-
36
- const ru_RU = {
37
- forward: 'Дальше',
38
- };
39
-
40
- const en_GB = {
41
- forward: 'Forward',
42
- };
43
- ```
1
+ Управление с клавиатуры работает в двух вариантах:
2
+
3
+ - **useGlobalListener === true** слушатель keydown событий на document, если на стринице несколько компонентов Paging,
4
+ обработчик будет срабатывать на каждом
5
+ - **useGlobalListener === false** обработка нажатия клавиш будет работать только когда компонент в фокусе.
6
+
7
+ Навигационные подсказки появляются когда доступно управление с клавиатуры и `withoutNavigationHint != true`
8
+
9
+ ```jsx harmony
10
+ class Paginator3000 extends React.Component {
11
+ constructor() {
12
+ super();
13
+ this.state = { active: 1 };
14
+ this._handlePageChange = this._handlePageChange.bind(this);
15
+ }
16
+
17
+ render() {
18
+ return <Paging activePage={this.state.active} onPageChange={this._handlePageChange} pagesCount={12} />;
19
+ }
20
+
21
+ _handlePageChange(pageNumber) {
22
+ this.setState({ active: pageNumber });
23
+ }
24
+ }
25
+
26
+ <Paginator3000 />;
27
+ ```
28
+
29
+ #### Локали по умолчанию
30
+
31
+ ```typescript static
32
+ interface PagingLocale {
33
+ forward?: string;
34
+ }
35
+
36
+ const ru_RU = {
37
+ forward: 'Дальше',
38
+ };
39
+
40
+ const en_GB = {
41
+ forward: 'Forward',
42
+ };
43
+ ```
@@ -444,6 +444,7 @@ Select = (_dec = (0, _decorators.locale)('Select', _locale.SelectLocaleHelper),
444
444
 
445
445
 
446
446
 
447
+
447
448
 
448
449
 
449
450
  dropdownContainerGetParent = function () {
@@ -583,7 +584,7 @@ Select = (_dec = (0, _decorators.locale)('Select', _locale.SelectLocaleHelper),
583
584
  buttonElement;
584
585
  };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: (0, _selectTheme.getSelectTheme)(theme, _this2.props) }, _this2.renderMain());});} /**
585
586
  * @public
586
- */;_proto.renderMain = function renderMain() {var _this$renderLabel = this.renderLabel(),label = _this$renderLabel.label,isPlaceholder = _this$renderLabel.isPlaceholder;var buttonParams = { opened: this.state.opened, label: label, isPlaceholder: isPlaceholder, onClick: this.toggle, onKeyDown: this.handleKey };var style = { width: this.props.width, maxWidth: this.props.maxWidth || undefined };var button = this.getButton(buttonParams);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: this.state.opened }, /*#__PURE__*/_react.default.createElement("span", { className: _Select.styles.root(), style: style }, button, !this.props.disabled && this.state.opened && this.renderMenu())));};_proto.renderLabel = function renderLabel() {var value = this.getValue();var item = this.getItemByValue(value);if (item != null || value != null) {return { label: this.getProps().renderValue(value, item), isPlaceholder: false };}return { label: /*#__PURE__*/_react.default.createElement("span", null, this.props.placeholder || this.locale.placeholder), isPlaceholder: true };};_proto.getLeftIconClass = function getLeftIconClass(size) {if (this.props.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 _cx, _cx2;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 labelProps = { className: (0, _Emotion.cx)((_cx = {}, _cx[_Select.styles.label()] = this.props.use !== 'link', _cx[_Select.styles.placeholder(this.theme)] = params.isPlaceholder, _cx[_Select.styles.customUsePlaceholder()] = params.isPlaceholder && this.props.use !== 'default', _cx[_Select.styles.placeholderDisabled(this.theme)] = params.isPlaceholder && this.props.disabled, _cx)), style: { paddingRight: this.getSelectIconGap() } };var useIsCustom = this.props.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), (_cx2 = {}, _cx2[_Select.styles.arrowDisabled(this.theme)] = this.props.disabled, _cx2[_Select.styles.customUseArrow()] = useIsCustom, _cx2)) }, /*#__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 _this4 = this;var search = this.props.search ? /*#__PURE__*/_react.default.createElement("div", { className: _Select.styles.search(), onKeyDown: this.handleKey }, /*#__PURE__*/_react.default.createElement(_Input.Input, { ref: this.focusInput, onValueChange: this.handleSearch, width: "100%" })) : null;var value = this.getValue();return /*#__PURE__*/_react.default.createElement(_DropdownContainer.DropdownContainer, { getParent: this.dropdownContainerGetParent, offsetY: -1, align: this.props.menuAlign, disablePortal: this.props.disablePortal }, /*#__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.mapItems(function (iValue, item, i, comment) {if ((0, _utils.isFunction)(item)) {var element = item();if ( /*#__PURE__*/_react.default.isValidElement(element)) {return /*#__PURE__*/_react.default.cloneElement(element, { key: i });}return null;}if ( /*#__PURE__*/_react.default.isValidElement(item)) {return /*#__PURE__*/_react.default.cloneElement(item, { key: i });}return /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { key: i, state: _this4.getProps().areValuesEqual(iValue, value) ? 'selected' : null, onClick: _this4.select.bind(_this4, iValue), comment: comment }, _this4.getProps().renderItem(iValue, item));})));};_proto.select = function select(value) {this.focus();this.setState({ opened: false, value: value });if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {this.props.onValueChange(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.getProps().areValuesEqual(itemValue, value)) {return _item2;}}return null;};return Select;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Select', _class2.propTypes = { areValuesEqual: _propTypes.default.func, defaultValue: _propTypes.default.any, disablePortal: _propTypes.default.bool, disabled: _propTypes.default.bool, error: _propTypes.default.bool, filterItem: _propTypes.default.func, items: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.object]), maxMenuHeight: _propTypes.default.number, maxWidth: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), placeholder: _propTypes.default.node, renderItem: _propTypes.default.func, renderValue: _propTypes.default.func, search: _propTypes.default.bool, value: _propTypes.default.any, width: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), onValueChange: _propTypes.default.func, onMouseEnter: _propTypes.default.func, onMouseLeave: _propTypes.default.func, onMouseOver: _propTypes.default.func, onKeyDown: _propTypes.default.func }, _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);exports.Select = Select;
587
+ */;_proto.renderMain = function renderMain() {var _this$renderLabel = this.renderLabel(),label = _this$renderLabel.label,isPlaceholder = _this$renderLabel.isPlaceholder;var buttonParams = { opened: this.state.opened, label: label, isPlaceholder: isPlaceholder, onClick: this.toggle, onKeyDown: this.handleKey };var style = { width: this.props.width, maxWidth: this.props.maxWidth || undefined };var button = this.getButton(buttonParams);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: this.state.opened }, /*#__PURE__*/_react.default.createElement("span", { className: _Select.styles.root(), style: style }, button, !this.props.disabled && this.state.opened && this.renderMenu())));};_proto.renderLabel = function renderLabel() {var value = this.getValue();var item = this.getItemByValue(value);if (item != null || value != null) {return { label: this.getProps().renderValue(value, item), isPlaceholder: false };}return { label: /*#__PURE__*/_react.default.createElement("span", null, this.props.placeholder || this.locale.placeholder), isPlaceholder: true };};_proto.getLeftIconClass = function getLeftIconClass(size) {if (this.props.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 _cx, _cx2;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 labelProps = { className: (0, _Emotion.cx)((_cx = {}, _cx[_Select.styles.label()] = this.props.use !== 'link', _cx[_Select.styles.placeholder(this.theme)] = params.isPlaceholder, _cx[_Select.styles.customUsePlaceholder()] = params.isPlaceholder && this.props.use !== 'default', _cx[_Select.styles.placeholderDisabled(this.theme)] = params.isPlaceholder && this.props.disabled, _cx)), style: { paddingRight: this.getSelectIconGap() } };var useIsCustom = this.props.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), (_cx2 = {}, _cx2[_Select.styles.arrowDisabled(this.theme)] = this.props.disabled, _cx2[_Select.styles.customUseArrow()] = useIsCustom, _cx2)) }, /*#__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 _this4 = this;var search = this.props.search ? /*#__PURE__*/_react.default.createElement("div", { className: _Select.styles.search(), onKeyDown: this.handleKey }, /*#__PURE__*/_react.default.createElement(_Input.Input, { ref: this.focusInput, onValueChange: this.handleSearch, width: "100%" })) : null;var value = this.getValue();return /*#__PURE__*/_react.default.createElement(_DropdownContainer.DropdownContainer, { getParent: this.dropdownContainerGetParent, offsetY: -1, align: this.props.menuAlign, disablePortal: this.props.disablePortal, fixedWidth: !!this.props.menuWidth && this.props.menuWidth !== 'auto' }, /*#__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.mapItems(function (iValue, item, i, comment) {if ((0, _utils.isFunction)(item)) {var element = item();if ( /*#__PURE__*/_react.default.isValidElement(element)) {return /*#__PURE__*/_react.default.cloneElement(element, { key: i });}return null;}if ( /*#__PURE__*/_react.default.isValidElement(item)) {return /*#__PURE__*/_react.default.cloneElement(item, { key: i });}return /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, { key: i, state: _this4.getProps().areValuesEqual(iValue, value) ? 'selected' : null, onClick: _this4.select.bind(_this4, iValue), comment: comment }, _this4.getProps().renderItem(iValue, item));})));};_proto.select = function select(value) {this.focus();this.setState({ opened: false, value: value });if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {this.props.onValueChange(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.getProps().areValuesEqual(itemValue, value)) {return _item2;}}return null;};return Select;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Select', _class2.propTypes = { areValuesEqual: _propTypes.default.func, defaultValue: _propTypes.default.any, disablePortal: _propTypes.default.bool, disabled: _propTypes.default.bool, error: _propTypes.default.bool, filterItem: _propTypes.default.func, items: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.object]), maxMenuHeight: _propTypes.default.number, maxWidth: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), placeholder: _propTypes.default.node, renderItem: _propTypes.default.func, renderValue: _propTypes.default.func, search: _propTypes.default.bool, value: _propTypes.default.any, width: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), onValueChange: _propTypes.default.func, onMouseEnter: _propTypes.default.func, onMouseLeave: _propTypes.default.func, onMouseOver: _propTypes.default.func, onKeyDown: _propTypes.default.func }, _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);exports.Select = Select;
587
588
  function renderValue(value, item) {
588
589
  return item;
589
590
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["Select.tsx"],"names":["PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","SelectLocaleHelper","rootNode","state","opened","value","props","defaultValue","searchPattern","theme","locale","menu","buttonElement","getProps","defaultProps","setRootNode","open","setState","onOpen","close","onClose","focus","dropdownContainerGetParent","focusInput","input","setTimeout","refMenu","toggle","handleKey","e","preventDefault","up","down","enter","onKeyDown","handleSearch","highlightItem","buttonRef","element","getButton","buttonParams","button","_renderButton","renderDefaultButton","React","Children","only","isValidElement","cloneElement","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","renderMain","renderLabel","label","isPlaceholder","onClick","style","width","maxWidth","undefined","styles","root","renderMenu","getValue","item","getItemByValue","renderValue","placeholder","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","search","menuAlign","disablePortal","menuWidth","maxMenuHeight","mapItems","iValue","i","comment","key","areValuesEqual","select","bind","renderItem","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","func","any","bool","oneOfType","array","object","number","string","node","Item","SEP","static","value1","value2","Array","isArray","toString","indexOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\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 } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } 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 { cx } from '../../lib/theming/Emotion';\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 interface SelectProps<TValue, TItem> extends CommonProps {\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 * Cостояние валидации при ошибке.\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<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\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 * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\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\n@rootNode\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\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 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 (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\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 renderMain() {\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 const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const button = this.getButton(buttonParams);\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active={this.state.opened}>\n <span className={styles.root()} style={style}>\n {button}\n {!this.props.disabled && this.state.opened && this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\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.props.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\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.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 = this.props.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 ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\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.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 });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n )}\n </Menu>\n </DropdownContainer>\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.props.onValueChange && !this.getProps().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.ReactNodeArray = [];\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.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\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(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
1
+ {"version":3,"sources":["Select.tsx"],"names":["PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","SelectLocaleHelper","rootNode","state","opened","value","props","defaultValue","searchPattern","theme","locale","menu","buttonElement","getProps","defaultProps","setRootNode","open","setState","onOpen","close","onClose","focus","dropdownContainerGetParent","focusInput","input","setTimeout","refMenu","toggle","handleKey","e","preventDefault","up","down","enter","onKeyDown","handleSearch","highlightItem","buttonRef","element","getButton","buttonParams","button","_renderButton","renderDefaultButton","React","Children","only","isValidElement","cloneElement","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","renderMain","renderLabel","label","isPlaceholder","onClick","style","width","maxWidth","undefined","styles","root","renderMenu","getValue","item","getItemByValue","renderValue","placeholder","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","search","menuAlign","disablePortal","menuWidth","maxMenuHeight","mapItems","iValue","i","comment","key","areValuesEqual","select","bind","renderItem","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","func","any","bool","oneOfType","array","object","number","string","node","Item","SEP","static","value1","value2","Array","isArray","toString","indexOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\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 } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } 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 { cx } from '../../lib/theming/Emotion';\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 interface SelectProps<TValue, TItem> extends CommonProps {\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 * Cостояние валидации при ошибке.\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<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\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 * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\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\n@rootNode\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\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 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 (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\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 renderMain() {\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 const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const button = this.getButton(buttonParams);\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active={this.state.opened}>\n <span className={styles.root()} style={style}>\n {button}\n {!this.props.disabled && this.state.opened && this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\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.props.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\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.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 = this.props.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 ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n fixedWidth={!!this.props.menuWidth && this.props.menuWidth !== 'auto'}\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.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 });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n )}\n </Menu>\n </DropdownContainer>\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.props.onValueChange && !this.getProps().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.ReactNodeArray = [];\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.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\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(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
@@ -1,36 +1,36 @@
1
- ```jsx harmony
2
- const [active, setActive] = React.useState('fuji');
3
-
4
- <Tabs value={active} onValueChange={setActive}>
5
- <Tabs.Tab id="fuji">🌋 Fuji</Tabs.Tab>
6
- <Tabs.Tab id="tahat">⛰ Tahat</Tabs.Tab>
7
- <Tabs.Tab id="alps">🗻 Alps</Tabs.Tab>
8
- </Tabs>;
9
- ```
10
-
11
- Можно передавать свои компоненты в качестве табов, например `NavLink` из `react-router`
12
-
13
- ```jsx harmony
14
- const [active, setActive] = React.useState('/fuji');
15
-
16
- const NavLink = props => (
17
- <a
18
- {...props}
19
- onClick={e => {
20
- e.preventDefault();
21
- props.onClick(e);
22
- }}
23
- />
24
- );
25
- const TabLink = ({ id, children }) => (
26
- <Tabs.Tab id={id} component={props => <NavLink {...props} to={props.id} />}>
27
- {children}
28
- </Tabs.Tab>
29
- );
30
-
31
- <Tabs value={active} onValueChange={setActive}>
32
- <TabLink id="/fuji">🌋 Fuji</TabLink>
33
- <TabLink id="/tahat">⛰ Tahat</TabLink>
34
- <TabLink id="/alps">🗻 Alps</TabLink>
35
- </Tabs>;
36
- ```
1
+ ```jsx harmony
2
+ const [active, setActive] = React.useState('fuji');
3
+
4
+ <Tabs value={active} onValueChange={setActive}>
5
+ <Tabs.Tab id="fuji">🌋 Fuji</Tabs.Tab>
6
+ <Tabs.Tab id="tahat">⛰ Tahat</Tabs.Tab>
7
+ <Tabs.Tab id="alps">🗻 Alps</Tabs.Tab>
8
+ </Tabs>;
9
+ ```
10
+
11
+ Можно передавать свои компоненты в качестве табов, например `NavLink` из `react-router`
12
+
13
+ ```jsx harmony
14
+ const [active, setActive] = React.useState('/fuji');
15
+
16
+ const NavLink = props => (
17
+ <a
18
+ {...props}
19
+ onClick={e => {
20
+ e.preventDefault();
21
+ props.onClick(e);
22
+ }}
23
+ />
24
+ );
25
+ const TabLink = ({ id, children }) => (
26
+ <Tabs.Tab id={id} component={props => <NavLink {...props} to={props.id} />}>
27
+ {children}
28
+ </Tabs.Tab>
29
+ );
30
+
31
+ <Tabs value={active} onValueChange={setActive}>
32
+ <TabLink id="/fuji">🌋 Fuji</TabLink>
33
+ <TabLink id="/tahat">⛰ Tahat</TabLink>
34
+ <TabLink id="/alps">🗻 Alps</TabLink>
35
+ </Tabs>;
36
+ ```
@@ -1,25 +1,25 @@
1
- ```jsx harmony
2
- const [value, setValue] = React.useState('');
3
-
4
- <Textarea
5
- value={value}
6
- onValueChange={setValue}
7
- autoResize
8
- placeholder="Through faith we can reign in every area of life"
9
- />;
10
- ```
11
-
12
- Счетчик введенных символов
13
-
14
- ```jsx harmony
15
- const [value, setValue] = React.useState('');
16
-
17
- <Textarea
18
- value={value}
19
- onValueChange={setValue}
20
- placeholder="Счетчик появляется при фокусе"
21
- lengthCounter={10}
22
- showLengthCounter
23
- counterHelp="Hello 👋"
24
- />;
25
- ```
1
+ ```jsx harmony
2
+ const [value, setValue] = React.useState('');
3
+
4
+ <Textarea
5
+ value={value}
6
+ onValueChange={setValue}
7
+ autoResize
8
+ placeholder="Through faith we can reign in every area of life"
9
+ />;
10
+ ```
11
+
12
+ Счетчик введенных символов
13
+
14
+ ```jsx harmony
15
+ const [value, setValue] = React.useState('');
16
+
17
+ <Textarea
18
+ value={value}
19
+ onValueChange={setValue}
20
+ placeholder="Счетчик появляется при фокусе"
21
+ lengthCounter={10}
22
+ showLengthCounter
23
+ counterHelp="Hello 👋"
24
+ />;
25
+ ```
@@ -1,79 +1,79 @@
1
- ```jsx harmony
2
- import { Token } from '@skbkontur/react-ui';
3
- import { TokenInputType } from '@skbkontur/react-ui/components/TokenInput';
4
-
5
- const [selectedItems, setSelectedItems] = React.useState([]);
6
-
7
- const delay = time => args => new Promise(resolve => setTimeout(resolve, time, args));
8
-
9
- const getItems = q =>
10
- Promise.resolve(
11
- ['First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth'].filter(
12
- x => x.toLowerCase().includes(q.toLowerCase()) || x.toString(10) === q,
13
- ),
14
- ).then(delay(500));
15
-
16
- const tokenColors = {
17
- First: {
18
- idle: 'grayIdle',
19
- active: 'grayActive',
20
- },
21
- Second: {
22
- idle: 'blueIdle',
23
- active: 'blueActive',
24
- },
25
- Third: {
26
- idle: 'greenIdle',
27
- active: 'greenActive',
28
- },
29
- Fourth: {
30
- idle: 'yellowIdle',
31
- active: 'yellowActive',
32
- },
33
- Fifth: {
34
- idle: 'redIdle',
35
- active: 'redActive',
36
- },
37
- Sixth: {
38
- idle: 'white',
39
- active: 'black',
40
- },
41
- default: {
42
- idle: 'defaultIdle',
43
- active: 'defaultActive',
44
- },
45
- };
46
-
47
- <div style={{ width: '300px' }}>
48
- <TokenInput
49
- type={TokenInputType.Combined}
50
- getItems={getItems}
51
- selectedItems={selectedItems}
52
- onValueChange={setSelectedItems}
53
- renderToken={(item, tokenProps) => (
54
- <Token key={item.toString()} colors={tokenColors[item] || tokenColors.default} {...tokenProps}>
55
- {item}
56
- </Token>
57
- )}
58
- />
59
- </div>;
60
- ```
61
-
62
- #### Локали по умолчанию
63
-
64
- ```typescript static
65
- interface TokenInputLocale {
66
- addButtonComment?: string;
67
- addButtonTitle?: string;
68
- }
69
-
70
- const ru_RU = {
71
- addButtonComment: 'Нажмите запятую или пробел',
72
- addButtonTitle: 'Добавить',
73
- };
74
-
75
- const en_GB = {
76
- addButtonComment: 'Type comma or space',
77
- addButtonTitle: 'Add',
78
- };
79
- ```
1
+ ```jsx harmony
2
+ import { Token } from '@skbkontur/react-ui';
3
+ import { TokenInputType } from '@skbkontur/react-ui/components/TokenInput';
4
+
5
+ const [selectedItems, setSelectedItems] = React.useState([]);
6
+
7
+ const delay = time => args => new Promise(resolve => setTimeout(resolve, time, args));
8
+
9
+ const getItems = q =>
10
+ Promise.resolve(
11
+ ['First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth'].filter(
12
+ x => x.toLowerCase().includes(q.toLowerCase()) || x.toString(10) === q,
13
+ ),
14
+ ).then(delay(500));
15
+
16
+ const tokenColors = {
17
+ First: {
18
+ idle: 'grayIdle',
19
+ active: 'grayActive',
20
+ },
21
+ Second: {
22
+ idle: 'blueIdle',
23
+ active: 'blueActive',
24
+ },
25
+ Third: {
26
+ idle: 'greenIdle',
27
+ active: 'greenActive',
28
+ },
29
+ Fourth: {
30
+ idle: 'yellowIdle',
31
+ active: 'yellowActive',
32
+ },
33
+ Fifth: {
34
+ idle: 'redIdle',
35
+ active: 'redActive',
36
+ },
37
+ Sixth: {
38
+ idle: 'white',
39
+ active: 'black',
40
+ },
41
+ default: {
42
+ idle: 'defaultIdle',
43
+ active: 'defaultActive',
44
+ },
45
+ };
46
+
47
+ <div style={{ width: '300px' }}>
48
+ <TokenInput
49
+ type={TokenInputType.Combined}
50
+ getItems={getItems}
51
+ selectedItems={selectedItems}
52
+ onValueChange={setSelectedItems}
53
+ renderToken={(item, tokenProps) => (
54
+ <Token key={item.toString()} colors={tokenColors[item] || tokenColors.default} {...tokenProps}>
55
+ {item}
56
+ </Token>
57
+ )}
58
+ />
59
+ </div>;
60
+ ```
61
+
62
+ #### Локали по умолчанию
63
+
64
+ ```typescript static
65
+ interface TokenInputLocale {
66
+ addButtonComment?: string;
67
+ addButtonTitle?: string;
68
+ }
69
+
70
+ const ru_RU = {
71
+ addButtonComment: 'Нажмите запятую или пробел',
72
+ addButtonTitle: 'Добавить',
73
+ };
74
+
75
+ const en_GB = {
76
+ addButtonComment: 'Type comma or space',
77
+ addButtonTitle: 'Add',
78
+ };
79
+ ```
@@ -13,6 +13,7 @@ export interface DropdownContainerProps {
13
13
  disablePortal?: boolean;
14
14
  offsetY?: number;
15
15
  offsetX?: number;
16
+ fixedWidth?: boolean;
16
17
  }
17
18
  export interface DropdownContainerState {
18
19
  position: Nullable<DropdownContainerPosition>;