react-ui-basics 0.0.142 → 0.0.143

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.
@@ -4,9 +4,10 @@ import ReactCreateElement from './ReactCreateElement.js';
4
4
  import PropTypes from 'prop-types';
5
5
  import TextField from './TextField.js';
6
6
  import FilteredList, { getLabel } from './FilteredList.js';
7
- import { isString, orNoop, preventDefault, stopPropagation, getRandomId, isFunction, isObject, addEventListener, DOCUMENT, removeEventListener, UNDEFINED, classNames, ref, continuousIncludes } from './Tools.js';
7
+ import { isString, memo, continuousIncludes, orNoop, preventDefault, stopPropagation, getRandomId, isFunction, isObject, addEventListener, DOCUMENT, removeEventListener, UNDEFINED, classNames, ref } from './Tools.js';
8
8
  import Button from './Button.js';
9
9
  import MaterialIcon from './MaterialIcon.js';
10
+ import { PureComponent } from './ReactConstants.js';
10
11
 
11
12
  var MODE_DEFAULT = 'default';
12
13
  var MODE_INLINE = 'inline';
@@ -53,8 +54,8 @@ var findParent = function findParent(el, tag) {
53
54
  function isMultipleSelect(mode) {
54
55
  return mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI || mode === MODE_MULTIPLE_MINI_INLINE;
55
56
  }
56
- var AutocompleteSelect = function (_React$Component) {
57
- _inherits(AutocompleteSelect, _React$Component);
57
+ var AutocompleteSelect = function (_PureComponent) {
58
+ _inherits(AutocompleteSelect, _PureComponent);
58
59
  var _super = _createSuper(AutocompleteSelect);
59
60
  function AutocompleteSelect(props) {
60
61
  var _this;
@@ -71,6 +72,16 @@ var AutocompleteSelect = function (_React$Component) {
71
72
  filterValue: allowCustom && isString(value) && !isMultipleSelect(mode) ? value : filterValue
72
73
  });
73
74
  };
75
+ _this.createFilter = memo(function (prefilter, filterValue, filterValueTrimmed, filter) {
76
+ return function (it) {
77
+ if (!it) return false;
78
+ if (prefilter && !prefilter(it)) return false;
79
+ if (!filterValue) return true;
80
+ if (filter) return filter(it, filterValueTrimmed);
81
+ var value = (isString(it) ? it : it.name || it.label || '').toLowerCase().trim();
82
+ return continuousIncludes(value, filterValueTrimmed);
83
+ };
84
+ });
74
85
  _this.onClickOutside = function () {
75
86
  var _this$props = _this.props,
76
87
  allowCustom = _this$props.allowCustom,
@@ -214,7 +225,7 @@ var AutocompleteSelect = function (_React$Component) {
214
225
  withArrow = _this$props3.withArrow,
215
226
  withFilter = _this$props3.withFilter,
216
227
  withReset = _this$props3.withReset,
217
- _filter = _this$props3.filter,
228
+ filter = _this$props3.filter,
218
229
  label = _this$props3.label,
219
230
  inputLabel = _this$props3.inputLabel,
220
231
  mode = _this$props3.mode,
@@ -271,32 +282,7 @@ var AutocompleteSelect = function (_React$Component) {
271
282
  var dataFiltered = allowCustom ? [filterValueTrimmed].concat(_toConsumableArray(data.filter(function (suggestion) {
272
283
  return suggestion !== filterValueTrimmed;
273
284
  }))) : data;
274
- var list = ReactCreateElement(FilteredList, {
275
- className: classNames(isActive && 'visible'),
276
- ref: ref('list', this),
277
- filter: function filter(it) {
278
- if (!it) return false;
279
- if (prefilter && !prefilter(it)) return false;
280
- if (!filterValue) return true;
281
- var f = filterValueTrimmed.toLowerCase();
282
- if (_filter) return _filter(it, f);
283
- var value = (isString(it) ? it : it.name || it.label || '').toLowerCase().trim();
284
- return continuousIncludes(value, f);
285
- },
286
- selectSingle: !allowCustom,
287
- scroll: scroll,
288
- inline: isInline,
289
- nextProvider: ref('next', this),
290
- prevProvider: ref('prev', this),
291
- selectedProvider: ref('getSelected', this),
292
- resetProvider: ref('reset', this),
293
- onSelect: this.onSelect,
294
- selected: selected,
295
- childComponent: childComponent,
296
- childProps: childProps,
297
- data: dataFiltered,
298
- labels: labels
299
- });
285
+ var filterFunction = this.createFilter(prefilter, filterValue, filterValueTrimmed.toLowerCase(), filter);
300
286
  return ReactCreateElement("div", {
301
287
  id: id,
302
288
  className: classNames('AutocompleteSelect', mode, isMultipleSelect(mode) && 'multi', className, withFilter ? 'withFilter' : 'withoutFilter', isActive && 'active', errored && 'errored', inlineSelected && 'inlineSelected', hasSelected && 'hasSelected'),
@@ -419,11 +405,28 @@ var AutocompleteSelect = function (_React$Component) {
419
405
  _this3.onCancel();
420
406
  }
421
407
  }
422
- }), !withFilter && inputLabel && ReactCreateElement("label", null, inputLabel)), list);
408
+ }), !withFilter && inputLabel && ReactCreateElement("label", null, inputLabel)), ReactCreateElement(FilteredList, {
409
+ className: classNames(isActive && 'visible'),
410
+ ref: ref('list', this),
411
+ filter: filterFunction,
412
+ selectSingle: !allowCustom,
413
+ scroll: scroll,
414
+ inline: isInline,
415
+ nextProvider: ref('next', this),
416
+ prevProvider: ref('prev', this),
417
+ selectedProvider: ref('getSelected', this),
418
+ resetProvider: ref('reset', this),
419
+ onSelect: this.onSelect,
420
+ selected: selected,
421
+ childComponent: childComponent,
422
+ childProps: childProps,
423
+ data: dataFiltered,
424
+ labels: labels
425
+ }));
423
426
  }
424
427
  }]);
425
428
  return AutocompleteSelect;
426
- }(React.Component);
429
+ }(PureComponent);
427
430
  AutocompleteSelect.propTypes = {
428
431
  mode: PropTypes.oneOf([MODE_DEFAULT, MODE_INLINE, MODE_MULTIPLE, MODE_MULTIPLE_AUTO, MODE_MULTIPLE_MINI, MODE_MULTIPLE_MINI_INLINE, MODE_INLINE_MULTIPLE, MODE_MINI])
429
432
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteSelect.js","sources":["../src/react-ui-basics/AutocompleteSelect.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './AutocompleteSelect.css'\nimport TextField from \"./TextField\";\nimport FilteredList, {getLabel} from \"./FilteredList\";\nimport {\n classNames,\n continuousIncludes,\n getRandomId,\n ref,\n orNoop,\n preventDefault,\n stopPropagation,\n DOCUMENT,\n addEventListener,\n removeEventListener,\n isObject,\n isFunction,\n isString, UNDEFINED\n} from \"./Tools\";\nimport Button from \"./Button\";\nimport MaterialIcon from \"./MaterialIcon\";\n\nexport const MODE_DEFAULT = 'default';\nexport const MODE_INLINE = 'inline';\nexport const MODE_INLINE_MULTIPLE = 'inline-multiple';\nexport const MODE_MULTIPLE_AUTO = 'multiple-auto';\nexport const MODE_MULTIPLE = 'multiple';\nexport const MODE_MULTIPLE_MINI = 'multiple-mini';\nexport const MODE_MINI = 'mini';\nexport const MODE_MULTIPLE_MINI_INLINE = 'multiple-mini-inline';\n\n\nconst DummyChild = ({id, label, dataConsumer, onClick}) => {\n orNoop(dataConsumer)(label || id);\n return <div className={`DummyChild`} onClick={onClick}>{label || id}</div>\n};\n\nconst prepareSelected = (value) => {\n let result;\n if (value != null) {\n if (Array.isArray(value))\n result = value.reduce((map, obj) => {\n map[obj] = obj;\n return map;\n }, {});\n else if (isObject(value))\n result = value;\n else if (value)\n result = {[value]: value};\n else\n result = {}\n } else {\n result = {};\n }\n return result;\n};\n\nconst findParent = (el, tag) => {\n if (el != null) {\n const tagName = el.tagName;\n if (tagName && tagName.toUpperCase() === tag.toUpperCase()) {\n return el;\n } else {\n return findParent(el.parentNode, tag)\n }\n }\n return null;\n}\n\nfunction isMultipleSelect(mode) {\n return mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI || mode === MODE_MULTIPLE_MINI_INLINE;\n}\n\nclass AutocompleteSelect extends React.Component {\n\n static propTypes = {\n mode: PropTypes.oneOf([MODE_DEFAULT, MODE_INLINE, MODE_MULTIPLE, MODE_MULTIPLE_AUTO, MODE_MULTIPLE_MINI, MODE_MULTIPLE_MINI_INLINE, MODE_INLINE_MULTIPLE, MODE_MINI])\n };\n\n constructor(props) {\n super(props);\n const that = this;\n that.state = {\n selected: prepareSelected(props.value),\n isActive: !!props.focused,\n\n };\n that.randomId = getRandomId('acs-');\n\n const {data, getSelected} = props;\n isFunction(data) && data(data => that.setState({data}));\n\n getSelected && getSelected(() => Object.values(that.state.selected));\n }\n\n componentDidMount() {\n addEventListener(DOCUMENT, 'mousedown', this.listener = (e) => {\n if (this.state.isActive && this.el && !this.el.contains(e.target)) {\n this.onClickOutside()\n }\n })\n if (this.props.required) {\n const form = findParent(this.el.parentNode, 'form')\n if (form) {\n addEventListener(this.submitButton = form.querySelector('button[type=submit]'), 'click', this.formSubmitListener = (e) => {\n const errored = Object.keys(this.state.selected).length === 0;\n this.setState({errored: errored})\n })\n }\n }\n this.initSelected(this.props, this.state)\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.value !== prevProps.value)\n this.initSelected(this.props, this.state)\n }\n\n initSelected = ({value, mode, allowCustom}, {filterValue = ''}) => {\n this.setState({\n selected: prepareSelected(value),\n filterValue: allowCustom && isString(value) && !isMultipleSelect(mode) ? value : filterValue,\n });\n };\n\n componentWillUnmount() {\n removeEventListener(DOCUMENT, 'mousedown', this.listener)\n removeEventListener(this.submitButton, 'click', this.formSubmitListener)\n }\n\n static defaultProps = {\n childComponent: DummyChild,\n withArrow: true,\n withFilter: true,\n withReset: false,\n scrollToValue: false,\n mode: MODE_DEFAULT,\n selectedMode: 'full',\n removeIcon: <MaterialIcon icon=\"close\"/>,\n };\n\n render() {\n const {\n childComponent,\n childProps,\n withArrow,\n withFilter,\n withReset,\n filter,\n label,\n inputLabel,\n mode,\n selectedMode,\n prefilter,\n className,\n scrollToValue,\n scroll,\n required,\n allowCustom,\n inlineSelected,\n removeIcon,\n } = this.props;\n const id = this.props.id || this.randomId;\n const selectedComponent = this.props.selectedComponent || childComponent;\n const {selected = {}, filterValue = '', errored} = this.state;\n let {isActive} = this.state;\n if (this.props.isActive !== UNDEFINED) {\n isActive = this.props.isActive\n }\n let {data = [], labels = {}} = this.props;\n if (this.state.data)\n data = this.state.data;\n\n if (!Array.isArray(data))\n data = [];\n\n const selectedIds = Object.values(selected);\n const hasSelected = selectedIds.length !== 0;\n const setActive = (e) => {\n stopPropagation(e);\n this.setState({isActive: true}, () => (scrollToValue && selectedIds.length > 0) && this.list.scrollTo(selectedIds[0]));\n };\n const toggle = (e) => {\n if (!this.state.isActive) {\n setActive(e);\n } else {\n stopPropagation(e);\n this.setState({isActive: false});\n }\n };\n\n const isInline = mode === MODE_INLINE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE;\n const filterValueTrimmed = filterValue.trim();\n const dataFiltered = allowCustom ? [filterValueTrimmed, ...data.filter(suggestion => suggestion !== filterValueTrimmed)] : data;\n\n const list = <FilteredList className={classNames(isActive && 'visible')}\n ref={ref('list', this)}\n filter={it => {\n if (!it) return false;\n if (prefilter && !prefilter(it)) return false;\n if (!filterValue) return true;\n\n const f = filterValueTrimmed.toLowerCase();\n if (filter) return filter(it, f);\n\n let value = (isString(it) ? it : (it.name || it.label || '')).toLowerCase().trim();\n return continuousIncludes(value, f);\n }}\n selectSingle={!allowCustom}\n scroll={scroll}\n inline={isInline}\n nextProvider={ref('next', this)}\n prevProvider={ref('prev', this)}\n selectedProvider={ref('getSelected', this)}\n resetProvider={ref('reset', this)}\n onSelect={this.onSelect}\n selected={selected}\n childComponent={childComponent}\n childProps={childProps}\n data={dataFiltered}\n labels={labels}\n />;\n\n return (\n <div id={id}\n className={classNames(\n 'AutocompleteSelect',\n mode,\n isMultipleSelect(mode) && 'multi',\n className,\n withFilter ? 'withFilter' : 'withoutFilter',\n isActive && 'active',\n errored && 'errored',\n inlineSelected && 'inlineSelected',\n hasSelected && 'hasSelected',\n )}\n ref={ref('el', this)}>\n {label && <label className={classNames(`label`, (hasSelected || filterValue) && 'active', hasSelected && 'hasSelected')}\n htmlFor={'f-' + id}\n onClick={() => {\n if (mode === MODE_MULTIPLE_MINI_INLINE || !isActive) {\n toggle();\n }\n }}\n >\n {label}\n {required && ' *'}\n {withArrow && <span className=\"arrow\"/>}\n </label>}\n\n {(!isActive || mode === MODE_MULTIPLE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE || mode === MODE_MULTIPLE_AUTO || !withFilter) && !inlineSelected && hasSelected && (\n <div\n className={classNames('selected',\n !label && 'nolabel',\n (mode === MODE_MULTIPLE_MINI || mode === MODE_MINI || mode === MODE_MULTIPLE_MINI_INLINE) && 'clickable',\n selectedMode)}\n onClick={toggle}>\n\n {selectedMode === 'full' && selectedIds.map(id =>\n <div className=\"value\" key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n <div className=\"button remove\" onClick={e => {\n stopPropagation(e);\n this.remove(id);\n }}>\n {removeIcon}\n </div>\n </div>\n )}\n {selectedMode === 'inline' && selectedIds.map(id =>\n <React.Fragment key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n {id !== selectedIds[selectedIds.length - 1] && ', '}\n </React.Fragment>\n )}\n {!label && withArrow && <span className=\"arrow\"/>}\n {withReset && <Button className=\"reset\" raised={false} onClick={this.clean}>\n {removeIcon}\n </Button>}\n </div>\n )}\n\n {inlineSelected && hasSelected && <>\n {selectedMode === 'full' && selectedIds.map(id =>\n <div className=\"value\" key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n <div className=\"button remove\" onClick={e => {\n stopPropagation(e);\n this.remove(id);\n }}>\n {removeIcon}\n </div>\n </div>\n )}\n {selectedMode === 'inline' && selectedIds.map(id =>\n <React.Fragment key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n {id !== selectedIds[selectedIds.length - 1] && ', '}\n </React.Fragment>\n )}\n </>}\n\n {(isActive || (!hasSelected && mode !== MODE_MULTIPLE_MINI_INLINE) || mode === MODE_MULTIPLE || (mode === MODE_MULTIPLE_AUTO && selectedIds.length > 1) || mode === MODE_INLINE_MULTIPLE) && (\n <div className={`input`} data-value={filterValue}>\n {withFilter && <TextField autoComplete=\"new-password\" id={'f-' + id}\n ref={ref('input', this)}\n focused={isActive}\n value={filterValue}\n label={inputLabel}\n onChange={this.onChange}\n onFocus={e => this.setState({isActive: true})}\n check={this.props.filterCheck}\n onKeyDown={e => {\n const keyCode = e.keyCode;\n if (keyCode === 38/*up*/) {\n preventDefault(e);\n this.prev();\n } else if (keyCode === 40/*down*/) {\n preventDefault(e);\n this.next();\n } else if (keyCode === 13/*enter*/) {\n preventDefault(e);\n this.onSelect(this.getSelected())\n } else if (keyCode === 9/*tab*/) {\n this.onSelect(this.getSelected())\n } else if (keyCode === 8/*backspace*/) {\n if (!filterValue && (selectedIds.length !== 0) && isMultipleSelect(mode)) {\n this.remove(selectedIds[selectedIds.length - 1]);\n }\n this.reset()\n } else if (keyCode === 46/*delete*/) {\n this.reset()\n } else if (keyCode === 27/*esc*/) {\n this.setState({\n isActive: false,\n filterValue: isMultipleSelect(mode) ? '' : (allowCustom ? filterValue : ''),\n });\n this.input.getInput().blur()\n this.onCancel();\n }\n // console.log('key pressed:', e.keyCode)\n }}\n />}\n {!withFilter && inputLabel && <label>{inputLabel}</label>}\n </div>\n )}\n {list}\n </div>\n )\n }\n\n onClickOutside = () => {\n const {allowCustom, required} = this.props;\n const {filterValue} = this.state;\n if (allowCustom && (!!filterValue || !required)) {\n this.onSelect()\n }\n\n this.setState({isActive: false});\n\n this.onCancel();\n };\n\n onCancel = () => {\n orNoop(this.props.onCancel)()\n };\n\n onSelect = (selectedId) => {\n const {mode, required, allowCustom, onSelect, onChange, default: defaultValue} = this.props;\n const {filterValue, selected: currentSelection} = this.state;\n\n if (selectedId == null && (!!filterValue || !required) && allowCustom && (!this.input || !this.input.check()))\n selectedId = filterValue.trim();\n\n const isMultiSelect = isMultipleSelect(mode);\n\n if (!selectedId && isMultiSelect) {\n selectedId = null;\n }\n\n // debugger\n\n const isSelected = selectedId != null;\n\n let selected = {...currentSelection};\n if (selected[selectedId] && (defaultValue || isMultiSelect)) {\n delete selected[selectedId];\n if (defaultValue && Object.keys(selected).length === 0)\n selected[defaultValue] = defaultValue;\n } else if (isSelected && (isMultiSelect)) {\n selected[selectedId] = selectedId;\n } else if (isSelected) {\n selected = {[selectedId]: selectedId};\n }\n\n const errored = required && Object.keys(selected) === 0;\n\n const isActive = mode === MODE_MULTIPLE_MINI_INLINE || (isMultiSelect && isSelected)\n\n this.setState({\n isActive: isActive,\n selected: selected,\n filterValue: isMultiSelect ? '' : (allowCustom ? selectedId || '' : ''),\n errored,\n });\n\n if (isActive && this.input)\n this.input.getInput().focus()\n\n orNoop(onSelect)(selectedId);\n orNoop(onChange)(Object.values(selected));\n };\n\n clean = (e) => {\n preventDefault(e);\n stopPropagation(e);\n\n this.setState({\n isActive: false,\n selected: {},\n filterValue: '',\n });\n\n orNoop(this.props.onSelect)(null);\n orNoop(this.props.onChange)([]);\n\n this.initSelected(this.props, this.state);\n };\n\n remove = (id) => {\n let result = {\n ...this.state,\n selected: {...this.state.selected},\n filterValue: '',\n };\n delete result.selected[id];\n this.setState(result);\n orNoop(this.props.onChange)(Object.values(result.selected));\n };\n\n onChange = (event) => {\n const value = event.target.value;\n this.setState({filterValue: value});\n this.props.onFilterInputChange?.(value);\n }\n}\n\nexport default AutocompleteSelect;\n"],"names":["MODE_DEFAULT","MODE_INLINE","MODE_INLINE_MULTIPLE","MODE_MULTIPLE_AUTO","MODE_MULTIPLE","MODE_MULTIPLE_MINI","MODE_MINI","MODE_MULTIPLE_MINI_INLINE","DummyChild","id","label","dataConsumer","onClick","orNoop","prepareSelected","value","result","Array","isArray","reduce","map","obj","isObject","findParent","el","tag","tagName","toUpperCase","parentNode","isMultipleSelect","mode","AutocompleteSelect","props","initSelected","allowCustom","filterValue","setState","selected","isString","onClickOutside","required","state","onSelect","isActive","onCancel","selectedId","onChange","defaultValue","currentSelection","input","check","trim","isMultiSelect","isSelected","Object","keys","length","errored","getInput","focus","values","clean","e","preventDefault","stopPropagation","remove","event","target","onFilterInputChange","that","focused","randomId","getRandomId","data","getSelected","isFunction","addEventListener","DOCUMENT","listener","contains","form","submitButton","querySelector","formSubmitListener","prevProps","prevState","snapshot","removeEventListener","childComponent","childProps","withArrow","withFilter","withReset","filter","inputLabel","selectedMode","prefilter","className","scrollToValue","scroll","inlineSelected","removeIcon","selectedComponent","UNDEFINED","labels","selectedIds","hasSelected","setActive","list","scrollTo","toggle","isInline","filterValueTrimmed","dataFiltered","suggestion","classNames","ref","it","f","toLowerCase","name","continuousIncludes","React","createElement","getLabel","filterCheck","keyCode","prev","next","reset","blur","Component","propTypes","PropTypes","oneOf","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"AutocompleteSelect.js","sources":["../src/react-ui-basics/AutocompleteSelect.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport PropTypes from 'prop-types';\nimport './AutocompleteSelect.css'\nimport TextField from \"./TextField\";\nimport FilteredList, {getLabel} from \"./FilteredList\";\nimport {\n classNames,\n continuousIncludes,\n getRandomId,\n ref,\n orNoop,\n preventDefault,\n stopPropagation,\n DOCUMENT,\n addEventListener,\n removeEventListener,\n isObject,\n isFunction,\n isString, UNDEFINED, memo\n} from \"./Tools\";\nimport Button from \"./Button\";\nimport MaterialIcon from \"./MaterialIcon\";\nimport {PureComponent} from \"./ReactConstants\";\n\nexport const MODE_DEFAULT = 'default';\nexport const MODE_INLINE = 'inline';\nexport const MODE_INLINE_MULTIPLE = 'inline-multiple';\nexport const MODE_MULTIPLE_AUTO = 'multiple-auto';\nexport const MODE_MULTIPLE = 'multiple';\nexport const MODE_MULTIPLE_MINI = 'multiple-mini';\nexport const MODE_MINI = 'mini';\nexport const MODE_MULTIPLE_MINI_INLINE = 'multiple-mini-inline';\n\n\nconst DummyChild = ({id, label, dataConsumer, onClick}) => {\n orNoop(dataConsumer)(label || id);\n return <div className={`DummyChild`} onClick={onClick}>{label || id}</div>\n};\n\nconst prepareSelected = (value) => {\n let result;\n if (value != null) {\n if (Array.isArray(value))\n result = value.reduce((map, obj) => {\n map[obj] = obj;\n return map;\n }, {});\n else if (isObject(value))\n result = value;\n else if (value)\n result = {[value]: value};\n else\n result = {}\n } else {\n result = {};\n }\n return result;\n};\n\nconst findParent = (el, tag) => {\n if (el != null) {\n const tagName = el.tagName;\n if (tagName && tagName.toUpperCase() === tag.toUpperCase()) {\n return el;\n } else {\n return findParent(el.parentNode, tag)\n }\n }\n return null;\n}\n\nfunction isMultipleSelect(mode) {\n return mode === MODE_MULTIPLE || mode === MODE_MULTIPLE_AUTO || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI || mode === MODE_MULTIPLE_MINI_INLINE;\n}\n\nclass AutocompleteSelect extends PureComponent {\n\n static propTypes = {\n mode: PropTypes.oneOf([MODE_DEFAULT, MODE_INLINE, MODE_MULTIPLE, MODE_MULTIPLE_AUTO, MODE_MULTIPLE_MINI, MODE_MULTIPLE_MINI_INLINE, MODE_INLINE_MULTIPLE, MODE_MINI])\n };\n\n constructor(props) {\n super(props);\n const that = this;\n that.state = {\n selected: prepareSelected(props.value),\n isActive: !!props.focused,\n\n };\n that.randomId = getRandomId('acs-');\n\n const {data, getSelected} = props;\n isFunction(data) && data(data => that.setState({data}));\n\n getSelected && getSelected(() => Object.values(that.state.selected));\n }\n\n componentDidMount() {\n addEventListener(DOCUMENT, 'mousedown', this.listener = (e) => {\n if (this.state.isActive && this.el && !this.el.contains(e.target)) {\n this.onClickOutside()\n }\n })\n if (this.props.required) {\n const form = findParent(this.el.parentNode, 'form')\n if (form) {\n addEventListener(this.submitButton = form.querySelector('button[type=submit]'), 'click', this.formSubmitListener = (e) => {\n const errored = Object.keys(this.state.selected).length === 0;\n this.setState({errored: errored})\n })\n }\n }\n this.initSelected(this.props, this.state)\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.value !== prevProps.value)\n this.initSelected(this.props, this.state)\n }\n\n initSelected = ({value, mode, allowCustom}, {filterValue = ''}) => {\n this.setState({\n selected: prepareSelected(value),\n filterValue: allowCustom && isString(value) && !isMultipleSelect(mode) ? value : filterValue,\n });\n };\n\n componentWillUnmount() {\n removeEventListener(DOCUMENT, 'mousedown', this.listener)\n removeEventListener(this.submitButton, 'click', this.formSubmitListener)\n }\n\n static defaultProps = {\n childComponent: DummyChild,\n withArrow: true,\n withFilter: true,\n withReset: false,\n scrollToValue: false,\n mode: MODE_DEFAULT,\n selectedMode: 'full',\n removeIcon: <MaterialIcon icon=\"close\"/>,\n };\n\n createFilter = memo((prefilter, filterValue, filterValueTrimmed, filter) => it => {\n if (!it) return false;\n if (prefilter && !prefilter(it)) return false;\n if (!filterValue) return true;\n\n if (filter) return filter(it, filterValueTrimmed);\n\n let value = (isString(it) ? it : (it.name || it.label || '')).toLowerCase().trim();\n return continuousIncludes(value, filterValueTrimmed);\n }\n )\n\n render() {\n const {\n childComponent,\n childProps,\n withArrow,\n withFilter,\n withReset,\n filter,\n label,\n inputLabel,\n mode,\n selectedMode,\n prefilter,\n className,\n scrollToValue,\n scroll,\n required,\n allowCustom,\n inlineSelected,\n removeIcon,\n } = this.props;\n const id = this.props.id || this.randomId;\n const selectedComponent = this.props.selectedComponent || childComponent;\n const {selected = {}, filterValue = '', errored} = this.state;\n let {isActive} = this.state;\n if (this.props.isActive !== UNDEFINED) {\n isActive = this.props.isActive\n }\n let {data = [], labels = {}} = this.props;\n if (this.state.data)\n data = this.state.data;\n\n if (!Array.isArray(data))\n data = [];\n\n const selectedIds = Object.values(selected);\n const hasSelected = selectedIds.length !== 0;\n const setActive = (e) => {\n stopPropagation(e);\n this.setState({isActive: true}, () => (scrollToValue && selectedIds.length > 0) && this.list.scrollTo(selectedIds[0]));\n };\n const toggle = (e) => {\n if (!this.state.isActive) {\n setActive(e);\n } else {\n stopPropagation(e);\n this.setState({isActive: false});\n }\n };\n\n const isInline = mode === MODE_INLINE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE;\n const filterValueTrimmed = filterValue.trim();\n const dataFiltered = allowCustom ? [filterValueTrimmed, ...data.filter(suggestion => suggestion !== filterValueTrimmed)] : data;\n\n const filterFunction = this.createFilter(prefilter, filterValue, filterValueTrimmed.toLowerCase(), filter)\n return (\n <div id={id}\n className={classNames(\n 'AutocompleteSelect',\n mode,\n isMultipleSelect(mode) && 'multi',\n className,\n withFilter ? 'withFilter' : 'withoutFilter',\n isActive && 'active',\n errored && 'errored',\n inlineSelected && 'inlineSelected',\n hasSelected && 'hasSelected',\n )}\n ref={ref('el', this)}>\n {label && <label className={classNames(`label`, (hasSelected || filterValue) && 'active', hasSelected && 'hasSelected')}\n htmlFor={'f-' + id}\n onClick={() => {\n if (mode === MODE_MULTIPLE_MINI_INLINE || !isActive) {\n toggle();\n }\n }}\n >\n {label}\n {required && ' *'}\n {withArrow && <span className=\"arrow\"/>}\n </label>}\n\n {(!isActive || mode === MODE_MULTIPLE || mode === MODE_INLINE_MULTIPLE || mode === MODE_MULTIPLE_MINI_INLINE || mode === MODE_MULTIPLE_AUTO || !withFilter) && !inlineSelected && hasSelected && (\n <div\n className={classNames('selected',\n !label && 'nolabel',\n (mode === MODE_MULTIPLE_MINI || mode === MODE_MINI || mode === MODE_MULTIPLE_MINI_INLINE) && 'clickable',\n selectedMode)}\n onClick={toggle}>\n\n {selectedMode === 'full' && selectedIds.map(id =>\n <div className=\"value\" key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n <div className=\"button remove\" onClick={e => {\n stopPropagation(e);\n this.remove(id);\n }}>\n {removeIcon}\n </div>\n </div>\n )}\n {selectedMode === 'inline' && selectedIds.map(id =>\n <React.Fragment key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n {id !== selectedIds[selectedIds.length - 1] && ', '}\n </React.Fragment>\n )}\n {!label && withArrow && <span className=\"arrow\"/>}\n {withReset && <Button className=\"reset\" raised={false} onClick={this.clean}>\n {removeIcon}\n </Button>}\n </div>\n )}\n\n {inlineSelected && hasSelected && <>\n {selectedMode === 'full' && selectedIds.map(id =>\n <div className=\"value\" key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n <div className=\"button remove\" onClick={e => {\n stopPropagation(e);\n this.remove(id);\n }}>\n {removeIcon}\n </div>\n </div>\n )}\n {selectedMode === 'inline' && selectedIds.map(id =>\n <React.Fragment key={id}>\n {React.createElement(selectedComponent, {...childProps, id, label: getLabel(labels, id), onClick: setActive})}\n {id !== selectedIds[selectedIds.length - 1] && ', '}\n </React.Fragment>\n )}\n </>}\n\n {(isActive || (!hasSelected && mode !== MODE_MULTIPLE_MINI_INLINE) || mode === MODE_MULTIPLE || (mode === MODE_MULTIPLE_AUTO && selectedIds.length > 1) || mode === MODE_INLINE_MULTIPLE) && (\n <div className={`input`} data-value={filterValue}>\n {withFilter && <TextField autoComplete=\"new-password\" id={'f-' + id}\n ref={ref('input', this)}\n focused={isActive}\n value={filterValue}\n label={inputLabel}\n onChange={this.onChange}\n onFocus={e => this.setState({isActive: true})}\n check={this.props.filterCheck}\n onKeyDown={e => {\n const keyCode = e.keyCode;\n if (keyCode === 38/*up*/) {\n preventDefault(e);\n this.prev();\n } else if (keyCode === 40/*down*/) {\n preventDefault(e);\n this.next();\n } else if (keyCode === 13/*enter*/) {\n preventDefault(e);\n this.onSelect(this.getSelected())\n } else if (keyCode === 9/*tab*/) {\n this.onSelect(this.getSelected())\n } else if (keyCode === 8/*backspace*/) {\n if (!filterValue && (selectedIds.length !== 0) && isMultipleSelect(mode)) {\n this.remove(selectedIds[selectedIds.length - 1]);\n }\n this.reset()\n } else if (keyCode === 46/*delete*/) {\n this.reset()\n } else if (keyCode === 27/*esc*/) {\n this.setState({\n isActive: false,\n filterValue: isMultipleSelect(mode) ? '' : (allowCustom ? filterValue : ''),\n });\n this.input.getInput().blur()\n this.onCancel();\n }\n // console.log('key pressed:', e.keyCode)\n }}\n />}\n {!withFilter && inputLabel && <label>{inputLabel}</label>}\n </div>\n )}\n\n <FilteredList className={classNames(isActive && 'visible')}\n ref={ref('list', this)}\n filter={filterFunction}\n selectSingle={!allowCustom}\n scroll={scroll}\n inline={isInline}\n nextProvider={ref('next', this)}\n prevProvider={ref('prev', this)}\n selectedProvider={ref('getSelected', this)}\n resetProvider={ref('reset', this)}\n onSelect={this.onSelect}\n selected={selected}\n childComponent={childComponent}\n childProps={childProps}\n data={dataFiltered}\n labels={labels}\n />\n </div>\n )\n }\n\n onClickOutside = () => {\n const {allowCustom, required} = this.props;\n const {filterValue} = this.state;\n if (allowCustom && (!!filterValue || !required)) {\n this.onSelect()\n }\n\n this.setState({isActive: false});\n\n this.onCancel();\n };\n\n onCancel = () => {\n orNoop(this.props.onCancel)()\n };\n\n onSelect = (selectedId) => {\n const {mode, required, allowCustom, onSelect, onChange, default: defaultValue} = this.props;\n const {filterValue, selected: currentSelection} = this.state;\n\n if (selectedId == null && (!!filterValue || !required) && allowCustom && (!this.input || !this.input.check()))\n selectedId = filterValue.trim();\n\n const isMultiSelect = isMultipleSelect(mode);\n\n if (!selectedId && isMultiSelect) {\n selectedId = null;\n }\n\n // debugger\n\n const isSelected = selectedId != null;\n\n let selected = {...currentSelection};\n if (selected[selectedId] && (defaultValue || isMultiSelect)) {\n delete selected[selectedId];\n if (defaultValue && Object.keys(selected).length === 0)\n selected[defaultValue] = defaultValue;\n } else if (isSelected && (isMultiSelect)) {\n selected[selectedId] = selectedId;\n } else if (isSelected) {\n selected = {[selectedId]: selectedId};\n }\n\n const errored = required && Object.keys(selected) === 0;\n\n const isActive = mode === MODE_MULTIPLE_MINI_INLINE || (isMultiSelect && isSelected)\n\n this.setState({\n isActive: isActive,\n selected: selected,\n filterValue: isMultiSelect ? '' : (allowCustom ? selectedId || '' : ''),\n errored,\n });\n\n if (isActive && this.input)\n this.input.getInput().focus()\n\n orNoop(onSelect)(selectedId);\n orNoop(onChange)(Object.values(selected));\n };\n\n clean = (e) => {\n preventDefault(e);\n stopPropagation(e);\n\n this.setState({\n isActive: false,\n selected: {},\n filterValue: '',\n });\n\n orNoop(this.props.onSelect)(null);\n orNoop(this.props.onChange)([]);\n\n this.initSelected(this.props, this.state);\n };\n\n remove = (id) => {\n let result = {\n ...this.state,\n selected: {...this.state.selected},\n filterValue: '',\n };\n delete result.selected[id];\n this.setState(result);\n orNoop(this.props.onChange)(Object.values(result.selected));\n };\n\n onChange = (event) => {\n const value = event.target.value;\n this.setState({filterValue: value});\n this.props.onFilterInputChange?.(value);\n }\n}\n\nexport default AutocompleteSelect;\n"],"names":["MODE_DEFAULT","MODE_INLINE","MODE_INLINE_MULTIPLE","MODE_MULTIPLE_AUTO","MODE_MULTIPLE","MODE_MULTIPLE_MINI","MODE_MINI","MODE_MULTIPLE_MINI_INLINE","DummyChild","id","label","dataConsumer","onClick","orNoop","prepareSelected","value","result","Array","isArray","reduce","map","obj","isObject","findParent","el","tag","tagName","toUpperCase","parentNode","isMultipleSelect","mode","AutocompleteSelect","props","initSelected","allowCustom","filterValue","setState","selected","isString","createFilter","memo","prefilter","filterValueTrimmed","filter","it","name","toLowerCase","trim","continuousIncludes","onClickOutside","required","state","onSelect","isActive","onCancel","selectedId","onChange","defaultValue","currentSelection","input","check","isMultiSelect","isSelected","Object","keys","length","errored","getInput","focus","values","clean","e","preventDefault","stopPropagation","remove","event","target","onFilterInputChange","that","focused","randomId","getRandomId","data","getSelected","isFunction","addEventListener","DOCUMENT","listener","contains","form","submitButton","querySelector","formSubmitListener","prevProps","prevState","snapshot","removeEventListener","childComponent","childProps","withArrow","withFilter","withReset","inputLabel","selectedMode","className","scrollToValue","scroll","inlineSelected","removeIcon","selectedComponent","UNDEFINED","labels","selectedIds","hasSelected","setActive","list","scrollTo","toggle","isInline","dataFiltered","suggestion","filterFunction","classNames","ref","React","createElement","getLabel","filterCheck","keyCode","prev","next","reset","blur","PureComponent","propTypes","PropTypes","oneOf","defaultProps"],"mappings":"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"}
package/FilteredList.js CHANGED
@@ -3,12 +3,13 @@ import React from 'react';
3
3
  import ReactCreateElement from './ReactCreateElement.js';
4
4
  import Scrollable from './Scrollable.js';
5
5
  import { orNoop, classNames, ref, isFunction, stopPropagation, isObject } from './Tools.js';
6
+ import { PureComponent } from './ReactConstants.js';
6
7
 
7
8
  var getLabel = function getLabel(labels, id) {
8
9
  return isFunction(labels) ? labels(id) : labels[id];
9
10
  };
10
- var FilteredList = function (_React$Component) {
11
- _inherits(FilteredList, _React$Component);
11
+ var FilteredList = function (_PureComponent) {
12
+ _inherits(FilteredList, _PureComponent);
12
13
  var _super = _createSuper(FilteredList);
13
14
  function FilteredList(_props) {
14
15
  var _this;
@@ -179,7 +180,7 @@ var FilteredList = function (_React$Component) {
179
180
  }
180
181
  }]);
181
182
  return FilteredList;
182
- }(React.Component);
183
+ }(PureComponent);
183
184
  FilteredList.defaultProps = {
184
185
  data: [],
185
186
  labels: {},
@@ -191,8 +192,8 @@ FilteredList.defaultProps = {
191
192
  }
192
193
  };
193
194
  var FilteredList$1 = FilteredList;
194
- var ItemWrapper = function (_React$Component2) {
195
- _inherits(ItemWrapper, _React$Component2);
195
+ var ItemWrapper = function (_React$Component) {
196
+ _inherits(ItemWrapper, _React$Component);
196
197
  var _super2 = _createSuper(ItemWrapper);
197
198
  function ItemWrapper() {
198
199
  _classCallCheck(this, ItemWrapper);
@@ -1 +1 @@
1
- {"version":3,"file":"FilteredList.js","sources":["../src/react-ui-basics/FilteredList.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport './FilteredList.css'\nimport Scrollable from \"./Scrollable\";\nimport {classNames, orNoop, ref, stopPropagation, isFunction, isObject} from \"./Tools\";\n\nexport const getLabel = (labels, id) => isFunction(labels) ? labels(id) : labels[id]\n\nclass FilteredList extends React.Component {\n\n static defaultProps = {\n data: [],\n labels: {},\n selected: {},\n inline: false,\n selectSingle: true,\n filter: () => true,\n };\n\n constructor(props) {\n super(props);\n this.state = {selected: -1};\n this.hidden = {};\n this.elements = {};\n }\n\n componentDidMount() {\n orNoop(this.props.nextProvider)(this.next);\n orNoop(this.props.prevProvider)(this.prev);\n orNoop(this.props.selectedProvider)(this.selected);\n orNoop(this.props.resetProvider)(this.reset);\n\n this.updateList(this.props)\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.data === prevProps.data)\n return;\n\n this.updateList(this.props)\n }\n\n updateList = (props) => {\n const {data} = props;\n const {selected} = this.state;\n this.list = data || [];\n\n if (!this.list.includes(selected))\n this.setState({selected: -1})\n };\n\n render() {\n const {data, labels, filter, className, selected, inline, childComponent, childProps, style, scroll} = this.props;\n return (\n <Scrollable className={classNames('FilteredList', className, inline ? 'inline' : 'popup')}\n ref={ref('el', this)} style={style} scrollBarMode={scroll}>\n {(data || []).filter(id => id !== false && id != null).map(id => <ItemWrapper\n id={id}\n key={id}\n label={getLabel(labels, id)}\n childComponent={childComponent}\n childProps={childProps}\n element={el => this.elements[id] = el}\n onClick={e => {\n stopPropagation(e);\n this.onSelect(id);\n }}\n onMouseEnter={e => this.setState({selected: id})}\n onMouseLeave={e => id === this.state.selected && this.setState({selected: -1})}\n className={classNames('child', this.state.selected === id && 'active', selected === id || (isObject(selected) && selected[id]) && 'selected')}\n classProvider={it => (this.hidden[id] = !filter(it)) && 'hidden'}\n />)}\n </Scrollable>\n )\n }\n\n onSelect = (id) => {\n this.setState({selected: id});\n this.props.onSelect(id);\n };\n\n selected = () => {\n const {selected: value} = this.state;\n const {selectSingle} = this.props;\n\n\n if (value === -1 || this.hidden[value]) {\n let filtered = this.list.filter(id => !this.hidden[id]);\n if (selectSingle && filtered.length === 1)\n return filtered[0];\n\n return null;\n } else {\n return value;\n }\n };\n\n next = () => {\n const list = this.list;\n const selected = this.state.selected;\n let position = list.findIndex(id => selected === id);\n if (this.hidden[list[position]])\n position = -1;\n\n while (++position < list.length) {\n if (!this.hidden[list[position]])\n break\n }\n if (position < list.length) {\n let id = list[position];\n this.setState({selected: id});\n this.updateScroll(id)\n }\n };\n\n prev = () => {\n const list = this.list;\n const selected = this.state.selected;\n let position = list.findIndex(id => selected === id);\n if (this.hidden[list[position]])\n position = list.length;\n\n while (--position >= 0) {\n if (!this.hidden[list[position]])\n break\n }\n if (position >= 0) {\n let id = list[position];\n this.setState({selected: id});\n this.updateScroll(id)\n }\n };\n\n updateScroll = (id) => {\n let child = this.elements[id];\n let container = this.el;\n const scrollTop = container.getScroll();\n const height = container.getHeight();\n let isVisible = scrollTop <= child.offsetTop && scrollTop + height >= child.offsetTop + child.clientHeight;\n if (!isVisible) {\n let scrollToBottom = child.offsetTop + child.clientHeight - height;\n let scrollToTop = child.offsetTop;\n if (Math.abs(scrollTop - scrollToTop) < Math.abs(scrollTop - scrollToBottom)) {\n container.setScroll(scrollToTop)\n } else {\n container.setScroll(scrollToBottom)\n }\n }\n };\n\n reset = () => {\n this.setState({selected: -1});\n this.el.scrollTop = 0;\n };\n\n scrollTo = (id) => this.el.setScroll(this.elements[id] && this.elements[id].offsetTop);\n}\n\nexport default FilteredList;\n\nclass ItemWrapper extends React.Component {\n render() {\n const {id, label, onClick, onMouseDown, onMouseEnter, onMouseLeave, classProvider, className, childComponent, childProps} = this.props;\n const child = React.createElement(childComponent, {\n ...childProps,\n id,\n label,\n dataConsumer: (data) => this.data = data,\n });\n\n const cssClass = orNoop(classProvider)(this.data);\n return (\n <div className={classNames('ItemWrapper', cssClass, className)}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseDown={onMouseDown}\n onClick={onClick}\n ref={ref('el', this)}\n >\n {child}\n </div>\n )\n }\n\n componentDidMount() {\n orNoop(this.props.element)(this.el);\n this.forceUpdate();\n }\n}\n"],"names":["getLabel","labels","id","isFunction","FilteredList","props","updateList","data","selected","state","list","includes","setState","onSelect","value","selectSingle","hidden","filtered","filter","length","next","position","findIndex","updateScroll","prev","child","elements","container","el","scrollTop","getScroll","height","getHeight","isVisible","offsetTop","clientHeight","scrollToBottom","scrollToTop","Math","abs","setScroll","reset","scrollTo","orNoop","nextProvider","prevProvider","selectedProvider","resetProvider","prevProps","prevState","snapshot","className","inline","childComponent","childProps","style","scroll","classNames","ref","map","e","stopPropagation","isObject","it","React","Component","defaultProps","ItemWrapper","label","onClick","onMouseDown","onMouseEnter","onMouseLeave","classProvider","createElement","dataConsumer","cssClass","element","forceUpdate"],"mappings":"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"}
1
+ {"version":3,"file":"FilteredList.js","sources":["../src/react-ui-basics/FilteredList.js"],"sourcesContent":["import React from 'react';\nimport ReactCreateElement from './ReactCreateElement';\nimport './FilteredList.css'\nimport Scrollable from \"./Scrollable\";\nimport {classNames, orNoop, ref, stopPropagation, isFunction, isObject} from \"./Tools\";\nimport {PureComponent} from \"./ReactConstants\";\n\nexport const getLabel = (labels, id) => isFunction(labels) ? labels(id) : labels[id]\n\nclass FilteredList extends PureComponent {\n\n static defaultProps = {\n data: [],\n labels: {},\n selected: {},\n inline: false,\n selectSingle: true,\n filter: () => true,\n };\n\n constructor(props) {\n super(props);\n this.state = {selected: -1};\n this.hidden = {};\n this.elements = {};\n }\n\n componentDidMount() {\n orNoop(this.props.nextProvider)(this.next);\n orNoop(this.props.prevProvider)(this.prev);\n orNoop(this.props.selectedProvider)(this.selected);\n orNoop(this.props.resetProvider)(this.reset);\n\n this.updateList(this.props)\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.props.data === prevProps.data)\n return;\n\n this.updateList(this.props)\n }\n\n updateList = (props) => {\n const {data} = props;\n const {selected} = this.state;\n this.list = data || [];\n\n if (!this.list.includes(selected))\n this.setState({selected: -1})\n };\n\n render() {\n const {data, labels, filter, className, selected, inline, childComponent, childProps, style, scroll} = this.props;\n return (\n <Scrollable className={classNames('FilteredList', className, inline ? 'inline' : 'popup')}\n ref={ref('el', this)} style={style} scrollBarMode={scroll}>\n {(data || []).filter(id => id !== false && id != null).map(id => <ItemWrapper\n id={id}\n key={id}\n label={getLabel(labels, id)}\n childComponent={childComponent}\n childProps={childProps}\n element={el => this.elements[id] = el}\n onClick={e => {\n stopPropagation(e);\n this.onSelect(id);\n }}\n onMouseEnter={e => this.setState({selected: id})}\n onMouseLeave={e => id === this.state.selected && this.setState({selected: -1})}\n className={classNames('child', this.state.selected === id && 'active', selected === id || (isObject(selected) && selected[id]) && 'selected')}\n classProvider={it => (this.hidden[id] = !filter(it)) && 'hidden'}\n />)}\n </Scrollable>\n )\n }\n\n onSelect = (id) => {\n this.setState({selected: id});\n this.props.onSelect(id);\n };\n\n selected = () => {\n const {selected: value} = this.state;\n const {selectSingle} = this.props;\n\n\n if (value === -1 || this.hidden[value]) {\n let filtered = this.list.filter(id => !this.hidden[id]);\n if (selectSingle && filtered.length === 1)\n return filtered[0];\n\n return null;\n } else {\n return value;\n }\n };\n\n next = () => {\n const list = this.list;\n const selected = this.state.selected;\n let position = list.findIndex(id => selected === id);\n if (this.hidden[list[position]])\n position = -1;\n\n while (++position < list.length) {\n if (!this.hidden[list[position]])\n break\n }\n if (position < list.length) {\n let id = list[position];\n this.setState({selected: id});\n this.updateScroll(id)\n }\n };\n\n prev = () => {\n const list = this.list;\n const selected = this.state.selected;\n let position = list.findIndex(id => selected === id);\n if (this.hidden[list[position]])\n position = list.length;\n\n while (--position >= 0) {\n if (!this.hidden[list[position]])\n break\n }\n if (position >= 0) {\n let id = list[position];\n this.setState({selected: id});\n this.updateScroll(id)\n }\n };\n\n updateScroll = (id) => {\n let child = this.elements[id];\n let container = this.el;\n const scrollTop = container.getScroll();\n const height = container.getHeight();\n let isVisible = scrollTop <= child.offsetTop && scrollTop + height >= child.offsetTop + child.clientHeight;\n if (!isVisible) {\n let scrollToBottom = child.offsetTop + child.clientHeight - height;\n let scrollToTop = child.offsetTop;\n if (Math.abs(scrollTop - scrollToTop) < Math.abs(scrollTop - scrollToBottom)) {\n container.setScroll(scrollToTop)\n } else {\n container.setScroll(scrollToBottom)\n }\n }\n };\n\n reset = () => {\n this.setState({selected: -1});\n this.el.scrollTop = 0;\n };\n\n scrollTo = (id) => this.el.setScroll(this.elements[id] && this.elements[id].offsetTop);\n}\n\nexport default FilteredList;\n\nclass ItemWrapper extends React.Component {\n render() {\n const {id, label, onClick, onMouseDown, onMouseEnter, onMouseLeave, classProvider, className, childComponent, childProps} = this.props;\n const child = React.createElement(childComponent, {\n ...childProps,\n id,\n label,\n dataConsumer: (data) => this.data = data,\n });\n\n const cssClass = orNoop(classProvider)(this.data);\n return (\n <div className={classNames('ItemWrapper', cssClass, className)}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseDown={onMouseDown}\n onClick={onClick}\n ref={ref('el', this)}\n >\n {child}\n </div>\n )\n }\n\n componentDidMount() {\n orNoop(this.props.element)(this.el);\n this.forceUpdate();\n }\n}\n"],"names":["getLabel","labels","id","isFunction","FilteredList","props","updateList","data","selected","state","list","includes","setState","onSelect","value","selectSingle","hidden","filtered","filter","length","next","position","findIndex","updateScroll","prev","child","elements","container","el","scrollTop","getScroll","height","getHeight","isVisible","offsetTop","clientHeight","scrollToBottom","scrollToTop","Math","abs","setScroll","reset","scrollTo","orNoop","nextProvider","prevProvider","selectedProvider","resetProvider","prevProps","prevState","snapshot","className","inline","childComponent","childProps","style","scroll","classNames","ref","map","e","stopPropagation","isObject","it","PureComponent","defaultProps","ItemWrapper","label","onClick","onMouseDown","onMouseEnter","onMouseLeave","classProvider","React","createElement","dataConsumer","cssClass","element","forceUpdate","Component"],"mappings":"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"}
package/Tools.js CHANGED
@@ -20,9 +20,10 @@ var getRandomId = function getRandomId(prefix) {
20
20
  return prefix + Math.random();
21
21
  };
22
22
  var ref = function ref(name, component) {
23
- return function (it) {
23
+ var refKey = "__" + name;
24
+ return component[refKey] || (component[refKey] = function (it) {
24
25
  return component[name] = it;
25
- };
26
+ });
26
27
  };
27
28
  var createRef = function createRef() {
28
29
  var ref = function ref() {
package/Tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Tools.js","sources":["../src/react-ui-basics/Tools.js"],"sourcesContent":["var global = global || window;\nexport const WINDOW = global;\nexport const DOCUMENT = WINDOW.document;\n\nexport function classNames() {\n const filtered = [];\n const length = arguments.length;\n for (let i = 0; i < length; i++) {\n let it = arguments[i];\n !!it && filtered.push(it);\n }\n return filtered.join(' ');\n}\n\nexport const NOOP = () => {\n};\n\nexport const orNoop = f => f || NOOP;\n\nexport const getRandomId = (prefix) => prefix + Math.random();\n\nexport const ref = (name, component) => (it) => component[name] = it;\n\nexport const createRef = () => {\n const ref = function () {\n arguments.length > 0 && (ref.v = arguments[0]);\n return ref.v;\n };\n return ref;\n};\n\nexport const setOf = (list) => (list || []).reduce((map, key) => {\n map[key] = true;\n return map;\n}, {});\n\nexport const allPropsExcept = (obj, except) => {\n let result = {};\n for (let key in obj) {\n if (!except[key]) result[key] = obj[key];\n }\n return result;\n};\n\nexport const continuousIncludes = (value, inc) => {\n const length = inc.length;\n let from = -1;\n for (let i = 0; i < length; i++) {\n from = value.indexOf(inc[i], from + 1);\n if (from === -1)\n return false\n }\n return true;\n};\n\nconst isArrayShallowEqual = (a, b) => {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) {\n return false;\n }\n let i = a.length - 1;\n let result = true;\n while (i >= 0 && (result = (a[i] === b[i]))) {\n i--;\n }\n return result;\n}\n\nexport const debounce = (func, delay) => {\n let inDebounce;\n return function () {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => {\n func.apply(context, args);\n }, delay)\n }\n};\n\nexport const memo = (func) => {\n let prevArgs\n let prevResult\n return function () {\n const context = this;\n const args = arguments;\n if (!isArrayShallowEqual(prevArgs, args)) {\n prevArgs = args\n prevResult = func.apply(context, args);\n }\n return prevResult\n }\n}\n\nexport const typeOf = (v) => typeof v;\nexport const isFunction = (v) => typeOf(v) === 'function';\nexport const isString = (v) => typeOf(v) === 'string';\nexport const isObject = (v) => typeOf(v) === 'object';\n\nexport const isDifferent = (a, b) => {\n if (a == null && b == null) return false;\n if (a == null || b == null) return true;\n if (a === b) return false;\n\n const typeA = typeOf(a);\n const typeB = typeOf(b);\n if (typeA !== typeB) {\n return true;\n }\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return true;\n }\n let i = a.length - 1;\n let result = false;\n while (i >= 0 && !(result = isDifferent(a[i], b[i]))) {\n i--;\n }\n return result;\n }\n\n if (typeA === 'object') {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) {\n return true;\n }\n\n let j = keysA.length - 1;\n let r = false;\n while (j >= 0 && !(r = keysA[j] !== keysB[j]) && !(r = isDifferent(a[keysA[j]], b[keysB[j]]))) {\n j--;\n }\n return r\n }\n\n return true;\n};\n\nexport const preventDefault = e => {\n e && e.preventDefault();\n};\nexport const stopPropagation = e => {\n e && e.stopPropagation();\n};\n\nexport const setTimeout = function () {\n return WINDOW.setTimeout.apply(WINDOW, arguments);\n};\nexport const clearTimeout = (id) => {\n WINDOW.clearTimeout(id);\n};\nexport const setInterval = function () {\n return WINDOW.setInterval.apply(WINDOW, arguments);\n};\nexport const clearInterval = (id) => {\n WINDOW.clearInterval(id);\n};\nexport const requestAnimationFrame = (cb) => WINDOW.requestAnimationFrame(cb);\nexport const addEventListener = (el, type, listener, options) => {\n el && el.addEventListener(type, listener, options);\n};\nexport const removeEventListener = (el, type, listener, options) => {\n el && el.removeEventListener(type, listener, options);\n};\n\nexport const UNDEFINED = undefined;\nexport const isUndefined = a => a === UNDEFINED;\n\n\nexport class Comparators {\n static SORT_ASC = 'ASC';\n static SORT_DESC = 'DESC';\n\n static of = (field, order, data) => {\n let comparator;\n if (Array.isArray(field)) {\n const isOrderArray = Array.isArray(order);\n comparator = Comparators.chain(field.map((it, i) => Comparators.of(it, (isOrderArray && order[i]) || Comparators.SORT_ASC, data)));\n } else if (isFunction(field)) {\n if (data && data[0] && isString(field(data[0]))) {\n const collator = new Intl.Collator({sensitivity: 'base'});\n comparator = (a, b) => {\n return collator.compare(field(a), field(b));\n }\n } else\n comparator = (a, b) => {\n const A = field(a);\n const B = field(b);\n return (A < B ? -1 : (A > B ? 1 : 0));\n };\n } else if (isString(field))\n comparator = Comparators.of(it => it[field], Comparators.SORT_ASC, data);\n else\n comparator = Comparators.of(it => it, Comparators.SORT_ASC, data);\n\n if (order && order === Comparators.SORT_DESC) {\n return Comparators.inverse(comparator);\n }\n\n return addComparatorMethods(comparator);\n };\n static chain = (comparators) => addComparatorMethods((a, b) => {\n let result;\n for (let i = 0; i < comparators.length; i++) {\n result = comparators[i](a, b);\n if (result !== 0)\n return result;\n }\n return result;\n }\n );\n\n static inverse = (comparator) => addComparatorMethods((a, b) => -comparator(a, b));\n}\n\nconst addComparatorMethods = function (comparator) {\n comparator.inverse = () => Comparators.inverse(comparator);\n comparator.and = (another) => Comparators.chain([comparator, another]);\n return comparator;\n};\n\nif (window.isNotProductionEnvironment) {\n // will be removed in production build\n // needed only to prevent bundler to remove 'unused' functions\n window.tools = {\n memo\n }\n}"],"names":["global","window","WINDOW","DOCUMENT","document","classNames","filtered","length","arguments","i","it","push","join","NOOP","orNoop","f","getRandomId","prefix","Math","random","ref","name","component","createRef","v","setOf","list","reduce","map","key","allPropsExcept","obj","except","result","continuousIncludes","value","inc","from","indexOf","isArrayShallowEqual","a","b","debounce","func","delay","inDebounce","context","args","clearTimeout","setTimeout","apply","memo","prevArgs","prevResult","typeOf","isFunction","isString","isObject","isDifferent","typeA","typeB","Array","isArray","keysA","Object","keys","keysB","j","r","preventDefault","e","stopPropagation","id","setInterval","clearInterval","requestAnimationFrame","cb","addEventListener","el","type","listener","options","removeEventListener","UNDEFINED","undefined","isUndefined","Comparators","SORT_ASC","SORT_DESC","of","field","order","data","comparator","isOrderArray","chain","collator","Intl","Collator","sensitivity","compare","A","B","inverse","addComparatorMethods","comparators","and","another","isNotProductionEnvironment","tools"],"mappings":"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"}
1
+ {"version":3,"file":"Tools.js","sources":["../src/react-ui-basics/Tools.js"],"sourcesContent":["var global = global || window;\nexport const WINDOW = global;\nexport const DOCUMENT = WINDOW.document;\n\nexport function classNames() {\n const filtered = [];\n const length = arguments.length;\n for (let i = 0; i < length; i++) {\n let it = arguments[i];\n !!it && filtered.push(it);\n }\n return filtered.join(' ');\n}\n\nexport const NOOP = () => {\n};\n\nexport const orNoop = f => f || NOOP;\n\nexport const getRandomId = (prefix) => prefix + Math.random();\n\nexport const ref = (name, component) => {\n const refKey = \"__\" + name;\n return component[refKey] || (component[refKey] = (it) => component[name] = it)\n};\n\nexport const createRef = () => {\n const ref = function () {\n arguments.length > 0 && (ref.v = arguments[0]);\n return ref.v;\n };\n return ref;\n};\n\nexport const setOf = (list) => (list || []).reduce((map, key) => {\n map[key] = true;\n return map;\n}, {});\n\nexport const allPropsExcept = (obj, except) => {\n let result = {};\n for (let key in obj) {\n if (!except[key]) result[key] = obj[key];\n }\n return result;\n};\n\nexport const continuousIncludes = (value, inc) => {\n const length = inc.length;\n let from = -1;\n for (let i = 0; i < length; i++) {\n from = value.indexOf(inc[i], from + 1);\n if (from === -1)\n return false\n }\n return true;\n};\n\nconst isArrayShallowEqual = (a, b) => {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) {\n return false;\n }\n let i = a.length - 1;\n let result = true;\n while (i >= 0 && (result = (a[i] === b[i]))) {\n i--;\n }\n return result;\n}\n\nexport const debounce = (func, delay) => {\n let inDebounce;\n return function () {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => {\n func.apply(context, args);\n }, delay)\n }\n};\n\nexport const memo = (func) => {\n let prevArgs\n let prevResult\n return function () {\n const context = this;\n const args = arguments;\n if (!isArrayShallowEqual(prevArgs, args)) {\n prevArgs = args\n prevResult = func.apply(context, args);\n }\n return prevResult\n }\n}\n\nexport const typeOf = (v) => typeof v;\nexport const isFunction = (v) => typeOf(v) === 'function';\nexport const isString = (v) => typeOf(v) === 'string';\nexport const isObject = (v) => typeOf(v) === 'object';\n\nexport const isDifferent = (a, b) => {\n if (a == null && b == null) return false;\n if (a == null || b == null) return true;\n if (a === b) return false;\n\n const typeA = typeOf(a);\n const typeB = typeOf(b);\n if (typeA !== typeB) {\n return true;\n }\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return true;\n }\n let i = a.length - 1;\n let result = false;\n while (i >= 0 && !(result = isDifferent(a[i], b[i]))) {\n i--;\n }\n return result;\n }\n\n if (typeA === 'object') {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) {\n return true;\n }\n\n let j = keysA.length - 1;\n let r = false;\n while (j >= 0 && !(r = keysA[j] !== keysB[j]) && !(r = isDifferent(a[keysA[j]], b[keysB[j]]))) {\n j--;\n }\n return r\n }\n\n return true;\n};\n\nexport const preventDefault = e => {\n e && e.preventDefault();\n};\nexport const stopPropagation = e => {\n e && e.stopPropagation();\n};\n\nexport const setTimeout = function () {\n return WINDOW.setTimeout.apply(WINDOW, arguments);\n};\nexport const clearTimeout = (id) => {\n WINDOW.clearTimeout(id);\n};\nexport const setInterval = function () {\n return WINDOW.setInterval.apply(WINDOW, arguments);\n};\nexport const clearInterval = (id) => {\n WINDOW.clearInterval(id);\n};\nexport const requestAnimationFrame = (cb) => WINDOW.requestAnimationFrame(cb);\nexport const addEventListener = (el, type, listener, options) => {\n el && el.addEventListener(type, listener, options);\n};\nexport const removeEventListener = (el, type, listener, options) => {\n el && el.removeEventListener(type, listener, options);\n};\n\nexport const UNDEFINED = undefined;\nexport const isUndefined = a => a === UNDEFINED;\n\n\nexport class Comparators {\n static SORT_ASC = 'ASC';\n static SORT_DESC = 'DESC';\n\n static of = (field, order, data) => {\n let comparator;\n if (Array.isArray(field)) {\n const isOrderArray = Array.isArray(order);\n comparator = Comparators.chain(field.map((it, i) => Comparators.of(it, (isOrderArray && order[i]) || Comparators.SORT_ASC, data)));\n } else if (isFunction(field)) {\n if (data && data[0] && isString(field(data[0]))) {\n const collator = new Intl.Collator({sensitivity: 'base'});\n comparator = (a, b) => {\n return collator.compare(field(a), field(b));\n }\n } else\n comparator = (a, b) => {\n const A = field(a);\n const B = field(b);\n return (A < B ? -1 : (A > B ? 1 : 0));\n };\n } else if (isString(field))\n comparator = Comparators.of(it => it[field], Comparators.SORT_ASC, data);\n else\n comparator = Comparators.of(it => it, Comparators.SORT_ASC, data);\n\n if (order && order === Comparators.SORT_DESC) {\n return Comparators.inverse(comparator);\n }\n\n return addComparatorMethods(comparator);\n };\n static chain = (comparators) => addComparatorMethods((a, b) => {\n let result;\n for (let i = 0; i < comparators.length; i++) {\n result = comparators[i](a, b);\n if (result !== 0)\n return result;\n }\n return result;\n }\n );\n\n static inverse = (comparator) => addComparatorMethods((a, b) => -comparator(a, b));\n}\n\nconst addComparatorMethods = function (comparator) {\n comparator.inverse = () => Comparators.inverse(comparator);\n comparator.and = (another) => Comparators.chain([comparator, another]);\n return comparator;\n};\n\nif (window.isNotProductionEnvironment) {\n // will be removed in production build\n // needed only to prevent bundler to remove 'unused' functions\n window.tools = {\n memo\n }\n}"],"names":["global","window","WINDOW","DOCUMENT","document","classNames","filtered","length","arguments","i","it","push","join","NOOP","orNoop","f","getRandomId","prefix","Math","random","ref","name","component","refKey","createRef","v","setOf","list","reduce","map","key","allPropsExcept","obj","except","result","continuousIncludes","value","inc","from","indexOf","isArrayShallowEqual","a","b","debounce","func","delay","inDebounce","context","args","clearTimeout","setTimeout","apply","memo","prevArgs","prevResult","typeOf","isFunction","isString","isObject","isDifferent","typeA","typeB","Array","isArray","keysA","Object","keys","keysB","j","r","preventDefault","e","stopPropagation","id","setInterval","clearInterval","requestAnimationFrame","cb","addEventListener","el","type","listener","options","removeEventListener","UNDEFINED","undefined","isUndefined","Comparators","SORT_ASC","SORT_DESC","of","field","order","data","comparator","isOrderArray","chain","collator","Intl","Collator","sensitivity","compare","A","B","inverse","addComparatorMethods","comparators","and","another","isNotProductionEnvironment","tools"],"mappings":";;AAAA,IAAIA,MAAM,GAAGA,MAAM,IAAIC,MAAvB;IACaC,MAAM,GAAGF;IACTG,QAAQ,GAAGD,MAAM,CAACE;AAExB,SAASC,UAAT,GAAsB;AACzB,MAAMC,QAAQ,GAAG,EAAjB;AACA,MAAMC,MAAM,GAAGC,SAAS,CAACD,MAAzB;AACA,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,MAApB,EAA4BE,CAAC,EAA7B,EAAiC;AAC7B,QAAIC,EAAE,GAAGF,SAAS,CAACC,CAAD,CAAlB;AACA,KAAC,CAACC,EAAF,IAAQJ,QAAQ,CAACK,IAAT,CAAcD,EAAd,CAAR;AACH;AACD,SAAOJ,QAAQ,CAACM,IAAT,CAAc,GAAd,CAAP;AACH;IAEYC,IAAI,GAAG,SAAPA,IAAO,GAAM;IAGbC,MAAM,GAAG,SAATA,MAAS,CAAAC,CAAC;AAAA,SAAIA,CAAC,IAAIF,IAAT;AAAA;IAEVG,WAAW,GAAG,SAAdA,WAAc,CAACC,MAAD;AAAA,SAAYA,MAAM,GAAGC,IAAI,CAACC,MAAL,EAArB;AAAA;IAEdC,GAAG,GAAG,SAANA,GAAM,CAACC,IAAD,EAAOC,SAAP,EAAqB;AACpC,MAAMC,MAAM,GAAG,OAAOF,IAAtB;AACA,SAAOC,SAAS,CAACC,MAAD,CAAT,KAAsBD,SAAS,CAACC,MAAD,CAAT,GAAoB,UAACb,EAAD;AAAA,WAAQY,SAAS,CAACD,IAAD,CAAT,GAAkBX,EAA1B;AAAA,GAA1C,CAAP;AACH;IAEYc,SAAS,GAAG,SAAZA,SAAY,GAAM;AAC3B,MAAMJ,GAAG,GAAG,SAANA,GAAM,GAAY;AACpBZ,IAAAA,SAAS,CAACD,MAAV,GAAmB,CAAnB,KAAyBa,GAAG,CAACK,CAAJ,GAAQjB,SAAS,CAAC,CAAD,CAA1C;AACA,WAAOY,GAAG,CAACK,CAAX;AACH,GAHD;AAIA,SAAOL,GAAP;AACH;IAEYM,KAAK,GAAG,SAARA,KAAQ,CAACC,IAAD;AAAA,SAAU,CAACA,IAAI,IAAI,EAAT,EAAaC,MAAb,CAAoB,UAACC,GAAD,EAAMC,GAAN,EAAc;AAC7DD,IAAAA,GAAG,CAACC,GAAD,CAAH,GAAW,IAAX;AACA,WAAOD,GAAP;AACH,GAH8B,EAG5B,EAH4B,CAAV;AAAA;IAKRE,cAAc,GAAG,SAAjBA,cAAiB,CAACC,GAAD,EAAMC,MAAN,EAAiB;AAC3C,MAAIC,MAAM,GAAG,EAAb;AACA,OAAK,IAAIJ,GAAT,IAAgBE,GAAhB,EAAqB;AACjB,QAAI,CAACC,MAAM,CAACH,GAAD,CAAX,EAAkBI,MAAM,CAACJ,GAAD,CAAN,GAAcE,GAAG,CAACF,GAAD,CAAjB;AACrB;AACD,SAAOI,MAAP;AACH;IAEYC,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,KAAD,EAAQC,GAAR,EAAgB;AAC9C,MAAM9B,MAAM,GAAG8B,GAAG,CAAC9B,MAAnB;AACA,MAAI+B,IAAI,GAAG,CAAC,CAAZ;AACA,OAAK,IAAI7B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,MAApB,EAA4BE,CAAC,EAA7B,EAAiC;AAC7B6B,IAAAA,IAAI,GAAGF,KAAK,CAACG,OAAN,CAAcF,GAAG,CAAC5B,CAAD,CAAjB,EAAsB6B,IAAI,GAAG,CAA7B,CAAP;AACA,QAAIA,IAAI,KAAK,CAAC,CAAd,EACI,OAAO,KAAP;AACP;AACD,SAAO,IAAP;AACH;AAED,IAAME,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,CAAD,EAAIC,CAAJ,EAAU;AAClC,MAAID,CAAC,KAAKC,CAAV,EAAa,OAAO,IAAP;AACb,MAAID,CAAC,IAAI,IAAL,IAAaC,CAAC,IAAI,IAAtB,EAA4B,OAAO,KAAP;AAC5B,MAAID,CAAC,CAAClC,MAAF,KAAamC,CAAC,CAACnC,MAAnB,EAA2B;AACvB,WAAO,KAAP;AACH;AACD,MAAIE,CAAC,GAAGgC,CAAC,CAAClC,MAAF,GAAW,CAAnB;AACA,MAAI2B,MAAM,GAAG,IAAb;AACA,SAAOzB,CAAC,IAAI,CAAL,KAAWyB,MAAM,GAAIO,CAAC,CAAChC,CAAD,CAAD,KAASiC,CAAC,CAACjC,CAAD,CAA/B,CAAP,EAA6C;AACzCA,IAAAA,CAAC;AACJ;AACD,SAAOyB,MAAP;AACH,CAZD;IAcaS,QAAQ,GAAG,SAAXA,QAAW,CAACC,IAAD,EAAOC,KAAP,EAAiB;AACrC,MAAIC,UAAJ;AACA,SAAO,YAAY;AACf,QAAMC,OAAO,GAAG,IAAhB;AACA,QAAMC,IAAI,GAAGxC,SAAb;AACAyC,IAAAA,YAAY,CAACH,UAAD,CAAZ;AACAA,IAAAA,UAAU,GAAGI,UAAU,CAAC,YAAM;AAC1BN,MAAAA,IAAI,CAACO,KAAL,CAAWJ,OAAX,EAAoBC,IAApB;AACH,KAFsB,EAEpBH,KAFoB,CAAvB;AAGH,GAPD;AAQH;IAEYO,IAAI,GAAG,SAAPA,IAAO,CAACR,IAAD,EAAU;AAC1B,MAAIS,QAAJ;AACA,MAAIC,UAAJ;AACA,SAAO,YAAY;AACf,QAAMP,OAAO,GAAG,IAAhB;AACA,QAAMC,IAAI,GAAGxC,SAAb;AACA,QAAI,CAACgC,mBAAmB,CAACa,QAAD,EAAWL,IAAX,CAAxB,EAA0C;AACtCK,MAAAA,QAAQ,GAAGL,IAAX;AACAM,MAAAA,UAAU,GAAGV,IAAI,CAACO,KAAL,CAAWJ,OAAX,EAAoBC,IAApB,CAAb;AACH;AACD,WAAOM,UAAP;AACH,GARD;AASH;IAEYC,MAAM,GAAG,SAATA,MAAS,CAAC9B,CAAD;AAAA,iBAAcA,CAAd;AAAA;IACT+B,UAAU,GAAG,SAAbA,UAAa,CAAC/B,CAAD;AAAA,SAAO8B,MAAM,CAAC9B,CAAD,CAAN,KAAc,UAArB;AAAA;IACbgC,QAAQ,GAAG,SAAXA,QAAW,CAAChC,CAAD;AAAA,SAAO8B,MAAM,CAAC9B,CAAD,CAAN,KAAc,QAArB;AAAA;IACXiC,QAAQ,GAAG,SAAXA,QAAW,CAACjC,CAAD;AAAA,SAAO8B,MAAM,CAAC9B,CAAD,CAAN,KAAc,QAArB;AAAA;IAEXkC,WAAW,GAAG,SAAdA,WAAc,CAAClB,CAAD,EAAIC,CAAJ,EAAU;AACjC,MAAID,CAAC,IAAI,IAAL,IAAaC,CAAC,IAAI,IAAtB,EAA4B,OAAO,KAAP;AAC5B,MAAID,CAAC,IAAI,IAAL,IAAaC,CAAC,IAAI,IAAtB,EAA4B,OAAO,IAAP;AAC5B,MAAID,CAAC,KAAKC,CAAV,EAAa,OAAO,KAAP;AAEb,MAAMkB,KAAK,GAAGL,MAAM,CAACd,CAAD,CAApB;AACA,MAAMoB,KAAK,GAAGN,MAAM,CAACb,CAAD,CAApB;AACA,MAAIkB,KAAK,KAAKC,KAAd,EAAqB;AACjB,WAAO,IAAP;AACH;AAED,MAAIC,KAAK,CAACC,OAAN,CAActB,CAAd,CAAJ,EAAsB;AAClB,QAAIA,CAAC,CAAClC,MAAF,KAAamC,CAAC,CAACnC,MAAnB,EAA2B;AACvB,aAAO,IAAP;AACH;AACD,QAAIE,CAAC,GAAGgC,CAAC,CAAClC,MAAF,GAAW,CAAnB;AACA,QAAI2B,MAAM,GAAG,KAAb;AACA,WAAOzB,CAAC,IAAI,CAAL,IAAU,EAAEyB,MAAM,GAAGyB,WAAW,CAAClB,CAAC,CAAChC,CAAD,CAAF,EAAOiC,CAAC,CAACjC,CAAD,CAAR,CAAtB,CAAjB,EAAsD;AAClDA,MAAAA,CAAC;AACJ;AACD,WAAOyB,MAAP;AACH;AAED,MAAI0B,KAAK,KAAK,QAAd,EAAwB;AACpB,QAAMI,KAAK,GAAGC,MAAM,CAACC,IAAP,CAAYzB,CAAZ,CAAd;AACA,QAAM0B,KAAK,GAAGF,MAAM,CAACC,IAAP,CAAYxB,CAAZ,CAAd;AACA,QAAIsB,KAAK,CAACzD,MAAN,KAAiB4D,KAAK,CAAC5D,MAA3B,EAAmC;AAC/B,aAAO,IAAP;AACH;AAED,QAAI6D,CAAC,GAAGJ,KAAK,CAACzD,MAAN,GAAe,CAAvB;AACA,QAAI8D,CAAC,GAAG,KAAR;AACA,WAAOD,CAAC,IAAI,CAAL,IAAU,EAAEC,CAAC,GAAGL,KAAK,CAACI,CAAD,CAAL,KAAaD,KAAK,CAACC,CAAD,CAAxB,CAAV,IAA0C,EAAEC,CAAC,GAAGV,WAAW,CAAClB,CAAC,CAACuB,KAAK,CAACI,CAAD,CAAN,CAAF,EAAc1B,CAAC,CAACyB,KAAK,CAACC,CAAD,CAAN,CAAf,CAAjB,CAAjD,EAA+F;AAC3FA,MAAAA,CAAC;AACJ;AACD,WAAOC,CAAP;AACH;AAED,SAAO,IAAP;AACH;IAEYC,cAAc,GAAG,SAAjBA,cAAiB,CAAAC,CAAC,EAAI;AAC/BA,EAAAA,CAAC,IAAIA,CAAC,CAACD,cAAF,EAAL;AACH;IACYE,eAAe,GAAG,SAAlBA,eAAkB,CAAAD,CAAC,EAAI;AAChCA,EAAAA,CAAC,IAAIA,CAAC,CAACC,eAAF,EAAL;AACH;IAEYtB,UAAU,GAAG,SAAbA,UAAa,GAAY;AAClC,SAAOhD,MAAM,CAACgD,UAAP,CAAkBC,KAAlB,CAAwBjD,MAAxB,EAAgCM,SAAhC,CAAP;AACH;IACYyC,YAAY,GAAG,SAAfA,YAAe,CAACwB,EAAD,EAAQ;AAChCvE,EAAAA,MAAM,CAAC+C,YAAP,CAAoBwB,EAApB;AACH;IACYC,WAAW,GAAG,SAAdA,WAAc,GAAY;AACnC,SAAOxE,MAAM,CAACwE,WAAP,CAAmBvB,KAAnB,CAAyBjD,MAAzB,EAAiCM,SAAjC,CAAP;AACH;IACYmE,aAAa,GAAG,SAAhBA,aAAgB,CAACF,EAAD,EAAQ;AACjCvE,EAAAA,MAAM,CAACyE,aAAP,CAAqBF,EAArB;AACH;IACYG,qBAAqB,GAAG,SAAxBA,qBAAwB,CAACC,EAAD;AAAA,SAAQ3E,MAAM,CAAC0E,qBAAP,CAA6BC,EAA7B,CAAR;AAAA;IACxBC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,EAAD,EAAKC,IAAL,EAAWC,QAAX,EAAqBC,OAArB,EAAiC;AAC7DH,EAAAA,EAAE,IAAIA,EAAE,CAACD,gBAAH,CAAoBE,IAApB,EAA0BC,QAA1B,EAAoCC,OAApC,CAAN;AACH;IACYC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACJ,EAAD,EAAKC,IAAL,EAAWC,QAAX,EAAqBC,OAArB,EAAiC;AAChEH,EAAAA,EAAE,IAAIA,EAAE,CAACI,mBAAH,CAAuBH,IAAvB,EAA6BC,QAA7B,EAAuCC,OAAvC,CAAN;AACH;IAEYE,SAAS,GAAGC;IACZC,WAAW,GAAG,SAAdA,WAAc,CAAA7C,CAAC;AAAA,SAAIA,CAAC,KAAK2C,SAAV;AAAA;IAGfG,WAAb;AAAA;AAAA;AAAaA,YACFC,WAAW;AADTD,YAEFE,YAAY;AAFVF,YAIFG,KAAK,UAACC,KAAD,EAAQC,KAAR,EAAeC,IAAf,EAAwB;AAChC,MAAIC,UAAJ;AACA,MAAIhC,KAAK,CAACC,OAAN,CAAc4B,KAAd,CAAJ,EAA0B;AACtB,QAAMI,YAAY,GAAGjC,KAAK,CAACC,OAAN,CAAc6B,KAAd,CAArB;AACAE,IAAAA,UAAU,GAAGP,WAAW,CAACS,KAAZ,CAAkBL,KAAK,CAAC9D,GAAN,CAAU,UAACnB,EAAD,EAAKD,CAAL;AAAA,aAAW8E,WAAW,CAACG,EAAZ,CAAehF,EAAf,EAAoBqF,YAAY,IAAIH,KAAK,CAACnF,CAAD,CAAtB,IAA8B8E,WAAW,CAACC,QAA7D,EAAuEK,IAAvE,CAAX;AAAA,KAAV,CAAlB,CAAb;AACH,GAHD,MAGO,IAAIrC,UAAU,CAACmC,KAAD,CAAd,EAAuB;AAC1B,QAAIE,IAAI,IAAIA,IAAI,CAAC,CAAD,CAAZ,IAAmBpC,QAAQ,CAACkC,KAAK,CAACE,IAAI,CAAC,CAAD,CAAL,CAAN,CAA/B,EAAiD;AAC7C,UAAMI,QAAQ,GAAG,IAAIC,IAAI,CAACC,QAAT,CAAkB;AAACC,QAAAA,WAAW,EAAE;AAAd,OAAlB,CAAjB;AACAN,MAAAA,UAAU,GAAG,oBAACrD,CAAD,EAAIC,CAAJ,EAAU;AACnB,eAAOuD,QAAQ,CAACI,OAAT,CAAiBV,KAAK,CAAClD,CAAD,CAAtB,EAA2BkD,KAAK,CAACjD,CAAD,CAAhC,CAAP;AACH,OAFD;AAGH,KALD,MAMIoD,UAAU,GAAG,oBAACrD,CAAD,EAAIC,CAAJ,EAAU;AACnB,UAAM4D,CAAC,GAAGX,KAAK,CAAClD,CAAD,CAAf;AACA,UAAM8D,CAAC,GAAGZ,KAAK,CAACjD,CAAD,CAAf;AACA,aAAQ4D,CAAC,GAAGC,CAAJ,GAAQ,CAAC,CAAT,GAAcD,CAAC,GAAGC,CAAJ,GAAQ,CAAR,GAAY,CAAlC;AACH,KAJD;AAKP,GAZM,MAYA,IAAI9C,QAAQ,CAACkC,KAAD,CAAZ,EACHG,UAAU,GAAGP,WAAW,CAACG,EAAZ,CAAe,UAAAhF,EAAE;AAAA,WAAIA,EAAE,CAACiF,KAAD,CAAN;AAAA,GAAjB,EAAgCJ,WAAW,CAACC,QAA5C,EAAsDK,IAAtD,CAAb,CADG,KAGHC,UAAU,GAAGP,WAAW,CAACG,EAAZ,CAAe,UAAAhF,EAAE;AAAA,WAAIA,EAAJ;AAAA,GAAjB,EAAyB6E,WAAW,CAACC,QAArC,EAA+CK,IAA/C,CAAb;AAEJ,MAAID,KAAK,IAAIA,KAAK,KAAKL,WAAW,CAACE,SAAnC,EAA8C;AAC1C,WAAOF,WAAW,CAACiB,OAAZ,CAAoBV,UAApB,CAAP;AACH;AAED,SAAOW,oBAAoB,CAACX,UAAD,CAA3B;AACH;AA/BQP,YAgCFS,QAAQ,UAACU,WAAD;AAAA,SAAiBD,oBAAoB,CAAC,UAAChE,CAAD,EAAIC,CAAJ,EAAU;AACvD,QAAIR,MAAJ;AACA,SAAK,IAAIzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiG,WAAW,CAACnG,MAAhC,EAAwCE,CAAC,EAAzC,EAA6C;AACzCyB,MAAAA,MAAM,GAAGwE,WAAW,CAACjG,CAAD,CAAX,CAAegC,CAAf,EAAkBC,CAAlB,CAAT;AACA,UAAIR,MAAM,KAAK,CAAf,EACI,OAAOA,MAAP;AACP;AACD,WAAOA,MAAP;AACH,GAR+C,CAArC;AAAA;AAhCNqD,YA2CFiB,UAAU,UAACV,UAAD;AAAA,SAAgBW,oBAAoB,CAAC,UAAChE,CAAD,EAAIC,CAAJ;AAAA,WAAU,CAACoD,UAAU,CAACrD,CAAD,EAAIC,CAAJ,CAArB;AAAA,GAAD,CAApC;AAAA;AAGrB,IAAM+D,oBAAoB,GAAG,SAAvBA,oBAAuB,CAAUX,UAAV,EAAsB;AAC/CA,EAAAA,UAAU,CAACU,OAAX,GAAqB;AAAA,WAAMjB,WAAW,CAACiB,OAAZ,CAAoBV,UAApB,CAAN;AAAA,GAArB;AACAA,EAAAA,UAAU,CAACa,GAAX,GAAiB,UAACC,OAAD;AAAA,WAAarB,WAAW,CAACS,KAAZ,CAAkB,CAACF,UAAD,EAAac,OAAb,CAAlB,CAAb;AAAA,GAAjB;AACA,SAAOd,UAAP;AACH,CAJD;AAMA,IAAI7F,MAAM,CAAC4G,0BAAX,EAAuC;AAGnC5G,EAAAA,MAAM,CAAC6G,KAAP,GAAe;AACX1D,IAAAA,IAAI,EAAJA;AADW,GAAf;AAGH;;;;"}