@semcore/select 3.0.8 → 3.0.11

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 CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
4
4
 
5
+ ## [3.0.11] - 2022-07-13
6
+
7
+ ### Fixed
8
+
9
+ - Fixed color of Addon icons in `InputSearch`.
10
+
11
+ ## [3.0.10] - 2022-07-13
12
+
13
+ ### Changed
14
+
15
+ - Version patch update due to children dependencies update (`@semcore/dropdown-menu` [3.0.5 ~> 3.0.6]).
16
+
17
+ ## [3.0.9] - 2022-07-07
18
+
19
+ ### Changed
20
+
21
+ - Version patch update due to children dependencies update (`@semcore/utils` [3.33.0 ~> 3.34.0], `@semcore/base-trigger` [3.0.6 ~> 3.0.7], `@semcore/icon` [2.27.0 ~> 2.28.0], `@semcore/dropdown-menu` [3.0.4 ~> 3.0.5], `@semcore/input` [3.0.5 ~> 3.0.6], `@semcore/checkbox` [6.0.5 ~> 6.0.6], `@semcore/flex-box` [4.5.5 ~> 4.5.6], `@semcore/divider` [3.0.3 ~> 3.0.4]).
22
+
5
23
  ## [3.0.8] - 2022-06-02
6
24
 
7
25
  ### Changed
package/README.md CHANGED
@@ -0,0 +1,67 @@
1
+ # @semcore/select
2
+
3
+ [![version](https://img.shields.io/npm/v/@semcore/select.svg)](https://www.npmjs.com/@semcore/select)
4
+ [![downloads](https://img.shields.io/npm/dt/@semcore/select.svg)](https://www.npmjs.com/package/@semcore/select)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/semrush/intergalactic/blob/master/LICENSE)
6
+
7
+ > This component is part of the Intergalactic design system
8
+
9
+ ### 📖 [Component documentation](https://developer.semrush.com/intergalactic/components/select/)
10
+
11
+ ### 🏠 [Design system](https://developer.semrush.com/intergalactic/)
12
+
13
+ ## Install
14
+
15
+ ```sh
16
+ npm install @semcore/ui
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ```jsx
22
+ import Select, { InputSearch } from '@semcore/ui/select';
23
+ ```
24
+
25
+ <details>
26
+ <summary>Alternative installation and use</summary>
27
+
28
+ **We do not recommend this usage path due to possible dependency and update issues.**
29
+
30
+ ### Install
31
+
32
+ You can only install one package from the design system
33
+
34
+ ```sh
35
+ npm install @semcore/select @semcore/core
36
+ ```
37
+
38
+ `@semcore/core` - _is the basic package by which we create our components, and it contains all of the common logic
39
+ of the components that is discussed below. There should only be one version of the package in the project._
40
+
41
+ ### Usage
42
+
43
+ You can use the package the same way but without `/ui/` in the import path.
44
+
45
+ ```jsx
46
+ import Select, { InputSearch } from '@semcore/select';
47
+ ```
48
+
49
+ </details>
50
+
51
+ ## 👤 Author
52
+
53
+ [UI-kit team](https://github.com/semrush/intergalactic/blob/master/MAINTAINERS) and [others ❤️](https://github.com/semrush/intergalactic/graphs/contributors)
54
+
55
+ ## 🤝 Contributing
56
+
57
+ Contributions, issues and feature requests are welcome!
58
+
59
+ Feel free to check [issues page](https://github.com/semrush/intergalactic/issues). You can also take a look at the [contributing guide](https://github.com/semrush/intergalactic/blob/master/CONTRIBUTING.md).
60
+
61
+ ## Show your support
62
+
63
+ Give a ⭐️ if this project helped you!
64
+
65
+ ## 📝 License
66
+
67
+ This project is [MIT](https://github.com/semrush/intergalactic/blob/master/LICENSE) licensed.
@@ -9,8 +9,6 @@ Object.defineProperty(exports, "__esModule", {
9
9
  });
10
10
  exports["default"] = void 0;
11
11
 
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
13
 
16
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -29,20 +27,22 @@ var _core = _interopRequireWildcard(require("@semcore/core"));
29
27
 
30
28
  var _react = _interopRequireDefault(require("react"));
31
29
 
32
- var _flexBox = require("@semcore/flex-box");
33
-
34
- var _input = _interopRequireDefault(require("@semcore/input"));
35
-
36
30
  var _m = _interopRequireDefault(require("@semcore/icon/Search/m"));
37
31
 
38
32
  var _m2 = _interopRequireDefault(require("@semcore/icon/Close/m"));
39
33
 
34
+ var _input = _interopRequireDefault(require("@semcore/input"));
35
+
40
36
  var _context = require("./context");
41
37
 
42
38
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
43
39
 
44
40
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
45
41
 
42
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
43
+
44
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
45
+
46
46
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
47
47
 
48
48
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -52,15 +52,16 @@ var style = (
52
52
  /*__reshadow_css_start__*/
53
53
  _core.sstyled.insert(
54
54
  /*__inner_css_start__*/
55
- ".___SInputSearch_qj5zn_gg_.__size_qj5zn_gg_{padding:0}.___SInputSearch_qj5zn_gg_>[data-ui-name=Input]:first-child>[data-ui-name=InputSearch]~div{top:-1px;left:-1px;width:100%;border-radius:6px 6px 0 0}.___SInputSearch_qj5zn_gg_._size_m_qj5zn_gg_>[data-ui-name=Input]:first-child{height:32px}.___SInputSearch_qj5zn_gg_ [data-ui-name=\"Input.Addon\"]:last-of-type{visibility:hidden}.___SInputSearch_qj5zn_gg_.__filled_qj5zn_gg_ [data-ui-name=\"Input.Addon\"]:last-of-type{visibility:visible}"
55
+ ".___SInputSearch_1wz78_gg_._size_m_1wz78_gg_{height:32px}.___SClose_1wz78_gg_.__hide_1wz78_gg_{visibility:hidden}.___SOutline_1wz78_gg_{top:-1px;left:-1px;width:100%;border-radius:6px 6px 0 0}"
56
56
  /*__inner_css_end__*/
57
- , "16lophm_gg_")
57
+ , "lflkyj_gg_")
58
58
  /*__reshadow_css_end__*/
59
59
  , {
60
- "__SInputSearch": "___SInputSearch_qj5zn_gg_",
61
- "_size": "__size_qj5zn_gg_",
62
- "_size_m": "_size_m_qj5zn_gg_",
63
- "_filled": "__filled_qj5zn_gg_"
60
+ "__SInputSearch": "___SInputSearch_1wz78_gg_",
61
+ "_size_m": "_size_m_1wz78_gg_",
62
+ "__SClose": "___SClose_1wz78_gg_",
63
+ "_hide": "__hide_1wz78_gg_",
64
+ "__SOutline": "___SOutline_1wz78_gg_"
64
65
  });
65
66
  var MAP_SIZE_TO_ICON = {
66
67
  m: [_m["default"], _m2["default"]],
@@ -98,31 +99,32 @@ var InputSearch = /*#__PURE__*/function (_Component) {
98
99
  }, {
99
100
  key: "render",
100
101
  value: function render() {
101
- var _ref;
102
+ var _ref = this.asProps,
103
+ _ref2;
102
104
 
103
- var SInputSearch = _flexBox.Box;
105
+ var Value = _input["default"].Value;
106
+ var SInputSearch = _input["default"];
107
+ var SClose = _input["default"].Addon;
104
108
  var _this$asProps = this.asProps,
105
109
  size = _this$asProps.size,
106
110
  value = _this$asProps.value,
107
- forwardRef = _this$asProps.forwardRef,
108
111
  styles = _this$asProps.styles;
109
112
  var finalSize = size || this.context.size;
110
- return _ref = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SInputSearch, _ref.cn("SInputSearch", {
113
+ var hideClose = !value;
114
+ var IconClose = MAP_SIZE_TO_ICON[finalSize][1];
115
+ var IconSearch = MAP_SIZE_TO_ICON[finalSize][0];
116
+ return _ref2 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SInputSearch, _ref2.cn("SInputSearch", {
111
117
  "size": finalSize,
112
- "use:filled": value
113
- }), /*#__PURE__*/_react["default"].createElement(_input["default"], _ref.cn("Input", {
114
- "size": finalSize
115
- }), /*#__PURE__*/_react["default"].createElement(_input["default"].Addon, {
116
- tag: MAP_SIZE_TO_ICON[finalSize][0]
117
- }), /*#__PURE__*/_react["default"].createElement(_input["default"].Value, (0, _extends2["default"])({
118
- ref: forwardRef,
119
- autoFocus: true
120
- }, this.asProps)), /*#__PURE__*/_react["default"].createElement(_input["default"].Addon, {
121
- tag: MAP_SIZE_TO_ICON[finalSize][1],
122
- role: "button",
123
- interactive: true,
124
- onClick: this.handleClear
125
- })));
118
+ "styles": styles
119
+ }), /*#__PURE__*/_react["default"].createElement(_input["default"].Addon, null, /*#__PURE__*/_react["default"].createElement(IconSearch, _ref2.cn("IconSearch", {}))), /*#__PURE__*/_react["default"].createElement(Value, _ref2.cn("Value", _objectSpread({}, (0, _core.assignProps)({
120
+ "autoFocus": true
121
+ }, _ref)))), /*#__PURE__*/_react["default"].createElement(SClose, _ref2.cn("SClose", {
122
+ "role": "button",
123
+ "hide": hideClose,
124
+ "aria-hidden": hideClose,
125
+ "interactive": true,
126
+ "onClick": this.handleClear
127
+ }), /*#__PURE__*/_react["default"].createElement(IconClose, _ref2.cn("IconClose", {}))));
126
128
  }
127
129
  }]);
128
130
  return InputSearch;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/InputSearch.jsx"],"names":["MAP_SIZE_TO_ICON","m","SearchM","CloseM","l","InputSearch","e","handlers","value","SInputSearch","Box","asProps","size","forwardRef","styles","finalSize","context","handleClear","Component","style","defaultValue","selectContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AADA;;AAEA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAMA,gBAAgB,GAAG;AACvBC,EAAAA,CAAC,EAAE,CAACC,aAAD,EAAUC,cAAV,CADoB;AAEvBC,EAAAA,CAAC,EAAE,CAACF,aAAD,EAAUC,cAAV;AAFoB,CAAzB;;IAKME,W;;;;;;;;;;;;;;;oGAiBU,UAACC,CAAD,EAAO;AACnB,YAAKC,QAAL,CAAcC,KAAd,CAAoB,EAApB,EAAwBF,CAAxB;AACD,K;;;;;;WARD,6BAAoB;AAClB,aAAO;AACLE,QAAAA,KAAK,EAAE;AADF,OAAP;AAGD;;;WAMD,kBAAS;AAAA;;AACP,UAAMC,YAAY,GAAGC,YAArB;AACA,0BAA4C,KAAKC,OAAjD;AAAA,UAAQC,IAAR,iBAAQA,IAAR;AAAA,UAAcJ,KAAd,iBAAcA,KAAd;AAAA,UAAqBK,UAArB,iBAAqBA,UAArB;AAAA,UAAiCC,MAAjC,iBAAiCA,MAAjC;AACA,UAAMC,SAAS,GAAGH,IAAI,IAAI,KAAKI,OAAL,CAAaJ,IAAvC;AAEA,oBAAO,mBAAQE,MAAR,CAAP,eACE,gCAAC,YAAD;AAAA,gBAAoBC,SAApB;AAAA,sBAA2CP;AAA3C,uBACE,gCAAC,iBAAD;AAAA,gBAAaO;AAAb,uBACE,gCAAC,iBAAD,CAAO,KAAP;AAAa,QAAA,GAAG,EAAEf,gBAAgB,CAACe,SAAD,CAAhB,CAA4B,CAA5B;AAAlB,QADF,eAEE,gCAAC,iBAAD,CAAO,KAAP;AAAa,QAAA,GAAG,EAAEF,UAAlB;AAA8B,QAAA,SAAS;AAAvC,SAA4C,KAAKF,OAAjD,EAFF,eAGE,gCAAC,iBAAD,CAAO,KAAP;AACE,QAAA,GAAG,EAAEX,gBAAgB,CAACe,SAAD,CAAhB,CAA4B,CAA5B,CADP;AAEE,QAAA,IAAI,EAAC,QAFP;AAGE,QAAA,WAAW,MAHb;AAIE,QAAA,OAAO,EAAE,KAAKE;AAJhB,QAHF,CADF,CADF;AAcD;;;EAxCuBC,e;;iCAApBb,W,iBACiB,a;iCADjBA,W,WAGWc,K;iCAHXd,W,kBAKkB;AACpBe,EAAAA,YAAY,EAAE;AADM,C;iCALlBf,W,iBASiBgB,sB;;eAkCR,sBAAgBhB,WAAhB,C","sourcesContent":["import React from 'react';\nimport createComponent, { Component, sstyled } from '@semcore/core';\nimport { Box } from '@semcore/flex-box';\nimport Input from '@semcore/input';\nimport SearchM from '@semcore/icon/Search/m';\nimport CloseM from '@semcore/icon/Close/m';\nimport { selectContext } from './context';\n\nimport style from './style/input-search.shadow.css';\n\nconst MAP_SIZE_TO_ICON = {\n m: [SearchM, CloseM],\n l: [SearchM, CloseM],\n};\n\nclass InputSearch extends Component {\n static displayName = 'InputSearch';\n\n static style = style;\n\n static defaultProps = {\n defaultValue: '',\n };\n\n static contextType = selectContext;\n\n uncontrolledProps() {\n return {\n value: null,\n };\n }\n\n handleClear = (e) => {\n this.handlers.value('', e);\n };\n\n render() {\n const SInputSearch = Box;\n const { size, value, forwardRef, styles } = this.asProps;\n const finalSize = size || this.context.size;\n\n return sstyled(styles)(\n <SInputSearch size={finalSize} use:filled={value}>\n <Input size={finalSize}>\n <Input.Addon tag={MAP_SIZE_TO_ICON[finalSize][0]} />\n <Input.Value ref={forwardRef} autoFocus {...this.asProps} />\n <Input.Addon\n tag={MAP_SIZE_TO_ICON[finalSize][1]}\n role=\"button\"\n interactive\n onClick={this.handleClear}\n />\n </Input>\n </SInputSearch>,\n );\n }\n}\n\nexport default createComponent(InputSearch);\n"],"file":"InputSearch.js"}
1
+ {"version":3,"sources":["../../src/InputSearch.jsx"],"names":["MAP_SIZE_TO_ICON","m","SearchM","CloseM","l","InputSearch","e","handlers","value","Value","Input","SInputSearch","SClose","Addon","asProps","size","styles","finalSize","context","hideClose","IconClose","IconSearch","handleClear","Component","style","defaultValue","selectContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AADA;;AAEA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAMA,gBAAgB,GAAG;AACvBC,EAAAA,CAAC,EAAE,CAACC,aAAD,EAAUC,cAAV,CADoB;AAEvBC,EAAAA,CAAC,EAAE,CAACF,aAAD,EAAUC,cAAV;AAFoB,CAAzB;;IAKME,W;;;;;;;;;;;;;;;oGAiBU,UAACC,CAAD,EAAO;AACnB,YAAKC,QAAL,CAAcC,KAAd,CAAoB,EAApB,EAAwBF,CAAxB;AACD,K;;;;;;WARD,6BAAoB;AAClB,aAAO;AACLE,QAAAA,KAAK,EAAE;AADF,OAAP;AAGD;;;WAMD,kBAAS;AAAA;AAAA;;AACP,UAAMC,KAAK,GAcQC,kBAAMD,KAdzB;AACA,UAAME,YAAY,GAAGD,iBAArB;AACA,UAAME,MAAM,GAAGF,kBAAMG,KAArB;AACA,0BAAgC,KAAKC,OAArC;AAAA,UAAQC,IAAR,iBAAQA,IAAR;AAAA,UAAcP,KAAd,iBAAcA,KAAd;AAAA,UAAqBQ,MAArB,iBAAqBA,MAArB;AACA,UAAMC,SAAS,GAAGF,IAAI,IAAI,KAAKG,OAAL,CAAaH,IAAvC;AACA,UAAMI,SAAS,GAAG,CAACX,KAAnB;AACA,UAAMY,SAAS,GAAGpB,gBAAgB,CAACiB,SAAD,CAAhB,CAA4B,CAA5B,CAAlB;AACA,UAAMI,UAAU,GAAGrB,gBAAgB,CAACiB,SAAD,CAAhB,CAA4B,CAA5B,CAAnB;AAEA,qBAAO,mBAAQD,MAAR,CAAP,eACE,gCAAC,YAAD;AAAA,gBAAoBC,SAApB;AAAA,kBAAuCD;AAAvC,uBACE,gCAAC,iBAAD,CAAO,KAAP,qBACE,gCAAC,UAAD,6BADF,CADF,eAIE,gCAAC,KAAD;AAAA;AAAA,iBAJF,eAKE,gCAAC,MAAD;AAAA,gBACO,QADP;AAAA,gBAGQG,SAHR;AAAA,uBAIeA,SAJf;AAAA;AAAA,mBAMW,KAAKG;AANhB,uBAQE,gCAAC,SAAD,4BARF,CALF,CADF;AAkBD;;;EAjDuBC,e;;iCAApBlB,W,iBACiB,a;iCADjBA,W,WAGWmB,K;iCAHXnB,W,kBAKkB;AACpBoB,EAAAA,YAAY,EAAE;AADM,C;iCALlBpB,W,iBASiBqB,sB;;eA2CR,sBAAgBrB,WAAhB,C","sourcesContent":["import React from 'react';\nimport createComponent, { Component, sstyled, Root } from '@semcore/core';\nimport SearchM from '@semcore/icon/Search/m';\nimport CloseM from '@semcore/icon/Close/m';\nimport Input from '@semcore/input';\nimport { selectContext } from './context';\n\nimport style from './style/input-search.shadow.css';\n\nconst MAP_SIZE_TO_ICON = {\n m: [SearchM, CloseM],\n l: [SearchM, CloseM],\n};\n\nclass InputSearch extends Component {\n static displayName = 'InputSearch';\n\n static style = style;\n\n static defaultProps = {\n defaultValue: '',\n };\n\n static contextType = selectContext;\n\n uncontrolledProps() {\n return {\n value: null,\n };\n }\n\n handleClear = (e) => {\n this.handlers.value('', e);\n };\n\n render() {\n const Value = Root;\n const SInputSearch = Input;\n const SClose = Input.Addon;\n const { size, value, styles } = this.asProps;\n const finalSize = size || this.context.size;\n const hideClose = !value;\n const IconClose = MAP_SIZE_TO_ICON[finalSize][1];\n const IconSearch = MAP_SIZE_TO_ICON[finalSize][0];\n\n return sstyled(styles)(\n <SInputSearch size={finalSize} styles={styles}>\n <Input.Addon>\n <IconSearch />\n </Input.Addon>\n <Value render={Input.Value} autoFocus />\n <SClose\n role=\"button\"\n /* hide through css because the width of the input changes */\n hide={hideClose}\n aria-hidden={hideClose}\n interactive\n onClick={this.handleClear}\n >\n <IconClose />\n </SClose>\n </SInputSearch>,\n );\n }\n}\n\nexport default createComponent(InputSearch);\n"],"file":"InputSearch.js"}
package/lib/cjs/Select.js CHANGED
@@ -269,11 +269,10 @@ var RootSelect = /*#__PURE__*/function (_Component) {
269
269
  }, {
270
270
  key: "componentDidUpdate",
271
271
  value: function componentDidUpdate(prevProps, prevState) {
272
- var visible = this.asProps.visible; // TODO: вынести в хелпер
273
- // Если открыли
272
+ var visible = this.asProps.visible;
274
273
 
275
274
  if (visible) {
276
- this.isScrolledToFirstOption = false; // Если uncontroll
275
+ this.isScrolledToFirstOption = false;
277
276
 
278
277
  if (prevProps.visible === undefined) {
279
278
  if (prevState.visible !== visible) this.scrollToSelectedOption();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Select.jsx"],"names":["isSelectedOption","value","valueOption","Array","isArray","includes","isEmptyValue","length","getEmptyValue","multiselect","RootSelect","React","createRef","optionValue","e","newValue","asProps","filter","v","concat","handlers","visible","emptyValue","size","disabled","state","placeholder","options","forwardRef","name","empty","$hiddenRef","active","onClear","handlerClear","children","renderChildrenTrigger","props","selected","other","_optionSelected","isScrolledToFirstOption","ref","firstSelectedOptionRef","onClick","bindHandlerOptionClick","hasOption","undefined","optionProps","getOptionProps","my","reduce","acc","selectedOption","find","o","push","label","setTimeout","current","scrollIntoView","block","inline","scrollToSelectedOption","prevProps","prevState","Children","advanceMode","Select","Trigger","displayName","Popper","logger","warn","DropdownMenu","map","option","i","Component","style","defaultValue","defaultVisible","tag","Tag","ButtonTrigger","Text","Addon","Checkbox","SOptionCheckbox","componentProps","theme","styles","cn","checked","className","InputSearchWrapper","InputSearch","List","Menu","Option","Item","OptionTitle","ItemTitle","OptionHint","ItemHint","Divider","Input","parent","context","selectContext"],"mappings":"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","sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport createComponent, { Component, Root, sstyled } from '@semcore/core';\nimport DropdownMenu from '@semcore/dropdown-menu';\nimport { ButtonTrigger } from '@semcore/base-trigger';\nimport Divider from '@semcore/divider';\nimport findComponent from '@semcore/utils/lib/findComponent';\nimport logger from '@semcore/utils/lib/logger';\nimport resolveColor from '@semcore/utils/lib/color';\nimport addonTextChildren from '@semcore/utils/lib/addonTextChildren';\nimport InputSearch from './InputSearch';\nimport { useBox } from '@semcore/flex-box';\nimport { selectContext } from './context';\n\nimport style from './style/select.shadow.css';\n\nfunction isSelectedOption(value, valueOption) {\n return Array.isArray(value) ? value.includes(valueOption) : valueOption === value;\n}\n\nfunction isEmptyValue(value) {\n return Array.isArray(value) ? value.length === 0 : value === null;\n}\n\nfunction getEmptyValue(multiselect) {\n return multiselect ? [] : null;\n}\n\nclass RootSelect extends Component {\n static displayName = 'Select';\n\n static style = style;\n\n static defaultProps = (props) => ({\n placeholder: props.multiselect ? 'Select options' : 'Select option',\n size: 'm',\n defaultValue: getEmptyValue(props.multiselect),\n defaultVisible: false,\n });\n\n firstSelectedOptionRef = React.createRef();\n\n isScrolledToFirstOption = false;\n\n uncontrolledProps() {\n return {\n visible: null,\n value: null,\n };\n }\n\n getTriggerProps() {\n const {\n size,\n disabled,\n visible,\n state,\n placeholder,\n value,\n options,\n forwardRef,\n name,\n multiselect,\n } = this.asProps;\n\n return {\n empty: isEmptyValue(value),\n size,\n value,\n name,\n $hiddenRef: forwardRef,\n multiselect,\n state,\n placeholder,\n disabled,\n active: visible,\n onClear: this.handlerClear,\n children: this.renderChildrenTrigger(value, options),\n };\n }\n\n getOptionProps(props) {\n const { value } = this.asProps;\n const selected = isSelectedOption(value, props.value);\n const other = {};\n this._optionSelected = selected;\n\n if (selected && !this.isScrolledToFirstOption) {\n other.ref = this.firstSelectedOptionRef;\n this.isScrolledToFirstOption = true;\n }\n\n return {\n selected,\n onClick: this.bindHandlerOptionClick(props.value),\n ...other,\n };\n }\n\n getOptionCheckboxProps(props) {\n const { size } = this.asProps;\n const hasOption = props.value === undefined;\n const optionProps = hasOption ? {} : this.getOptionProps(props);\n const selected = this._optionSelected;\n this._optionSelected = null;\n return {\n ...optionProps,\n size,\n selected,\n };\n }\n\n getDividerProps() {\n return { my: 1 };\n }\n\n renderChildrenTrigger(value, options) {\n if (options) {\n return [].concat(value).reduce((acc, value) => {\n const selectedOption = options.find((o) => isSelectedOption(value, o.value));\n if (!selectedOption) return acc;\n if (acc.length) acc.push(', ');\n acc.push(selectedOption.label || selectedOption.value);\n return acc;\n }, []);\n }\n return Array.isArray(value)\n ? value.reduce((acc, value) => {\n if (acc.length) acc.push(', ');\n acc.push(value);\n return acc;\n }, [])\n : value;\n }\n\n bindHandlerOptionClick = (optionValue) => (e) => {\n let newValue = optionValue;\n const { value, multiselect } = this.asProps;\n if (Array.isArray(value)) {\n if (value.includes(optionValue)) {\n newValue = value.filter((v) => v !== optionValue);\n } else {\n newValue = value.concat(optionValue);\n }\n }\n this.handlers.value(newValue, e);\n if (!multiselect) this.handlers.visible(false);\n };\n\n handlerClear = (e) => {\n const { value } = this.asProps;\n const emptyValue = getEmptyValue(Array.isArray(value));\n this.handlers.value(emptyValue, e);\n this.handlers.visible(false);\n };\n\n scrollToSelectedOption() {\n setTimeout(() => {\n this.firstSelectedOptionRef.current?.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }, 0);\n }\n\n componentDidMount() {\n const { visible } = this.asProps;\n if (visible) {\n this.scrollToSelectedOption();\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { visible } = this.asProps;\n // TODO: вынести в хелпер\n // Если открыли\n if (visible) {\n this.isScrolledToFirstOption = false;\n\n // Если uncontroll\n if (prevProps.visible === undefined) {\n if (prevState.visible !== visible) this.scrollToSelectedOption();\n } else {\n if (prevProps.visible !== visible) this.scrollToSelectedOption();\n }\n }\n }\n\n render() {\n const { Children, options, multiselect, ...other } = this.asProps;\n const advanceMode = findComponent(Children, [\n Select.Trigger.displayName,\n Select.Popper.displayName,\n ]);\n\n logger.warn(\n options && advanceMode,\n \"Don't use at the same time 'options' property and '<Select.Trigger/>/<Select.Popper/>'\",\n other['data-ui-name'] || Select.displayName,\n );\n\n if (options) {\n return (\n <Root render={DropdownMenu}>\n <Select.Trigger {...other} />\n <Select.Menu>\n {options.map((option, i) => {\n return (\n <Select.Option key={i} {...option}>\n {multiselect && <Select.Option.Checkbox />}\n {option.children}\n </Select.Option>\n );\n })}\n </Select.Menu>\n </Root>\n );\n }\n\n return (\n <Root render={DropdownMenu}>\n <Children />\n </Root>\n );\n }\n}\n\nfunction Trigger({ Children, name, value, $hiddenRef, tag: Tag = ButtonTrigger }) {\n return (\n <Root render={DropdownMenu.Trigger} tag={Tag} placeholder=\"Select option\">\n {addonTextChildren(\n Children,\n Tag.Text || ButtonTrigger.Text,\n Tag.Addon || ButtonTrigger.Addon,\n )}\n {name && <input type=\"hidden\" defaultValue={value} name={name} ref={$hiddenRef} />}\n </Root>\n );\n}\n\nfunction Checkbox(props) {\n const [SOptionCheckbox, componentProps] = useBox(props, props.forwardRef);\n const { size, theme, selected } = props;\n const styles = sstyled(props.styles);\n\n const { className, style } = styles.cn('SOptionCheckbox', {\n size,\n 'use:theme': resolveColor(theme),\n checked: selected,\n });\n\n return (\n <SOptionCheckbox\n {...componentProps}\n className={cn(className, componentProps.className) || undefined}\n style={{ ...style, ...componentProps.style }}\n />\n );\n}\n\nconst InputSearchWrapper = function () {\n return <Root render={InputSearch} />;\n};\n\nconst Select = createComponent(\n RootSelect,\n {\n Trigger: [\n Trigger,\n {\n Addon: ButtonTrigger.Addon,\n Text: ButtonTrigger.Text,\n },\n ],\n Popper: DropdownMenu.Popper,\n List: DropdownMenu.List,\n Menu: DropdownMenu.Menu,\n Option: [\n DropdownMenu.Item,\n {\n Addon: DropdownMenu.Item.Addon,\n Checkbox,\n },\n ],\n OptionTitle: DropdownMenu.ItemTitle,\n OptionHint: DropdownMenu.ItemHint,\n Divider,\n InputSearch: InputSearchWrapper,\n Input: InputSearchWrapper,\n },\n { parent: DropdownMenu, context: selectContext },\n);\n\nexport default Select;\n"],"file":"Select.js"}
1
+ {"version":3,"sources":["../../src/Select.jsx"],"names":["isSelectedOption","value","valueOption","Array","isArray","includes","isEmptyValue","length","getEmptyValue","multiselect","RootSelect","React","createRef","optionValue","e","newValue","asProps","filter","v","concat","handlers","visible","emptyValue","size","disabled","state","placeholder","options","forwardRef","name","empty","$hiddenRef","active","onClear","handlerClear","children","renderChildrenTrigger","props","selected","other","_optionSelected","isScrolledToFirstOption","ref","firstSelectedOptionRef","onClick","bindHandlerOptionClick","hasOption","undefined","optionProps","getOptionProps","my","reduce","acc","selectedOption","find","o","push","label","setTimeout","current","scrollIntoView","block","inline","scrollToSelectedOption","prevProps","prevState","Children","advanceMode","Select","Trigger","displayName","Popper","logger","warn","DropdownMenu","map","option","i","Component","style","defaultValue","defaultVisible","tag","Tag","ButtonTrigger","Text","Addon","Checkbox","SOptionCheckbox","componentProps","theme","styles","cn","checked","className","InputSearchWrapper","InputSearch","List","Menu","Option","Item","OptionTitle","ItemTitle","OptionHint","ItemHint","Divider","Input","parent","context","selectContext"],"mappings":"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","sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport createComponent, { Component, Root, sstyled } from '@semcore/core';\nimport DropdownMenu from '@semcore/dropdown-menu';\nimport { ButtonTrigger } from '@semcore/base-trigger';\nimport Divider from '@semcore/divider';\nimport findComponent from '@semcore/utils/lib/findComponent';\nimport logger from '@semcore/utils/lib/logger';\nimport resolveColor from '@semcore/utils/lib/color';\nimport addonTextChildren from '@semcore/utils/lib/addonTextChildren';\nimport InputSearch from './InputSearch';\nimport { useBox } from '@semcore/flex-box';\nimport { selectContext } from './context';\n\nimport style from './style/select.shadow.css';\n\nfunction isSelectedOption(value, valueOption) {\n return Array.isArray(value) ? value.includes(valueOption) : valueOption === value;\n}\n\nfunction isEmptyValue(value) {\n return Array.isArray(value) ? value.length === 0 : value === null;\n}\n\nfunction getEmptyValue(multiselect) {\n return multiselect ? [] : null;\n}\n\nclass RootSelect extends Component {\n static displayName = 'Select';\n\n static style = style;\n\n static defaultProps = (props) => ({\n placeholder: props.multiselect ? 'Select options' : 'Select option',\n size: 'm',\n defaultValue: getEmptyValue(props.multiselect),\n defaultVisible: false,\n });\n\n firstSelectedOptionRef = React.createRef();\n\n isScrolledToFirstOption = false;\n\n uncontrolledProps() {\n return {\n visible: null,\n value: null,\n };\n }\n\n getTriggerProps() {\n const {\n size,\n disabled,\n visible,\n state,\n placeholder,\n value,\n options,\n forwardRef,\n name,\n multiselect,\n } = this.asProps;\n\n return {\n empty: isEmptyValue(value),\n size,\n value,\n name,\n $hiddenRef: forwardRef,\n multiselect,\n state,\n placeholder,\n disabled,\n active: visible,\n onClear: this.handlerClear,\n children: this.renderChildrenTrigger(value, options),\n };\n }\n\n getOptionProps(props) {\n const { value } = this.asProps;\n const selected = isSelectedOption(value, props.value);\n const other = {};\n this._optionSelected = selected;\n\n if (selected && !this.isScrolledToFirstOption) {\n other.ref = this.firstSelectedOptionRef;\n this.isScrolledToFirstOption = true;\n }\n\n return {\n selected,\n onClick: this.bindHandlerOptionClick(props.value),\n ...other,\n };\n }\n\n getOptionCheckboxProps(props) {\n const { size } = this.asProps;\n const hasOption = props.value === undefined;\n const optionProps = hasOption ? {} : this.getOptionProps(props);\n const selected = this._optionSelected;\n this._optionSelected = null;\n return {\n ...optionProps,\n size,\n selected,\n };\n }\n\n getDividerProps() {\n return { my: 1 };\n }\n\n renderChildrenTrigger(value, options) {\n if (options) {\n return [].concat(value).reduce((acc, value) => {\n const selectedOption = options.find((o) => isSelectedOption(value, o.value));\n if (!selectedOption) return acc;\n if (acc.length) acc.push(', ');\n acc.push(selectedOption.label || selectedOption.value);\n return acc;\n }, []);\n }\n return Array.isArray(value)\n ? value.reduce((acc, value) => {\n if (acc.length) acc.push(', ');\n acc.push(value);\n return acc;\n }, [])\n : value;\n }\n\n bindHandlerOptionClick = (optionValue) => (e) => {\n let newValue = optionValue;\n const { value, multiselect } = this.asProps;\n if (Array.isArray(value)) {\n if (value.includes(optionValue)) {\n newValue = value.filter((v) => v !== optionValue);\n } else {\n newValue = value.concat(optionValue);\n }\n }\n this.handlers.value(newValue, e);\n if (!multiselect) this.handlers.visible(false);\n };\n\n handlerClear = (e) => {\n const { value } = this.asProps;\n const emptyValue = getEmptyValue(Array.isArray(value));\n this.handlers.value(emptyValue, e);\n this.handlers.visible(false);\n };\n\n scrollToSelectedOption() {\n setTimeout(() => {\n this.firstSelectedOptionRef.current?.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }, 0);\n }\n\n componentDidMount() {\n const { visible } = this.asProps;\n if (visible) {\n this.scrollToSelectedOption();\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { visible } = this.asProps;\n if (visible) {\n this.isScrolledToFirstOption = false;\n\n if (prevProps.visible === undefined) {\n if (prevState.visible !== visible) this.scrollToSelectedOption();\n } else {\n if (prevProps.visible !== visible) this.scrollToSelectedOption();\n }\n }\n }\n\n render() {\n const { Children, options, multiselect, ...other } = this.asProps;\n const advanceMode = findComponent(Children, [\n Select.Trigger.displayName,\n Select.Popper.displayName,\n ]);\n\n logger.warn(\n options && advanceMode,\n \"Don't use at the same time 'options' property and '<Select.Trigger/>/<Select.Popper/>'\",\n other['data-ui-name'] || Select.displayName,\n );\n\n if (options) {\n return (\n <Root render={DropdownMenu}>\n <Select.Trigger {...other} />\n <Select.Menu>\n {options.map((option, i) => {\n return (\n <Select.Option key={i} {...option}>\n {multiselect && <Select.Option.Checkbox />}\n {option.children}\n </Select.Option>\n );\n })}\n </Select.Menu>\n </Root>\n );\n }\n\n return (\n <Root render={DropdownMenu}>\n <Children />\n </Root>\n );\n }\n}\n\nfunction Trigger({ Children, name, value, $hiddenRef, tag: Tag = ButtonTrigger }) {\n return (\n <Root render={DropdownMenu.Trigger} tag={Tag} placeholder=\"Select option\">\n {addonTextChildren(\n Children,\n Tag.Text || ButtonTrigger.Text,\n Tag.Addon || ButtonTrigger.Addon,\n )}\n {name && <input type=\"hidden\" defaultValue={value} name={name} ref={$hiddenRef} />}\n </Root>\n );\n}\n\nfunction Checkbox(props) {\n const [SOptionCheckbox, componentProps] = useBox(props, props.forwardRef);\n const { size, theme, selected } = props;\n const styles = sstyled(props.styles);\n\n const { className, style } = styles.cn('SOptionCheckbox', {\n size,\n 'use:theme': resolveColor(theme),\n checked: selected,\n });\n\n return (\n <SOptionCheckbox\n {...componentProps}\n className={cn(className, componentProps.className) || undefined}\n style={{ ...style, ...componentProps.style }}\n />\n );\n}\n\nconst InputSearchWrapper = function () {\n return <Root render={InputSearch} />;\n};\n\nconst Select = createComponent(\n RootSelect,\n {\n Trigger: [\n Trigger,\n {\n Addon: ButtonTrigger.Addon,\n Text: ButtonTrigger.Text,\n },\n ],\n Popper: DropdownMenu.Popper,\n List: DropdownMenu.List,\n Menu: DropdownMenu.Menu,\n Option: [\n DropdownMenu.Item,\n {\n Addon: DropdownMenu.Item.Addon,\n Checkbox,\n },\n ],\n OptionTitle: DropdownMenu.ItemTitle,\n OptionHint: DropdownMenu.ItemHint,\n Divider,\n InputSearch: InputSearchWrapper,\n Input: InputSearchWrapper,\n },\n { parent: DropdownMenu, context: selectContext },\n);\n\nexport default Select;\n"],"file":"Select.js"}
@@ -1,24 +1,17 @@
1
1
  @import '@semcore/utils/style/var.css';
2
2
 
3
- SInputSearch[size] {
4
- padding: 0;
5
- }
6
-
7
- SInputSearch > [data-ui-name='Input']:first-child > [data-ui-name='InputSearch'] ~ div {
8
- top: -1px;
9
- left: -1px;
10
- width: 100%;
11
- border-radius: var(--rounded-m) var(--rounded-m) 0 0;
12
- }
13
-
14
- SInputSearch[size='m'] > [data-ui-name='Input']:first-child {
3
+ SInputSearch[size='m'] {
15
4
  height: 32px;
16
5
  }
17
6
 
18
- SInputSearch [data-ui-name='Input.Addon']:last-of-type {
7
+ SClose[hide] {
19
8
  visibility: hidden;
20
9
  }
21
10
 
22
- SInputSearch[filled] [data-ui-name='Input.Addon']:last-of-type {
23
- visibility: visible;
11
+ /* Style for Input */
12
+ SOutline {
13
+ top: -1px;
14
+ left: -1px;
15
+ width: 100%;
16
+ border-radius: var(--rounded-m) var(--rounded-m) 0 0;
24
17
  }
@@ -1,4 +1,3 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
2
  import _createClass from "@babel/runtime/helpers/createClass";
4
3
  import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
@@ -7,17 +6,21 @@ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstruct
7
6
  import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
8
7
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
9
8
  import { sstyled as _sstyled } from "@semcore/core";
9
+ import { assignProps as _assignProps } from "@semcore/core";
10
+
11
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12
+
13
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10
14
 
11
15
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
12
16
 
13
17
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
14
18
 
15
19
  import React from 'react';
16
- import createComponent, { Component, sstyled } from '@semcore/core';
17
- import { Box } from '@semcore/flex-box';
18
- import Input from '@semcore/input';
20
+ import createComponent, { Component, sstyled, Root } from '@semcore/core';
19
21
  import SearchM from '@semcore/icon/Search/m';
20
22
  import CloseM from '@semcore/icon/Close/m';
23
+ import Input from '@semcore/input';
21
24
  import { selectContext } from './context';
22
25
 
23
26
  /*__reshadow-styles__:"./style/input-search.shadow.css"*/
@@ -25,15 +28,16 @@ var style = (
25
28
  /*__reshadow_css_start__*/
26
29
  _sstyled.insert(
27
30
  /*__inner_css_start__*/
28
- ".___SInputSearch_qj5zn_gg_.__size_qj5zn_gg_{padding:0}.___SInputSearch_qj5zn_gg_>[data-ui-name=Input]:first-child>[data-ui-name=InputSearch]~div{top:-1px;left:-1px;width:100%;border-radius:6px 6px 0 0}.___SInputSearch_qj5zn_gg_._size_m_qj5zn_gg_>[data-ui-name=Input]:first-child{height:32px}.___SInputSearch_qj5zn_gg_ [data-ui-name=\"Input.Addon\"]:last-of-type{visibility:hidden}.___SInputSearch_qj5zn_gg_.__filled_qj5zn_gg_ [data-ui-name=\"Input.Addon\"]:last-of-type{visibility:visible}"
31
+ ".___SInputSearch_1wz78_gg_._size_m_1wz78_gg_{height:32px}.___SClose_1wz78_gg_.__hide_1wz78_gg_{visibility:hidden}.___SOutline_1wz78_gg_{top:-1px;left:-1px;width:100%;border-radius:6px 6px 0 0}"
29
32
  /*__inner_css_end__*/
30
- , "16lophm_gg_")
33
+ , "lflkyj_gg_")
31
34
  /*__reshadow_css_end__*/
32
35
  , {
33
- "__SInputSearch": "___SInputSearch_qj5zn_gg_",
34
- "_size": "__size_qj5zn_gg_",
35
- "_size_m": "_size_m_qj5zn_gg_",
36
- "_filled": "__filled_qj5zn_gg_"
36
+ "__SInputSearch": "___SInputSearch_1wz78_gg_",
37
+ "_size_m": "_size_m_1wz78_gg_",
38
+ "__SClose": "___SClose_1wz78_gg_",
39
+ "_hide": "__hide_1wz78_gg_",
40
+ "__SOutline": "___SOutline_1wz78_gg_"
37
41
  });
38
42
  var MAP_SIZE_TO_ICON = {
39
43
  m: [SearchM, CloseM],
@@ -73,31 +77,32 @@ var InputSearch = /*#__PURE__*/function (_Component) {
73
77
  }, {
74
78
  key: "render",
75
79
  value: function render() {
76
- var _ref;
80
+ var _ref = this.asProps,
81
+ _ref2;
77
82
 
78
- var SInputSearch = Box;
83
+ var Value = Input.Value;
84
+ var SInputSearch = Input;
85
+ var SClose = Input.Addon;
79
86
  var _this$asProps = this.asProps,
80
87
  size = _this$asProps.size,
81
88
  value = _this$asProps.value,
82
- forwardRef = _this$asProps.forwardRef,
83
89
  styles = _this$asProps.styles;
84
90
  var finalSize = size || this.context.size;
85
- return _ref = sstyled(styles), /*#__PURE__*/React.createElement(SInputSearch, _ref.cn("SInputSearch", {
91
+ var hideClose = !value;
92
+ var IconClose = MAP_SIZE_TO_ICON[finalSize][1];
93
+ var IconSearch = MAP_SIZE_TO_ICON[finalSize][0];
94
+ return _ref2 = sstyled(styles), /*#__PURE__*/React.createElement(SInputSearch, _ref2.cn("SInputSearch", {
86
95
  "size": finalSize,
87
- "use:filled": value
88
- }), /*#__PURE__*/React.createElement(Input, _ref.cn("Input", {
89
- "size": finalSize
90
- }), /*#__PURE__*/React.createElement(Input.Addon, {
91
- tag: MAP_SIZE_TO_ICON[finalSize][0]
92
- }), /*#__PURE__*/React.createElement(Input.Value, _extends({
93
- ref: forwardRef,
94
- autoFocus: true
95
- }, this.asProps)), /*#__PURE__*/React.createElement(Input.Addon, {
96
- tag: MAP_SIZE_TO_ICON[finalSize][1],
97
- role: "button",
98
- interactive: true,
99
- onClick: this.handleClear
100
- })));
96
+ "styles": styles
97
+ }), /*#__PURE__*/React.createElement(Input.Addon, null, /*#__PURE__*/React.createElement(IconSearch, _ref2.cn("IconSearch", {}))), /*#__PURE__*/React.createElement(Value, _ref2.cn("Value", _objectSpread({}, _assignProps({
98
+ "autoFocus": true
99
+ }, _ref)))), /*#__PURE__*/React.createElement(SClose, _ref2.cn("SClose", {
100
+ "role": "button",
101
+ "hide": hideClose,
102
+ "aria-hidden": hideClose,
103
+ "interactive": true,
104
+ "onClick": this.handleClear
105
+ }), /*#__PURE__*/React.createElement(IconClose, _ref2.cn("IconClose", {}))));
101
106
  }
102
107
  }]);
103
108
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/InputSearch.jsx"],"names":["React","createComponent","Component","sstyled","Box","Input","SearchM","CloseM","selectContext","MAP_SIZE_TO_ICON","m","l","InputSearch","e","handlers","value","SInputSearch","asProps","size","forwardRef","styles","finalSize","context","handleClear","style","defaultValue"],"mappings":";;;;;;;;;;;;;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,eAAP,IAA0BC,SAA1B,EAAqCC,OAArC,QAAoD,eAApD;AACA,SAASC,GAAT,QAAoB,mBAApB;AACA,OAAOC,KAAP,MAAkB,gBAAlB;AACA,OAAOC,OAAP,MAAoB,wBAApB;AACA,OAAOC,MAAP,MAAmB,uBAAnB;AACA,SAASC,aAAT,QAA8B,WAA9B;;;;;;;;;;;;;;;;;AAIA,IAAMC,gBAAgB,GAAG;AACvBC,EAAAA,CAAC,EAAE,CAACJ,OAAD,EAAUC,MAAV,CADoB;AAEvBI,EAAAA,CAAC,EAAE,CAACL,OAAD,EAAUC,MAAV;AAFoB,CAAzB;;IAKMK,W;;;;;;;;;;;;;;;;kEAiBU,UAACC,CAAD,EAAO;AACnB,YAAKC,QAAL,CAAcC,KAAd,CAAoB,EAApB,EAAwBF,CAAxB;AACD,K;;;;;;;WARD,6BAAoB;AAClB,aAAO;AACLE,QAAAA,KAAK,EAAE;AADF,OAAP;AAGD;;;WAMD,kBAAS;AAAA;;AACP,UAAMC,YAAY,GAAGZ,GAArB;AACA,0BAA4C,KAAKa,OAAjD;AAAA,UAAQC,IAAR,iBAAQA,IAAR;AAAA,UAAcH,KAAd,iBAAcA,KAAd;AAAA,UAAqBI,UAArB,iBAAqBA,UAArB;AAAA,UAAiCC,MAAjC,iBAAiCA,MAAjC;AACA,UAAMC,SAAS,GAAGH,IAAI,IAAI,KAAKI,OAAL,CAAaJ,IAAvC;AAEA,oBAAOf,OAAO,CAACiB,MAAD,CAAd,eACE,oBAAC,YAAD;AAAA,gBAAoBC,SAApB;AAAA,sBAA2CN;AAA3C,uBACE,oBAAC,KAAD;AAAA,gBAAaM;AAAb,uBACE,oBAAC,KAAD,CAAO,KAAP;AAAa,QAAA,GAAG,EAAEZ,gBAAgB,CAACY,SAAD,CAAhB,CAA4B,CAA5B;AAAlB,QADF,eAEE,oBAAC,KAAD,CAAO,KAAP;AAAa,QAAA,GAAG,EAAEF,UAAlB;AAA8B,QAAA,SAAS;AAAvC,SAA4C,KAAKF,OAAjD,EAFF,eAGE,oBAAC,KAAD,CAAO,KAAP;AACE,QAAA,GAAG,EAAER,gBAAgB,CAACY,SAAD,CAAhB,CAA4B,CAA5B,CADP;AAEE,QAAA,IAAI,EAAC,QAFP;AAGE,QAAA,WAAW,MAHb;AAIE,QAAA,OAAO,EAAE,KAAKE;AAJhB,QAHF,CADF,CADF;AAcD;;;;EAxCuBrB,S;;gBAApBU,W,iBACiB,a;;gBADjBA,W,WAGWY,K;;gBAHXZ,W,kBAKkB;AACpBa,EAAAA,YAAY,EAAE;AADM,C;;gBALlBb,W,iBASiBJ,a;;AAkCvB,eAAeP,eAAe,CAACW,WAAD,CAA9B","sourcesContent":["import React from 'react';\nimport createComponent, { Component, sstyled } from '@semcore/core';\nimport { Box } from '@semcore/flex-box';\nimport Input from '@semcore/input';\nimport SearchM from '@semcore/icon/Search/m';\nimport CloseM from '@semcore/icon/Close/m';\nimport { selectContext } from './context';\n\nimport style from './style/input-search.shadow.css';\n\nconst MAP_SIZE_TO_ICON = {\n m: [SearchM, CloseM],\n l: [SearchM, CloseM],\n};\n\nclass InputSearch extends Component {\n static displayName = 'InputSearch';\n\n static style = style;\n\n static defaultProps = {\n defaultValue: '',\n };\n\n static contextType = selectContext;\n\n uncontrolledProps() {\n return {\n value: null,\n };\n }\n\n handleClear = (e) => {\n this.handlers.value('', e);\n };\n\n render() {\n const SInputSearch = Box;\n const { size, value, forwardRef, styles } = this.asProps;\n const finalSize = size || this.context.size;\n\n return sstyled(styles)(\n <SInputSearch size={finalSize} use:filled={value}>\n <Input size={finalSize}>\n <Input.Addon tag={MAP_SIZE_TO_ICON[finalSize][0]} />\n <Input.Value ref={forwardRef} autoFocus {...this.asProps} />\n <Input.Addon\n tag={MAP_SIZE_TO_ICON[finalSize][1]}\n role=\"button\"\n interactive\n onClick={this.handleClear}\n />\n </Input>\n </SInputSearch>,\n );\n }\n}\n\nexport default createComponent(InputSearch);\n"],"file":"InputSearch.js"}
1
+ {"version":3,"sources":["../../src/InputSearch.jsx"],"names":["React","createComponent","Component","sstyled","Root","SearchM","CloseM","Input","selectContext","MAP_SIZE_TO_ICON","m","l","InputSearch","e","handlers","value","Value","SInputSearch","SClose","Addon","asProps","size","styles","finalSize","context","hideClose","IconClose","IconSearch","handleClear","style","defaultValue"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,eAAP,IAA0BC,SAA1B,EAAqCC,OAArC,EAA8CC,IAA9C,QAA0D,eAA1D;AACA,OAAOC,OAAP,MAAoB,wBAApB;AACA,OAAOC,MAAP,MAAmB,uBAAnB;AACA,OAAOC,KAAP,MAAkB,gBAAlB;AACA,SAASC,aAAT,QAA8B,WAA9B;;;;;;;;;;;;;;;;;;AAIA,IAAMC,gBAAgB,GAAG;AACvBC,EAAAA,CAAC,EAAE,CAACL,OAAD,EAAUC,MAAV,CADoB;AAEvBK,EAAAA,CAAC,EAAE,CAACN,OAAD,EAAUC,MAAV;AAFoB,CAAzB;;IAKMM,W;;;;;;;;;;;;;;;;kEAiBU,UAACC,CAAD,EAAO;AACnB,YAAKC,QAAL,CAAcC,KAAd,CAAoB,EAApB,EAAwBF,CAAxB;AACD,K;;;;;;;WARD,6BAAoB;AAClB,aAAO;AACLE,QAAAA,KAAK,EAAE;AADF,OAAP;AAGD;;;WAMD,kBAAS;AAAA;AAAA;;AACP,UAAMC,KAAK,GAcQT,KAAK,CAACS,KAdzB;AACA,UAAMC,YAAY,GAAGV,KAArB;AACA,UAAMW,MAAM,GAAGX,KAAK,CAACY,KAArB;AACA,0BAAgC,KAAKC,OAArC;AAAA,UAAQC,IAAR,iBAAQA,IAAR;AAAA,UAAcN,KAAd,iBAAcA,KAAd;AAAA,UAAqBO,MAArB,iBAAqBA,MAArB;AACA,UAAMC,SAAS,GAAGF,IAAI,IAAI,KAAKG,OAAL,CAAaH,IAAvC;AACA,UAAMI,SAAS,GAAG,CAACV,KAAnB;AACA,UAAMW,SAAS,GAAGjB,gBAAgB,CAACc,SAAD,CAAhB,CAA4B,CAA5B,CAAlB;AACA,UAAMI,UAAU,GAAGlB,gBAAgB,CAACc,SAAD,CAAhB,CAA4B,CAA5B,CAAnB;AAEA,qBAAOpB,OAAO,CAACmB,MAAD,CAAd,eACE,oBAAC,YAAD;AAAA,gBAAoBC,SAApB;AAAA,kBAAuCD;AAAvC,uBACE,oBAAC,KAAD,CAAO,KAAP,qBACE,oBAAC,UAAD,6BADF,CADF,eAIE,oBAAC,KAAD;AAAA;AAAA,iBAJF,eAKE,oBAAC,MAAD;AAAA,gBACO,QADP;AAAA,gBAGQG,SAHR;AAAA,uBAIeA,SAJf;AAAA;AAAA,mBAMW,KAAKG;AANhB,uBAQE,oBAAC,SAAD,4BARF,CALF,CADF;AAkBD;;;;EAjDuB1B,S;;gBAApBU,W,iBACiB,a;;gBADjBA,W,WAGWiB,K;;gBAHXjB,W,kBAKkB;AACpBkB,EAAAA,YAAY,EAAE;AADM,C;;gBALlBlB,W,iBASiBJ,a;;AA2CvB,eAAeP,eAAe,CAACW,WAAD,CAA9B","sourcesContent":["import React from 'react';\nimport createComponent, { Component, sstyled, Root } from '@semcore/core';\nimport SearchM from '@semcore/icon/Search/m';\nimport CloseM from '@semcore/icon/Close/m';\nimport Input from '@semcore/input';\nimport { selectContext } from './context';\n\nimport style from './style/input-search.shadow.css';\n\nconst MAP_SIZE_TO_ICON = {\n m: [SearchM, CloseM],\n l: [SearchM, CloseM],\n};\n\nclass InputSearch extends Component {\n static displayName = 'InputSearch';\n\n static style = style;\n\n static defaultProps = {\n defaultValue: '',\n };\n\n static contextType = selectContext;\n\n uncontrolledProps() {\n return {\n value: null,\n };\n }\n\n handleClear = (e) => {\n this.handlers.value('', e);\n };\n\n render() {\n const Value = Root;\n const SInputSearch = Input;\n const SClose = Input.Addon;\n const { size, value, styles } = this.asProps;\n const finalSize = size || this.context.size;\n const hideClose = !value;\n const IconClose = MAP_SIZE_TO_ICON[finalSize][1];\n const IconSearch = MAP_SIZE_TO_ICON[finalSize][0];\n\n return sstyled(styles)(\n <SInputSearch size={finalSize} styles={styles}>\n <Input.Addon>\n <IconSearch />\n </Input.Addon>\n <Value render={Input.Value} autoFocus />\n <SClose\n role=\"button\"\n /* hide through css because the width of the input changes */\n hide={hideClose}\n aria-hidden={hideClose}\n interactive\n onClick={this.handleClear}\n >\n <IconClose />\n </SClose>\n </SInputSearch>,\n );\n }\n}\n\nexport default createComponent(InputSearch);\n"],"file":"InputSearch.js"}
package/lib/es6/Select.js CHANGED
@@ -242,11 +242,10 @@ var RootSelect = /*#__PURE__*/function (_Component) {
242
242
  }, {
243
243
  key: "componentDidUpdate",
244
244
  value: function componentDidUpdate(prevProps, prevState) {
245
- var visible = this.asProps.visible; // TODO: вынести в хелпер
246
- // Если открыли
245
+ var visible = this.asProps.visible;
247
246
 
248
247
  if (visible) {
249
- this.isScrolledToFirstOption = false; // Если uncontroll
248
+ this.isScrolledToFirstOption = false;
250
249
 
251
250
  if (prevProps.visible === undefined) {
252
251
  if (prevState.visible !== visible) this.scrollToSelectedOption();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Select.jsx"],"names":["React","cn","createComponent","Component","Root","sstyled","DropdownMenu","ButtonTrigger","Divider","findComponent","logger","resolveColor","addonTextChildren","InputSearch","useBox","selectContext","isSelectedOption","value","valueOption","Array","isArray","includes","isEmptyValue","length","getEmptyValue","multiselect","RootSelect","createRef","optionValue","e","newValue","asProps","filter","v","concat","handlers","visible","emptyValue","size","disabled","state","placeholder","options","forwardRef","name","empty","$hiddenRef","active","onClear","handlerClear","children","renderChildrenTrigger","props","selected","other","_optionSelected","isScrolledToFirstOption","ref","firstSelectedOptionRef","onClick","bindHandlerOptionClick","hasOption","undefined","optionProps","getOptionProps","my","reduce","acc","selectedOption","find","o","push","label","setTimeout","current","scrollIntoView","block","inline","scrollToSelectedOption","prevProps","prevState","Children","advanceMode","Select","Trigger","displayName","Popper","warn","map","option","i","style","defaultValue","defaultVisible","tag","Tag","Text","Addon","Checkbox","SOptionCheckbox","componentProps","theme","styles","checked","className","InputSearchWrapper","List","Menu","Option","Item","OptionTitle","ItemTitle","OptionHint","ItemHint","Input","parent","context"],"mappings":"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","sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport createComponent, { Component, Root, sstyled } from '@semcore/core';\nimport DropdownMenu from '@semcore/dropdown-menu';\nimport { ButtonTrigger } from '@semcore/base-trigger';\nimport Divider from '@semcore/divider';\nimport findComponent from '@semcore/utils/lib/findComponent';\nimport logger from '@semcore/utils/lib/logger';\nimport resolveColor from '@semcore/utils/lib/color';\nimport addonTextChildren from '@semcore/utils/lib/addonTextChildren';\nimport InputSearch from './InputSearch';\nimport { useBox } from '@semcore/flex-box';\nimport { selectContext } from './context';\n\nimport style from './style/select.shadow.css';\n\nfunction isSelectedOption(value, valueOption) {\n return Array.isArray(value) ? value.includes(valueOption) : valueOption === value;\n}\n\nfunction isEmptyValue(value) {\n return Array.isArray(value) ? value.length === 0 : value === null;\n}\n\nfunction getEmptyValue(multiselect) {\n return multiselect ? [] : null;\n}\n\nclass RootSelect extends Component {\n static displayName = 'Select';\n\n static style = style;\n\n static defaultProps = (props) => ({\n placeholder: props.multiselect ? 'Select options' : 'Select option',\n size: 'm',\n defaultValue: getEmptyValue(props.multiselect),\n defaultVisible: false,\n });\n\n firstSelectedOptionRef = React.createRef();\n\n isScrolledToFirstOption = false;\n\n uncontrolledProps() {\n return {\n visible: null,\n value: null,\n };\n }\n\n getTriggerProps() {\n const {\n size,\n disabled,\n visible,\n state,\n placeholder,\n value,\n options,\n forwardRef,\n name,\n multiselect,\n } = this.asProps;\n\n return {\n empty: isEmptyValue(value),\n size,\n value,\n name,\n $hiddenRef: forwardRef,\n multiselect,\n state,\n placeholder,\n disabled,\n active: visible,\n onClear: this.handlerClear,\n children: this.renderChildrenTrigger(value, options),\n };\n }\n\n getOptionProps(props) {\n const { value } = this.asProps;\n const selected = isSelectedOption(value, props.value);\n const other = {};\n this._optionSelected = selected;\n\n if (selected && !this.isScrolledToFirstOption) {\n other.ref = this.firstSelectedOptionRef;\n this.isScrolledToFirstOption = true;\n }\n\n return {\n selected,\n onClick: this.bindHandlerOptionClick(props.value),\n ...other,\n };\n }\n\n getOptionCheckboxProps(props) {\n const { size } = this.asProps;\n const hasOption = props.value === undefined;\n const optionProps = hasOption ? {} : this.getOptionProps(props);\n const selected = this._optionSelected;\n this._optionSelected = null;\n return {\n ...optionProps,\n size,\n selected,\n };\n }\n\n getDividerProps() {\n return { my: 1 };\n }\n\n renderChildrenTrigger(value, options) {\n if (options) {\n return [].concat(value).reduce((acc, value) => {\n const selectedOption = options.find((o) => isSelectedOption(value, o.value));\n if (!selectedOption) return acc;\n if (acc.length) acc.push(', ');\n acc.push(selectedOption.label || selectedOption.value);\n return acc;\n }, []);\n }\n return Array.isArray(value)\n ? value.reduce((acc, value) => {\n if (acc.length) acc.push(', ');\n acc.push(value);\n return acc;\n }, [])\n : value;\n }\n\n bindHandlerOptionClick = (optionValue) => (e) => {\n let newValue = optionValue;\n const { value, multiselect } = this.asProps;\n if (Array.isArray(value)) {\n if (value.includes(optionValue)) {\n newValue = value.filter((v) => v !== optionValue);\n } else {\n newValue = value.concat(optionValue);\n }\n }\n this.handlers.value(newValue, e);\n if (!multiselect) this.handlers.visible(false);\n };\n\n handlerClear = (e) => {\n const { value } = this.asProps;\n const emptyValue = getEmptyValue(Array.isArray(value));\n this.handlers.value(emptyValue, e);\n this.handlers.visible(false);\n };\n\n scrollToSelectedOption() {\n setTimeout(() => {\n this.firstSelectedOptionRef.current?.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }, 0);\n }\n\n componentDidMount() {\n const { visible } = this.asProps;\n if (visible) {\n this.scrollToSelectedOption();\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { visible } = this.asProps;\n // TODO: вынести в хелпер\n // Если открыли\n if (visible) {\n this.isScrolledToFirstOption = false;\n\n // Если uncontroll\n if (prevProps.visible === undefined) {\n if (prevState.visible !== visible) this.scrollToSelectedOption();\n } else {\n if (prevProps.visible !== visible) this.scrollToSelectedOption();\n }\n }\n }\n\n render() {\n const { Children, options, multiselect, ...other } = this.asProps;\n const advanceMode = findComponent(Children, [\n Select.Trigger.displayName,\n Select.Popper.displayName,\n ]);\n\n logger.warn(\n options && advanceMode,\n \"Don't use at the same time 'options' property and '<Select.Trigger/>/<Select.Popper/>'\",\n other['data-ui-name'] || Select.displayName,\n );\n\n if (options) {\n return (\n <Root render={DropdownMenu}>\n <Select.Trigger {...other} />\n <Select.Menu>\n {options.map((option, i) => {\n return (\n <Select.Option key={i} {...option}>\n {multiselect && <Select.Option.Checkbox />}\n {option.children}\n </Select.Option>\n );\n })}\n </Select.Menu>\n </Root>\n );\n }\n\n return (\n <Root render={DropdownMenu}>\n <Children />\n </Root>\n );\n }\n}\n\nfunction Trigger({ Children, name, value, $hiddenRef, tag: Tag = ButtonTrigger }) {\n return (\n <Root render={DropdownMenu.Trigger} tag={Tag} placeholder=\"Select option\">\n {addonTextChildren(\n Children,\n Tag.Text || ButtonTrigger.Text,\n Tag.Addon || ButtonTrigger.Addon,\n )}\n {name && <input type=\"hidden\" defaultValue={value} name={name} ref={$hiddenRef} />}\n </Root>\n );\n}\n\nfunction Checkbox(props) {\n const [SOptionCheckbox, componentProps] = useBox(props, props.forwardRef);\n const { size, theme, selected } = props;\n const styles = sstyled(props.styles);\n\n const { className, style } = styles.cn('SOptionCheckbox', {\n size,\n 'use:theme': resolveColor(theme),\n checked: selected,\n });\n\n return (\n <SOptionCheckbox\n {...componentProps}\n className={cn(className, componentProps.className) || undefined}\n style={{ ...style, ...componentProps.style }}\n />\n );\n}\n\nconst InputSearchWrapper = function () {\n return <Root render={InputSearch} />;\n};\n\nconst Select = createComponent(\n RootSelect,\n {\n Trigger: [\n Trigger,\n {\n Addon: ButtonTrigger.Addon,\n Text: ButtonTrigger.Text,\n },\n ],\n Popper: DropdownMenu.Popper,\n List: DropdownMenu.List,\n Menu: DropdownMenu.Menu,\n Option: [\n DropdownMenu.Item,\n {\n Addon: DropdownMenu.Item.Addon,\n Checkbox,\n },\n ],\n OptionTitle: DropdownMenu.ItemTitle,\n OptionHint: DropdownMenu.ItemHint,\n Divider,\n InputSearch: InputSearchWrapper,\n Input: InputSearchWrapper,\n },\n { parent: DropdownMenu, context: selectContext },\n);\n\nexport default Select;\n"],"file":"Select.js"}
1
+ {"version":3,"sources":["../../src/Select.jsx"],"names":["React","cn","createComponent","Component","Root","sstyled","DropdownMenu","ButtonTrigger","Divider","findComponent","logger","resolveColor","addonTextChildren","InputSearch","useBox","selectContext","isSelectedOption","value","valueOption","Array","isArray","includes","isEmptyValue","length","getEmptyValue","multiselect","RootSelect","createRef","optionValue","e","newValue","asProps","filter","v","concat","handlers","visible","emptyValue","size","disabled","state","placeholder","options","forwardRef","name","empty","$hiddenRef","active","onClear","handlerClear","children","renderChildrenTrigger","props","selected","other","_optionSelected","isScrolledToFirstOption","ref","firstSelectedOptionRef","onClick","bindHandlerOptionClick","hasOption","undefined","optionProps","getOptionProps","my","reduce","acc","selectedOption","find","o","push","label","setTimeout","current","scrollIntoView","block","inline","scrollToSelectedOption","prevProps","prevState","Children","advanceMode","Select","Trigger","displayName","Popper","warn","map","option","i","style","defaultValue","defaultVisible","tag","Tag","Text","Addon","Checkbox","SOptionCheckbox","componentProps","theme","styles","checked","className","InputSearchWrapper","List","Menu","Option","Item","OptionTitle","ItemTitle","OptionHint","ItemHint","Input","parent","context"],"mappings":"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","sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport createComponent, { Component, Root, sstyled } from '@semcore/core';\nimport DropdownMenu from '@semcore/dropdown-menu';\nimport { ButtonTrigger } from '@semcore/base-trigger';\nimport Divider from '@semcore/divider';\nimport findComponent from '@semcore/utils/lib/findComponent';\nimport logger from '@semcore/utils/lib/logger';\nimport resolveColor from '@semcore/utils/lib/color';\nimport addonTextChildren from '@semcore/utils/lib/addonTextChildren';\nimport InputSearch from './InputSearch';\nimport { useBox } from '@semcore/flex-box';\nimport { selectContext } from './context';\n\nimport style from './style/select.shadow.css';\n\nfunction isSelectedOption(value, valueOption) {\n return Array.isArray(value) ? value.includes(valueOption) : valueOption === value;\n}\n\nfunction isEmptyValue(value) {\n return Array.isArray(value) ? value.length === 0 : value === null;\n}\n\nfunction getEmptyValue(multiselect) {\n return multiselect ? [] : null;\n}\n\nclass RootSelect extends Component {\n static displayName = 'Select';\n\n static style = style;\n\n static defaultProps = (props) => ({\n placeholder: props.multiselect ? 'Select options' : 'Select option',\n size: 'm',\n defaultValue: getEmptyValue(props.multiselect),\n defaultVisible: false,\n });\n\n firstSelectedOptionRef = React.createRef();\n\n isScrolledToFirstOption = false;\n\n uncontrolledProps() {\n return {\n visible: null,\n value: null,\n };\n }\n\n getTriggerProps() {\n const {\n size,\n disabled,\n visible,\n state,\n placeholder,\n value,\n options,\n forwardRef,\n name,\n multiselect,\n } = this.asProps;\n\n return {\n empty: isEmptyValue(value),\n size,\n value,\n name,\n $hiddenRef: forwardRef,\n multiselect,\n state,\n placeholder,\n disabled,\n active: visible,\n onClear: this.handlerClear,\n children: this.renderChildrenTrigger(value, options),\n };\n }\n\n getOptionProps(props) {\n const { value } = this.asProps;\n const selected = isSelectedOption(value, props.value);\n const other = {};\n this._optionSelected = selected;\n\n if (selected && !this.isScrolledToFirstOption) {\n other.ref = this.firstSelectedOptionRef;\n this.isScrolledToFirstOption = true;\n }\n\n return {\n selected,\n onClick: this.bindHandlerOptionClick(props.value),\n ...other,\n };\n }\n\n getOptionCheckboxProps(props) {\n const { size } = this.asProps;\n const hasOption = props.value === undefined;\n const optionProps = hasOption ? {} : this.getOptionProps(props);\n const selected = this._optionSelected;\n this._optionSelected = null;\n return {\n ...optionProps,\n size,\n selected,\n };\n }\n\n getDividerProps() {\n return { my: 1 };\n }\n\n renderChildrenTrigger(value, options) {\n if (options) {\n return [].concat(value).reduce((acc, value) => {\n const selectedOption = options.find((o) => isSelectedOption(value, o.value));\n if (!selectedOption) return acc;\n if (acc.length) acc.push(', ');\n acc.push(selectedOption.label || selectedOption.value);\n return acc;\n }, []);\n }\n return Array.isArray(value)\n ? value.reduce((acc, value) => {\n if (acc.length) acc.push(', ');\n acc.push(value);\n return acc;\n }, [])\n : value;\n }\n\n bindHandlerOptionClick = (optionValue) => (e) => {\n let newValue = optionValue;\n const { value, multiselect } = this.asProps;\n if (Array.isArray(value)) {\n if (value.includes(optionValue)) {\n newValue = value.filter((v) => v !== optionValue);\n } else {\n newValue = value.concat(optionValue);\n }\n }\n this.handlers.value(newValue, e);\n if (!multiselect) this.handlers.visible(false);\n };\n\n handlerClear = (e) => {\n const { value } = this.asProps;\n const emptyValue = getEmptyValue(Array.isArray(value));\n this.handlers.value(emptyValue, e);\n this.handlers.visible(false);\n };\n\n scrollToSelectedOption() {\n setTimeout(() => {\n this.firstSelectedOptionRef.current?.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }, 0);\n }\n\n componentDidMount() {\n const { visible } = this.asProps;\n if (visible) {\n this.scrollToSelectedOption();\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { visible } = this.asProps;\n if (visible) {\n this.isScrolledToFirstOption = false;\n\n if (prevProps.visible === undefined) {\n if (prevState.visible !== visible) this.scrollToSelectedOption();\n } else {\n if (prevProps.visible !== visible) this.scrollToSelectedOption();\n }\n }\n }\n\n render() {\n const { Children, options, multiselect, ...other } = this.asProps;\n const advanceMode = findComponent(Children, [\n Select.Trigger.displayName,\n Select.Popper.displayName,\n ]);\n\n logger.warn(\n options && advanceMode,\n \"Don't use at the same time 'options' property and '<Select.Trigger/>/<Select.Popper/>'\",\n other['data-ui-name'] || Select.displayName,\n );\n\n if (options) {\n return (\n <Root render={DropdownMenu}>\n <Select.Trigger {...other} />\n <Select.Menu>\n {options.map((option, i) => {\n return (\n <Select.Option key={i} {...option}>\n {multiselect && <Select.Option.Checkbox />}\n {option.children}\n </Select.Option>\n );\n })}\n </Select.Menu>\n </Root>\n );\n }\n\n return (\n <Root render={DropdownMenu}>\n <Children />\n </Root>\n );\n }\n}\n\nfunction Trigger({ Children, name, value, $hiddenRef, tag: Tag = ButtonTrigger }) {\n return (\n <Root render={DropdownMenu.Trigger} tag={Tag} placeholder=\"Select option\">\n {addonTextChildren(\n Children,\n Tag.Text || ButtonTrigger.Text,\n Tag.Addon || ButtonTrigger.Addon,\n )}\n {name && <input type=\"hidden\" defaultValue={value} name={name} ref={$hiddenRef} />}\n </Root>\n );\n}\n\nfunction Checkbox(props) {\n const [SOptionCheckbox, componentProps] = useBox(props, props.forwardRef);\n const { size, theme, selected } = props;\n const styles = sstyled(props.styles);\n\n const { className, style } = styles.cn('SOptionCheckbox', {\n size,\n 'use:theme': resolveColor(theme),\n checked: selected,\n });\n\n return (\n <SOptionCheckbox\n {...componentProps}\n className={cn(className, componentProps.className) || undefined}\n style={{ ...style, ...componentProps.style }}\n />\n );\n}\n\nconst InputSearchWrapper = function () {\n return <Root render={InputSearch} />;\n};\n\nconst Select = createComponent(\n RootSelect,\n {\n Trigger: [\n Trigger,\n {\n Addon: ButtonTrigger.Addon,\n Text: ButtonTrigger.Text,\n },\n ],\n Popper: DropdownMenu.Popper,\n List: DropdownMenu.List,\n Menu: DropdownMenu.Menu,\n Option: [\n DropdownMenu.Item,\n {\n Addon: DropdownMenu.Item.Addon,\n Checkbox,\n },\n ],\n OptionTitle: DropdownMenu.ItemTitle,\n OptionHint: DropdownMenu.ItemHint,\n Divider,\n InputSearch: InputSearchWrapper,\n Input: InputSearchWrapper,\n },\n { parent: DropdownMenu, context: selectContext },\n);\n\nexport default Select;\n"],"file":"Select.js"}
@@ -1,24 +1,17 @@
1
1
  @import '@semcore/utils/style/var.css';
2
2
 
3
- SInputSearch[size] {
4
- padding: 0;
5
- }
6
-
7
- SInputSearch > [data-ui-name='Input']:first-child > [data-ui-name='InputSearch'] ~ div {
8
- top: -1px;
9
- left: -1px;
10
- width: 100%;
11
- border-radius: var(--rounded-m) var(--rounded-m) 0 0;
12
- }
13
-
14
- SInputSearch[size='m'] > [data-ui-name='Input']:first-child {
3
+ SInputSearch[size='m'] {
15
4
  height: 32px;
16
5
  }
17
6
 
18
- SInputSearch [data-ui-name='Input.Addon']:last-of-type {
7
+ SClose[hide] {
19
8
  visibility: hidden;
20
9
  }
21
10
 
22
- SInputSearch[filled] [data-ui-name='Input.Addon']:last-of-type {
23
- visibility: visible;
11
+ /* Style for Input */
12
+ SOutline {
13
+ top: -1px;
14
+ left: -1px;
15
+ width: 100%;
16
+ border-radius: var(--rounded-m) var(--rounded-m) 0 0;
24
17
  }
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@semcore/select",
3
3
  "description": "SEMRush Select Component",
4
- "version": "3.0.8",
4
+ "version": "3.0.11",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/es6/index.js",
7
7
  "typings": "lib/types/index.d.ts",
8
- "author": "Roman Lysov <r.lysov@semrush.com>",
8
+ "author": "UI-kit team <ui-kit-team@semrush.com>",
9
9
  "license": "MIT",
10
10
  "scripts": {
11
11
  "build": "build --source=js",
@@ -1,9 +1,8 @@
1
1
  import React from 'react';
2
- import createComponent, { Component, sstyled } from '@semcore/core';
3
- import { Box } from '@semcore/flex-box';
4
- import Input from '@semcore/input';
2
+ import createComponent, { Component, sstyled, Root } from '@semcore/core';
5
3
  import SearchM from '@semcore/icon/Search/m';
6
4
  import CloseM from '@semcore/icon/Close/m';
5
+ import Input from '@semcore/input';
7
6
  import { selectContext } from './context';
8
7
 
9
8
  import style from './style/input-search.shadow.css';
@@ -35,22 +34,31 @@ class InputSearch extends Component {
35
34
  };
36
35
 
37
36
  render() {
38
- const SInputSearch = Box;
39
- const { size, value, forwardRef, styles } = this.asProps;
37
+ const Value = Root;
38
+ const SInputSearch = Input;
39
+ const SClose = Input.Addon;
40
+ const { size, value, styles } = this.asProps;
40
41
  const finalSize = size || this.context.size;
42
+ const hideClose = !value;
43
+ const IconClose = MAP_SIZE_TO_ICON[finalSize][1];
44
+ const IconSearch = MAP_SIZE_TO_ICON[finalSize][0];
41
45
 
42
46
  return sstyled(styles)(
43
- <SInputSearch size={finalSize} use:filled={value}>
44
- <Input size={finalSize}>
45
- <Input.Addon tag={MAP_SIZE_TO_ICON[finalSize][0]} />
46
- <Input.Value ref={forwardRef} autoFocus {...this.asProps} />
47
- <Input.Addon
48
- tag={MAP_SIZE_TO_ICON[finalSize][1]}
49
- role="button"
50
- interactive
51
- onClick={this.handleClear}
52
- />
53
- </Input>
47
+ <SInputSearch size={finalSize} styles={styles}>
48
+ <Input.Addon>
49
+ <IconSearch />
50
+ </Input.Addon>
51
+ <Value render={Input.Value} autoFocus />
52
+ <SClose
53
+ role="button"
54
+ /* hide through css because the width of the input changes */
55
+ hide={hideClose}
56
+ aria-hidden={hideClose}
57
+ interactive
58
+ onClick={this.handleClear}
59
+ >
60
+ <IconClose />
61
+ </SClose>
54
62
  </SInputSearch>,
55
63
  );
56
64
  }
package/src/Select.jsx CHANGED
@@ -172,12 +172,9 @@ class RootSelect extends Component {
172
172
 
173
173
  componentDidUpdate(prevProps, prevState) {
174
174
  const { visible } = this.asProps;
175
- // TODO: вынести в хелпер
176
- // Если открыли
177
175
  if (visible) {
178
176
  this.isScrolledToFirstOption = false;
179
177
 
180
- // Если uncontroll
181
178
  if (prevProps.visible === undefined) {
182
179
  if (prevState.visible !== visible) this.scrollToSelectedOption();
183
180
  } else {
@@ -1,24 +1,17 @@
1
1
  @import '@semcore/utils/style/var.css';
2
2
 
3
- SInputSearch[size] {
4
- padding: 0;
5
- }
6
-
7
- SInputSearch > [data-ui-name='Input']:first-child > [data-ui-name='InputSearch'] ~ div {
8
- top: -1px;
9
- left: -1px;
10
- width: 100%;
11
- border-radius: var(--rounded-m) var(--rounded-m) 0 0;
12
- }
13
-
14
- SInputSearch[size='m'] > [data-ui-name='Input']:first-child {
3
+ SInputSearch[size='m'] {
15
4
  height: 32px;
16
5
  }
17
6
 
18
- SInputSearch [data-ui-name='Input.Addon']:last-of-type {
7
+ SClose[hide] {
19
8
  visibility: hidden;
20
9
  }
21
10
 
22
- SInputSearch[filled] [data-ui-name='Input.Addon']:last-of-type {
23
- visibility: visible;
11
+ /* Style for Input */
12
+ SOutline {
13
+ top: -1px;
14
+ left: -1px;
15
+ width: 100%;
16
+ border-radius: var(--rounded-m) var(--rounded-m) 0 0;
24
17
  }