@semcore/select 3.0.7 → 3.0.8
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 +6 -0
- package/lib/cjs/InputSearch.js +2 -2
- package/lib/cjs/InputSearch.js.map +1 -1
- package/lib/cjs/Select.js +4 -1
- package/lib/cjs/Select.js.map +1 -1
- package/lib/cjs/context.js +15 -0
- package/lib/cjs/context.js.map +1 -0
- package/lib/es6/InputSearch.js +3 -3
- package/lib/es6/InputSearch.js.map +1 -1
- package/lib/es6/Select.js +3 -1
- package/lib/es6/Select.js.map +1 -1
- package/lib/es6/context.js +3 -0
- package/lib/es6/context.js.map +1 -0
- package/package.json +1 -1
- package/src/InputSearch.jsx +3 -3
- package/src/Select.jsx +2 -1
- package/src/context.js +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
|
5
|
+
## [3.0.8] - 2022-06-02
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Version patch update due to children dependencies update (`@semcore/utils` [3.32.2 ~> 3.33.0], `@semcore/base-trigger` [3.0.5 ~> 3.0.6], `@semcore/icon` [2.26.1 ~> 2.27.0], `@semcore/dropdown-menu` [3.0.3 ~> 3.0.4], `@semcore/input` [3.0.4 ~> 3.0.5], `@semcore/checkbox` [6.0.4 ~> 6.0.5], `@semcore/flex-box` [4.5.4 ~> 4.5.5], `@semcore/divider` [3.0.2 ~> 3.0.3]).
|
|
10
|
+
|
|
5
11
|
## [3.0.7] - 2022-05-31
|
|
6
12
|
|
|
7
13
|
### Changed
|
package/lib/cjs/InputSearch.js
CHANGED
|
@@ -37,7 +37,7 @@ var _m = _interopRequireDefault(require("@semcore/icon/Search/m"));
|
|
|
37
37
|
|
|
38
38
|
var _m2 = _interopRequireDefault(require("@semcore/icon/Close/m"));
|
|
39
39
|
|
|
40
|
-
var
|
|
40
|
+
var _context = require("./context");
|
|
41
41
|
|
|
42
42
|
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
43
|
|
|
@@ -133,7 +133,7 @@ var InputSearch = /*#__PURE__*/function (_Component) {
|
|
|
133
133
|
(0, _defineProperty2["default"])(InputSearch, "defaultProps", {
|
|
134
134
|
defaultValue: ''
|
|
135
135
|
});
|
|
136
|
-
(0, _defineProperty2["default"])(InputSearch, "contextType",
|
|
136
|
+
(0, _defineProperty2["default"])(InputSearch, "contextType", _context.selectContext);
|
|
137
137
|
|
|
138
138
|
var _default = (0, _core["default"])(InputSearch);
|
|
139
139
|
|
|
@@ -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","
|
|
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"}
|
package/lib/cjs/Select.js
CHANGED
|
@@ -53,6 +53,8 @@ var _InputSearch = _interopRequireDefault(require("./InputSearch"));
|
|
|
53
53
|
|
|
54
54
|
var _flexBox = require("@semcore/flex-box");
|
|
55
55
|
|
|
56
|
+
var _context = require("./context");
|
|
57
|
+
|
|
56
58
|
var _excluded = ["Children", "options", "multiselect"];
|
|
57
59
|
|
|
58
60
|
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); }
|
|
@@ -386,7 +388,8 @@ var Select = (0, _core["default"])(RootSelect, {
|
|
|
386
388
|
InputSearch: InputSearchWrapper,
|
|
387
389
|
Input: InputSearchWrapper
|
|
388
390
|
}, {
|
|
389
|
-
parent: _dropdownMenu["default"]
|
|
391
|
+
parent: _dropdownMenu["default"],
|
|
392
|
+
context: _context.selectContext
|
|
390
393
|
});
|
|
391
394
|
var _default = Select;
|
|
392
395
|
exports["default"] = _default;
|
package/lib/cjs/Select.js.map
CHANGED
|
@@ -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"],"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';\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 },\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;;AAFA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,gBAAT,CAA0BC,KAA1B,EAAiCC,WAAjC,EAA8C;AAC5C,SAAOC,KAAK,CAACC,OAAN,CAAcH,KAAd,IAAuBA,KAAK,CAACI,QAAN,CAAeH,WAAf,CAAvB,GAAqDA,WAAW,KAAKD,KAA5E;AACD;;AAED,SAASK,YAAT,CAAsBL,KAAtB,EAA6B;AAC3B,SAAOE,KAAK,CAACC,OAAN,CAAcH,KAAd,IAAuBA,KAAK,CAACM,MAAN,KAAiB,CAAxC,GAA4CN,KAAK,KAAK,IAA7D;AACD;;AAED,SAASO,aAAT,CAAuBC,WAAvB,EAAoC;AAClC,SAAOA,WAAW,GAAG,EAAH,GAAQ,IAA1B;AACD;;IAEKC,U;;;;;;;;;;;;;;;+GAYqBC,kBAAMC,SAAN,E;gHAEC,K;+GA6FD,UAACC,WAAD;AAAA,aAAiB,UAACC,CAAD,EAAO;AAC/C,YAAIC,QAAQ,GAAGF,WAAf;AACA,4BAA+B,MAAKG,OAApC;AAAA,YAAQf,KAAR,iBAAQA,KAAR;AAAA,YAAeQ,WAAf,iBAAeA,WAAf;;AACA,YAAIN,KAAK,CAACC,OAAN,CAAcH,KAAd,CAAJ,EAA0B;AACxB,cAAIA,KAAK,CAACI,QAAN,CAAeQ,WAAf,CAAJ,EAAiC;AAC/BE,YAAAA,QAAQ,GAAGd,KAAK,CAACgB,MAAN,CAAa,UAACC,CAAD;AAAA,qBAAOA,CAAC,KAAKL,WAAb;AAAA,aAAb,CAAX;AACD,WAFD,MAEO;AACLE,YAAAA,QAAQ,GAAGd,KAAK,CAACkB,MAAN,CAAaN,WAAb,CAAX;AACD;AACF;;AACD,cAAKO,QAAL,CAAcnB,KAAd,CAAoBc,QAApB,EAA8BD,CAA9B;;AACA,YAAI,CAACL,WAAL,EAAkB,MAAKW,QAAL,CAAcC,OAAd,CAAsB,KAAtB;AACnB,OAZwB;AAAA,K;qGAcV,UAACP,CAAD,EAAO;AACpB,UAAQb,KAAR,GAAkB,MAAKe,OAAvB,CAAQf,KAAR;AACA,UAAMqB,UAAU,GAAGd,aAAa,CAACL,KAAK,CAACC,OAAN,CAAcH,KAAd,CAAD,CAAhC;;AACA,YAAKmB,QAAL,CAAcnB,KAAd,CAAoBqB,UAApB,EAAgCR,CAAhC;;AACA,YAAKM,QAAL,CAAcC,OAAd,CAAsB,KAAtB;AACD,K;;;;;;WA9GD,6BAAoB;AAClB,aAAO;AACLA,QAAAA,OAAO,EAAE,IADJ;AAELpB,QAAAA,KAAK,EAAE;AAFF,OAAP;AAID;;;WAED,2BAAkB;AAChB,2BAWI,KAAKe,OAXT;AAAA,UACEO,IADF,kBACEA,IADF;AAAA,UAEEC,QAFF,kBAEEA,QAFF;AAAA,UAGEH,OAHF,kBAGEA,OAHF;AAAA,UAIEI,KAJF,kBAIEA,KAJF;AAAA,UAKEC,WALF,kBAKEA,WALF;AAAA,UAMEzB,KANF,kBAMEA,KANF;AAAA,UAOE0B,OAPF,kBAOEA,OAPF;AAAA,UAQEC,UARF,kBAQEA,UARF;AAAA,UASEC,IATF,kBASEA,IATF;AAAA,UAUEpB,WAVF,kBAUEA,WAVF;AAaA,aAAO;AACLqB,QAAAA,KAAK,EAAExB,YAAY,CAACL,KAAD,CADd;AAELsB,QAAAA,IAAI,EAAJA,IAFK;AAGLtB,QAAAA,KAAK,EAALA,KAHK;AAIL4B,QAAAA,IAAI,EAAJA,IAJK;AAKLE,QAAAA,UAAU,EAAEH,UALP;AAMLnB,QAAAA,WAAW,EAAXA,WANK;AAOLgB,QAAAA,KAAK,EAALA,KAPK;AAQLC,QAAAA,WAAW,EAAXA,WARK;AASLF,QAAAA,QAAQ,EAARA,QATK;AAULQ,QAAAA,MAAM,EAAEX,OAVH;AAWLY,QAAAA,OAAO,EAAE,KAAKC,YAXT;AAYLC,QAAAA,QAAQ,EAAE,KAAKC,qBAAL,CAA2BnC,KAA3B,EAAkC0B,OAAlC;AAZL,OAAP;AAcD;;;WAED,wBAAeU,KAAf,EAAsB;AACpB,UAAQpC,KAAR,GAAkB,KAAKe,OAAvB,CAAQf,KAAR;AACA,UAAMqC,QAAQ,GAAGtC,gBAAgB,CAACC,KAAD,EAAQoC,KAAK,CAACpC,KAAd,CAAjC;AACA,UAAMsC,KAAK,GAAG,EAAd;AACA,WAAKC,eAAL,GAAuBF,QAAvB;;AAEA,UAAIA,QAAQ,IAAI,CAAC,KAAKG,uBAAtB,EAA+C;AAC7CF,QAAAA,KAAK,CAACG,GAAN,GAAY,KAAKC,sBAAjB;AACA,aAAKF,uBAAL,GAA+B,IAA/B;AACD;;AAED;AACEH,QAAAA,QAAQ,EAARA,QADF;AAEEM,QAAAA,OAAO,EAAE,KAAKC,sBAAL,CAA4BR,KAAK,CAACpC,KAAlC;AAFX,SAGKsC,KAHL;AAKD;;;WAED,gCAAuBF,KAAvB,EAA8B;AAC5B,UAAQd,IAAR,GAAiB,KAAKP,OAAtB,CAAQO,IAAR;AACA,UAAMuB,SAAS,GAAGT,KAAK,CAACpC,KAAN,KAAgB8C,SAAlC;AACA,UAAMC,WAAW,GAAGF,SAAS,GAAG,EAAH,GAAQ,KAAKG,cAAL,CAAoBZ,KAApB,CAArC;AACA,UAAMC,QAAQ,GAAG,KAAKE,eAAtB;AACA,WAAKA,eAAL,GAAuB,IAAvB;AACA,6CACKQ,WADL;AAEEzB,QAAAA,IAAI,EAAJA,IAFF;AAGEe,QAAAA,QAAQ,EAARA;AAHF;AAKD;;;WAED,2BAAkB;AAChB,aAAO;AAAEY,QAAAA,EAAE,EAAE;AAAN,OAAP;AACD;;;WAED,+BAAsBjD,KAAtB,EAA6B0B,OAA7B,EAAsC;AACpC,UAAIA,OAAJ,EAAa;AACX,eAAO,GAAGR,MAAH,CAAUlB,KAAV,EAAiBkD,MAAjB,CAAwB,UAACC,GAAD,EAAMnD,KAAN,EAAgB;AAC7C,cAAMoD,cAAc,GAAG1B,OAAO,CAAC2B,IAAR,CAAa,UAACC,CAAD;AAAA,mBAAOvD,gBAAgB,CAACC,KAAD,EAAQsD,CAAC,CAACtD,KAAV,CAAvB;AAAA,WAAb,CAAvB;AACA,cAAI,CAACoD,cAAL,EAAqB,OAAOD,GAAP;AACrB,cAAIA,GAAG,CAAC7C,MAAR,EAAgB6C,GAAG,CAACI,IAAJ,CAAS,IAAT;AAChBJ,UAAAA,GAAG,CAACI,IAAJ,CAASH,cAAc,CAACI,KAAf,IAAwBJ,cAAc,CAACpD,KAAhD;AACA,iBAAOmD,GAAP;AACD,SANM,EAMJ,EANI,CAAP;AAOD;;AACD,aAAOjD,KAAK,CAACC,OAAN,CAAcH,KAAd,IACHA,KAAK,CAACkD,MAAN,CAAa,UAACC,GAAD,EAAMnD,KAAN,EAAgB;AAC3B,YAAImD,GAAG,CAAC7C,MAAR,EAAgB6C,GAAG,CAACI,IAAJ,CAAS,IAAT;AAChBJ,QAAAA,GAAG,CAACI,IAAJ,CAASvD,KAAT;AACA,eAAOmD,GAAP;AACD,OAJD,EAIG,EAJH,CADG,GAMHnD,KANJ;AAOD;;;WAuBD,kCAAyB;AAAA;;AACvByD,MAAAA,UAAU,CAAC,YAAM;AACf,QAAA,MAAI,CAACf,sBAAL,CAA4BgB,OAA5B,EAAqCC,cAArC,CAAoD;AAClDC,UAAAA,KAAK,EAAE,SAD2C;AAElDC,UAAAA,MAAM,EAAE;AAF0C,SAApD;AAID,OALS,EAKP,CALO,CAAV;AAMD;;;WAED,6BAAoB;AAClB,UAAQzC,OAAR,GAAoB,KAAKL,OAAzB,CAAQK,OAAR;;AACA,UAAIA,OAAJ,EAAa;AACX,aAAK0C,sBAAL;AACD;AACF;;;WAED,4BAAmBC,SAAnB,EAA8BC,SAA9B,EAAyC;AACvC,UAAQ5C,OAAR,GAAoB,KAAKL,OAAzB,CAAQK,OAAR,CADuC,CAEvC;AACA;;AACA,UAAIA,OAAJ,EAAa;AACX,aAAKoB,uBAAL,GAA+B,KAA/B,CADW,CAGX;;AACA,YAAIuB,SAAS,CAAC3C,OAAV,KAAsB0B,SAA1B,EAAqC;AACnC,cAAIkB,SAAS,CAAC5C,OAAV,KAAsBA,OAA1B,EAAmC,KAAK0C,sBAAL;AACpC,SAFD,MAEO;AACL,cAAIC,SAAS,CAAC3C,OAAV,KAAsBA,OAA1B,EAAmC,KAAK0C,sBAAL;AACpC;AACF;AACF;;;WAED,kBAAS;AAAA;AACP,2BAAqD,KAAK/C,OAA1D;AAAA,UAAQkD,QAAR,kBAAQA,QAAR;AAAA,UAAkBvC,OAAlB,kBAAkBA,OAAlB;AAAA,UAA2BlB,WAA3B,kBAA2BA,WAA3B;AAAA,UAA2C8B,KAA3C;AACA,UAAM4B,WAAW,GAAG,+BAAcD,QAAd,EAAwB,CAC1CE,MAAM,CAACC,OAAP,CAAeC,WAD2B,EAE1CF,MAAM,CAACG,MAAP,CAAcD,WAF4B,CAAxB,CAApB;;AAKAE,yBAAOC,IAAP,CACE9C,OAAO,IAAIwC,WADb,EAEE,wFAFF,EAGE5B,KAAK,CAAC,cAAD,CAAL,IAAyB6B,MAAM,CAACE,WAHlC;;AAMA,UAAI3C,OAAJ,EAAa;AAAA;AACX,4BACE,gCAAc+C,wBAAd,iDACE,gCAAC,MAAD,CAAQ,OAAR,EAAoBnC,KAApB,CADF,eAEE,gCAAC,MAAD,CAAQ,IAAR,QACGZ,OAAO,CAACgD,GAAR,CAAY,UAACC,MAAD,EAASC,CAAT,EAAe;AAC1B,8BACE,gCAAC,MAAD,CAAQ,MAAR;AAAe,YAAA,GAAG,EAAEA;AAApB,aAA2BD,MAA3B,GACGnE,WAAW,iBAAI,gCAAC,MAAD,CAAQ,MAAR,CAAe,QAAf,OADlB,EAEGmE,MAAM,CAACzC,QAFV,CADF;AAMD,SAPA,CADH,CAFF,CADF;AAeD;;AAED,0BACE,gCAAcuC,wBAAd,kDACE,gCAAC,QAAD,OADF,CADF;AAKD;;;EApMsBI,e;;iCAAnBpE,U,iBACiB,Q;iCADjBA,U,WAGWqE,K;iCAHXrE,U,kBAKkB,UAAC2B,KAAD;AAAA,SAAY;AAChCX,IAAAA,WAAW,EAAEW,KAAK,CAAC5B,WAAN,GAAoB,gBAApB,GAAuC,eADpB;AAEhCc,IAAAA,IAAI,EAAE,GAF0B;AAGhCyD,IAAAA,YAAY,EAAExE,aAAa,CAAC6B,KAAK,CAAC5B,WAAP,CAHK;AAIhCwE,IAAAA,cAAc,EAAE;AAJgB,GAAZ;AAAA,C;;AAkMxB,SAASZ,OAAT,QAAkF;AAAA;AAAA,MAA/DH,QAA+D,SAA/DA,QAA+D;AAAA,MAArDrC,IAAqD,SAArDA,IAAqD;AAAA,MAA/C5B,KAA+C,SAA/CA,KAA+C;AAAA,MAAxC8B,UAAwC,SAAxCA,UAAwC;AAAA,wBAA5BmD,GAA4B;AAAA,MAAvBC,GAAuB,0BAAjBC,0BAAiB;AAChF,sBACE,gCAAcV,yBAAaL,OAA3B;AAAA,WAAyCc,GAAzC;AAAA,mBAA0D;AAA1D,aACG,mCACCjB,QADD,EAECiB,GAAG,CAACE,IAAJ,IAAYD,2BAAcC,IAF3B,EAGCF,GAAG,CAACG,KAAJ,IAAaF,2BAAcE,KAH5B,CADH,EAMGzD,IAAI,iBAAI;AAAO,IAAA,IAAI,EAAC,QAAZ;AAAqB,IAAA,YAAY,EAAE5B,KAAnC;AAA0C,IAAA,IAAI,EAAE4B,IAAhD;AAAsD,IAAA,GAAG,EAAEE;AAA3D,IANX,CADF;AAUD;;AAED,SAASwD,QAAT,CAAkBlD,KAAlB,EAAyB;AACvB,gBAA0C,qBAAOA,KAAP,EAAcA,KAAK,CAACT,UAApB,CAA1C;AAAA;AAAA,MAAO4D,eAAP;AAAA,MAAwBC,cAAxB;;AACA,MAAQlE,IAAR,GAAkCc,KAAlC,CAAQd,IAAR;AAAA,MAAcmE,KAAd,GAAkCrD,KAAlC,CAAcqD,KAAd;AAAA,MAAqBpD,QAArB,GAAkCD,KAAlC,CAAqBC,QAArB;AACA,MAAMqD,MAAM,GAAG,mBAAQtD,KAAK,CAACsD,MAAd,CAAf;;AAEA,mBAA6BA,MAAM,CAACC,EAAP,CAAU,iBAAV,EAA6B;AACxDrE,IAAAA,IAAI,EAAJA,IADwD;AAExD,iBAAa,uBAAamE,KAAb,CAF2C;AAGxDG,IAAAA,OAAO,EAAEvD;AAH+C,GAA7B,CAA7B;AAAA,MAAQwD,SAAR,cAAQA,SAAR;AAAA,MAAmBf,KAAnB,cAAmBA,KAAnB;;AAMA,sBACE,gCAAC,eAAD,gCACMU,cADN;AAEE,IAAA,SAAS,EAAE,4BAAGK,SAAH,EAAcL,cAAc,CAACK,SAA7B,KAA2C/C,SAFxD;AAGE,IAAA,KAAK,kCAAOgC,KAAP,GAAiBU,cAAc,CAACV,KAAhC;AAHP,KADF;AAOD;;AAED,IAAMgB,kBAAkB,GAAG,SAArBA,kBAAqB,GAAY;AAAA;AACrC,sBAAO,gCAAcC,uBAAd,oCAAP;AACD,CAFD;;AAIA,IAAM5B,MAAM,GAAG,sBACb1D,UADa,EAEb;AACE2D,EAAAA,OAAO,EAAE,CACPA,OADO,EAEP;AACEiB,IAAAA,KAAK,EAAEF,2BAAcE,KADvB;AAEED,IAAAA,IAAI,EAAED,2BAAcC;AAFtB,GAFO,CADX;AAQEd,EAAAA,MAAM,EAAEG,yBAAaH,MARvB;AASE0B,EAAAA,IAAI,EAAEvB,yBAAauB,IATrB;AAUEC,EAAAA,IAAI,EAAExB,yBAAawB,IAVrB;AAWEC,EAAAA,MAAM,EAAE,CACNzB,yBAAa0B,IADP,EAEN;AACEd,IAAAA,KAAK,EAAEZ,yBAAa0B,IAAb,CAAkBd,KAD3B;AAEEC,IAAAA,QAAQ,EAARA;AAFF,GAFM,CAXV;AAkBEc,EAAAA,WAAW,EAAE3B,yBAAa4B,SAlB5B;AAmBEC,EAAAA,UAAU,EAAE7B,yBAAa8B,QAnB3B;AAoBEC,EAAAA,OAAO,EAAPA,mBApBF;AAqBET,EAAAA,WAAW,EAAED,kBArBf;AAsBEW,EAAAA,KAAK,EAAEX;AAtBT,CAFa,EA0Bb;AAAEY,EAAAA,MAAM,EAAEjC,wBAAV;AAAwBkC,EAAAA,OAAO,EAAEC;AAAjC,CA1Ba,CAAf;eA6BezC,M","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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.selectContext = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var selectContext = _react["default"].createContext({});
|
|
13
|
+
|
|
14
|
+
exports.selectContext = selectContext;
|
|
15
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/context.js"],"names":["selectContext","React","createContext"],"mappings":";;;;;;;;;AAAA;;AAEO,IAAMA,aAAa,GAAGC,kBAAMC,aAAN,CAAoB,EAApB,CAAtB","sourcesContent":["import React from 'react';\n\nexport const selectContext = React.createContext({});\n"],"file":"context.js"}
|
package/lib/es6/InputSearch.js
CHANGED
|
@@ -13,12 +13,12 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
13
13
|
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
14
|
|
|
15
15
|
import React from 'react';
|
|
16
|
-
import createComponent, { Component,
|
|
16
|
+
import createComponent, { Component, sstyled } from '@semcore/core';
|
|
17
17
|
import { Box } from '@semcore/flex-box';
|
|
18
18
|
import Input from '@semcore/input';
|
|
19
19
|
import SearchM from '@semcore/icon/Search/m';
|
|
20
20
|
import CloseM from '@semcore/icon/Close/m';
|
|
21
|
-
import
|
|
21
|
+
import { selectContext } from './context';
|
|
22
22
|
|
|
23
23
|
/*__reshadow-styles__:"./style/input-search.shadow.css"*/
|
|
24
24
|
var style = (
|
|
@@ -112,7 +112,7 @@ _defineProperty(InputSearch, "defaultProps", {
|
|
|
112
112
|
defaultValue: ''
|
|
113
113
|
});
|
|
114
114
|
|
|
115
|
-
_defineProperty(InputSearch, "contextType",
|
|
115
|
+
_defineProperty(InputSearch, "contextType", selectContext);
|
|
116
116
|
|
|
117
117
|
export default createComponent(InputSearch);
|
|
118
118
|
//# sourceMappingURL=InputSearch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/InputSearch.jsx"],"names":["React","createComponent","Component","
|
|
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"}
|
package/lib/es6/Select.js
CHANGED
|
@@ -35,6 +35,7 @@ import resolveColor from '@semcore/utils/lib/color';
|
|
|
35
35
|
import addonTextChildren from '@semcore/utils/lib/addonTextChildren';
|
|
36
36
|
import InputSearch from './InputSearch';
|
|
37
37
|
import { useBox } from '@semcore/flex-box';
|
|
38
|
+
import { selectContext } from './context';
|
|
38
39
|
|
|
39
40
|
/*__reshadow-styles__:"./style/select.shadow.css"*/
|
|
40
41
|
var style = (
|
|
@@ -364,7 +365,8 @@ var Select = createComponent(RootSelect, {
|
|
|
364
365
|
InputSearch: InputSearchWrapper,
|
|
365
366
|
Input: InputSearchWrapper
|
|
366
367
|
}, {
|
|
367
|
-
parent: DropdownMenu
|
|
368
|
+
parent: DropdownMenu,
|
|
369
|
+
context: selectContext
|
|
368
370
|
});
|
|
369
371
|
export default Select;
|
|
370
372
|
//# sourceMappingURL=Select.js.map
|
package/lib/es6/Select.js.map
CHANGED
|
@@ -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","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"],"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';\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 },\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 // 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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/context.js"],"names":["React","selectContext","createContext"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAEA,OAAO,IAAMC,aAAa,GAAGD,KAAK,CAACE,aAAN,CAAoB,EAApB,CAAtB","sourcesContent":["import React from 'react';\n\nexport const selectContext = React.createContext({});\n"],"file":"context.js"}
|
package/package.json
CHANGED
package/src/InputSearch.jsx
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import createComponent, { Component,
|
|
2
|
+
import createComponent, { Component, sstyled } from '@semcore/core';
|
|
3
3
|
import { Box } from '@semcore/flex-box';
|
|
4
4
|
import Input from '@semcore/input';
|
|
5
5
|
import SearchM from '@semcore/icon/Search/m';
|
|
6
6
|
import CloseM from '@semcore/icon/Close/m';
|
|
7
|
-
import
|
|
7
|
+
import { selectContext } from './context';
|
|
8
8
|
|
|
9
9
|
import style from './style/input-search.shadow.css';
|
|
10
10
|
|
|
@@ -22,7 +22,7 @@ class InputSearch extends Component {
|
|
|
22
22
|
defaultValue: '',
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
static contextType =
|
|
25
|
+
static contextType = selectContext;
|
|
26
26
|
|
|
27
27
|
uncontrolledProps() {
|
|
28
28
|
return {
|
package/src/Select.jsx
CHANGED
|
@@ -10,6 +10,7 @@ import resolveColor from '@semcore/utils/lib/color';
|
|
|
10
10
|
import addonTextChildren from '@semcore/utils/lib/addonTextChildren';
|
|
11
11
|
import InputSearch from './InputSearch';
|
|
12
12
|
import { useBox } from '@semcore/flex-box';
|
|
13
|
+
import { selectContext } from './context';
|
|
13
14
|
|
|
14
15
|
import style from './style/select.shadow.css';
|
|
15
16
|
|
|
@@ -287,7 +288,7 @@ const Select = createComponent(
|
|
|
287
288
|
InputSearch: InputSearchWrapper,
|
|
288
289
|
Input: InputSearchWrapper,
|
|
289
290
|
},
|
|
290
|
-
{ parent: DropdownMenu },
|
|
291
|
+
{ parent: DropdownMenu, context: selectContext },
|
|
291
292
|
);
|
|
292
293
|
|
|
293
294
|
export default Select;
|
package/src/context.js
ADDED