@skbkontur/react-ui 3.9.2 → 3.9.3
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 +15 -0
- package/cjs/components/Button/Button.d.ts +3 -0
- package/cjs/components/Button/Button.js +8 -1
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.d.ts +0 -1
- package/cjs/components/Checkbox/Checkbox.js +21 -18
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/CurrencyInput/CurrencyInput.d.ts +2 -1
- package/cjs/components/CurrencyInput/CurrencyInput.js +29 -1
- package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +4 -0
- package/cjs/components/Input/Input.js +9 -0
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Radio/Radio.js +4 -1
- package/cjs/components/Radio/Radio.js.map +1 -1
- package/cjs/components/Select/Select.js +3 -2
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePage.d.ts +1 -0
- package/cjs/components/SidePage/SidePage.js +3 -1
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/lib/events/fixFirefoxModifiedClickOnLabel.d.ts +2 -0
- package/cjs/lib/events/fixFirefoxModifiedClickOnLabel.js +20 -0
- package/cjs/lib/events/fixFirefoxModifiedClickOnLabel.js.map +1 -0
- package/cjs/lib/getDisplayName.d.ts +3 -0
- package/cjs/lib/getDisplayName.js +9 -0
- package/cjs/lib/getDisplayName.js.map +1 -0
- package/cjs/lib/withClassWrapper.d.ts +68 -0
- package/cjs/lib/withClassWrapper.js +59 -0
- package/cjs/lib/withClassWrapper.js.map +1 -0
- package/components/Button/Button/Button.js +10 -0
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +3 -0
- package/components/Checkbox/Checkbox/Checkbox.js +18 -20
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +0 -1
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +34 -1
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
- package/components/CurrencyInput/CurrencyInput.d.ts +2 -1
- package/components/Input/Input/Input.js +8 -0
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +4 -0
- package/components/Radio/Radio/Radio.js +4 -1
- package/components/Radio/Radio/Radio.js.map +1 -1
- package/components/Select/Select/Select.js +6 -1
- package/components/Select/Select/Select.js.map +1 -1
- package/components/SidePage/SidePage/SidePage.js +2 -0
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/SidePage/SidePage.d.ts +1 -0
- package/lib/events/fixFirefoxModifiedClickOnLabel/fixFirefoxModifiedClickOnLabel.js +19 -0
- package/lib/events/fixFirefoxModifiedClickOnLabel/fixFirefoxModifiedClickOnLabel.js.map +1 -0
- package/lib/events/fixFirefoxModifiedClickOnLabel/package.json +6 -0
- package/lib/events/fixFirefoxModifiedClickOnLabel.d.ts +2 -0
- package/lib/getDisplayName/getDisplayName.js +3 -0
- package/lib/getDisplayName/getDisplayName.js.map +1 -0
- package/lib/getDisplayName/package.json +6 -0
- package/lib/getDisplayName.d.ts +3 -0
- package/lib/withClassWrapper/package.json +6 -0
- package/lib/withClassWrapper/withClassWrapper.js +70 -0
- package/lib/withClassWrapper/withClassWrapper.js.map +1 -0
- package/lib/withClassWrapper.d.ts +68 -0
- package/package.json +4 -2
|
@@ -210,9 +210,13 @@ export var Select = (_dec = locale('Select', SelectLocaleHelper), _dec(_class =
|
|
|
210
210
|
};
|
|
211
211
|
|
|
212
212
|
_this.handleSearch = function (value) {
|
|
213
|
+
var _this$menu;
|
|
214
|
+
|
|
213
215
|
_this.setState({
|
|
214
216
|
searchPattern: value
|
|
215
217
|
});
|
|
218
|
+
|
|
219
|
+
(_this$menu = _this.menu) == null ? void 0 : _this$menu.highlightItem(1);
|
|
216
220
|
};
|
|
217
221
|
|
|
218
222
|
_this.buttonRef = function (element) {
|
|
@@ -374,7 +378,8 @@ export var Select = (_dec = locale('Select', SelectLocaleHelper), _dec(_class =
|
|
|
374
378
|
var _this4 = this;
|
|
375
379
|
|
|
376
380
|
var search = this.props.search ? /*#__PURE__*/React.createElement("div", {
|
|
377
|
-
className: styles.search()
|
|
381
|
+
className: styles.search(),
|
|
382
|
+
onKeyDown: this.handleKey
|
|
378
383
|
}, /*#__PURE__*/React.createElement(Input, {
|
|
379
384
|
ref: this.focusInput,
|
|
380
385
|
onValueChange: this.handleSearch,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Select.tsx"],"names":["React","PropTypes","ReactDOM","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","ThemeContext","CommonWrapper","ArrowChevronDownIcon","cx","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","state","opened","value","props","defaultValue","searchPattern","theme","menu","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","dropdownContainerGetParent","findDOMNode","focusInput","input","setTimeout","refMenu","toggle","handleKey","e","preventDefault","up","down","enter","onKeyDown","handleSearch","buttonRef","element","getButton","buttonParams","button","_renderButton","renderDefaultButton","Children","only","isValidElement","cloneElement","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","renderMain","renderLabel","label","isPlaceholder","onClick","style","width","maxWidth","undefined","root","renderMenu","getValue","item","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","search","menuAlign","disablePortal","menuWidth","maxMenuHeight","mapItems","iValue","i","comment","key","areValuesEqual","select","bind","renderItem","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","func","any","bool","oneOfType","array","object","number","string","node","SEP","value1","value2","Array","isArray","toString","indexOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private renderMain() {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const button = this.getButton(buttonParams);\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active={this.state.opened}>\n <span className={styles.root()} style={style}>\n {button}\n {!this.props.disabled && this.state.opened && this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n >\n {search}\n {this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n )}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private dropdownContainerGetParent = () => {\n return ReactDOM.findDOMNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNodeArray = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Select.tsx"],"names":["React","PropTypes","ReactDOM","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","ThemeContext","CommonWrapper","ArrowChevronDownIcon","cx","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","state","opened","value","props","defaultValue","searchPattern","theme","menu","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","dropdownContainerGetParent","findDOMNode","focusInput","input","setTimeout","refMenu","toggle","handleKey","e","preventDefault","up","down","enter","onKeyDown","handleSearch","highlightItem","buttonRef","element","getButton","buttonParams","button","_renderButton","renderDefaultButton","Children","only","isValidElement","cloneElement","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","renderMain","renderLabel","label","isPlaceholder","onClick","style","width","maxWidth","undefined","root","renderMenu","getValue","item","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","search","menuAlign","disablePortal","menuWidth","maxMenuHeight","mapItems","iValue","i","comment","key","areValuesEqual","select","bind","renderItem","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","func","any","bool","oneOfType","array","object","number","string","node","SEP","value1","value2","Array","isArray","toString","indexOf"],"mappings":"84CAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,QAAP,MAAqB,WAArB;AACA,OAAOC,SAAP,MAAsB,WAAtB;;AAEA;AACEC,cADF;AAEEC,YAFF;AAGEC,kBAHF;AAIEC,UAJF;AAKEC,WALF;AAMEC,UANF;AAOO,uCAPP;AAQA,SAASC,MAAT,QAAuB,6BAAvB;AACA,SAASC,mBAAT,QAAoC,+BAApC;AACA,SAASC,MAAT,QAA2D,WAA3D;AACA,SAASC,iBAAT,QAAkC,kCAAlC;AACA,SAASC,WAAT,QAA4B,uBAA5B;AACA,SAASC,KAAT,QAAsB,UAAtB;AACA,SAASC,IAAT,QAAqB,qBAArB;AACA,SAASC,QAAT,QAAyB,aAAzB;AACA,SAASC,aAAT,QAA8B,kBAA9B;AACA,SAASC,WAAT,QAA4B,4BAA5B;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;AAEA,SAASC,UAAT,QAA2B,iBAA3B;AACA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAAsBC,aAAtB,QAA2C,8BAA3C;AACA,SAASC,oBAAT,QAAqC,2BAArC;AACA,SAASC,EAAT,QAAmB,2BAAnB;;AAEA,SAASC,IAAT,QAAqB,QAArB;AACA,SAAuBC,kBAAvB,QAAiD,UAAjD;AACA,SAASC,MAAT,QAAuB,iBAAvB;AACA,SAASC,cAAT,QAA+B,eAA/B;;;;;;;;;;;AAWA,IAAMC,iBAAiB,GAAG;AACxBC,EAAAA,QAAQ,EAAE,IADc;AAExBC,EAAAA,KAAK,EAAE,IAFiB;AAGxBC,EAAAA,GAAG,EAAE,IAHmB;AAIxBC,EAAAA,IAAI,EAAE,IAJkB;AAKxBC,EAAAA,OAAO,EAAE,IALe;;AAOxBC,EAAAA,YAAY,EAAE,IAPU;AAQxBC,EAAAA,YAAY,EAAE,IARU;AASxBC,EAAAA,WAAW,EAAE,IATW,EAA1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyGA,WAAaC,MAAb,WADC7B,MAAM,CAAC,QAAD,EAAWiB,kBAAX,CACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CSa,IAAAA,KA7CT,GA6CsC;AAClCC,MAAAA,MAAM,EAAE,KAD0B;AAElCC,MAAAA,KAAK,EAAE,MAAKC,KAAL,CAAWC,YAFgB;AAGlCC,MAAAA,aAAa,EAAE,EAHmB,EA7CtC;;;AAmDUC,IAAAA,KAnDV;AAoDmBpC,IAAAA,MApDnB;AAqDUqC,IAAAA,IArDV;AAsDUC,IAAAA,aAtDV,GAsDwD,IAtDxD;AAuDUC,IAAAA,QAvDV,GAuDqB7B,iBAAiB,CAACmB,MAAM,CAACW,YAAR,CAvDtC;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkFSC,IAAAA,IAlFT,GAkFgB,YAAM;AAClB,UAAI,CAAC,MAAKX,KAAL,CAAWC,MAAhB,EAAwB;AACtB,cAAKW,QAAL,CAAc,EAAEX,MAAM,EAAE,IAAV,EAAd;;AAEA,YAAI,MAAKE,KAAL,CAAWU,MAAf,EAAuB;AACrB,gBAAKV,KAAL,CAAWU,MAAX;AACD;AACF;AACF,KA1FH;;;;;AA+FSC,IAAAA,KA/FT,GA+FiB,YAAM;AACnB,UAAI,MAAKd,KAAL,CAAWC,MAAf,EAAuB;AACrB,cAAKW,QAAL,CAAc,EAAEX,MAAM,EAAE,KAAV,EAAiBI,aAAa,EAAE,EAAhC,EAAd;;AAEA,YAAI,MAAKF,KAAL,CAAWY,OAAf,EAAwB;AACtB,gBAAKZ,KAAL,CAAWY,OAAX;AACD;AACF;AACF,KAvGH;;;;;AA4GSC,IAAAA,KA5GT,GA4GiB,YAAM;AACnB,UAAI,MAAKR,aAAL,IAAsB,MAAKA,aAAL,CAAmBQ,KAA7C,EAAoD;AAClD,cAAKR,aAAL,CAAmBQ,KAAnB;AACD;AACF,KAhHH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsSUC,IAAAA,0BAtSV,GAsSuC,YAAM;AACzC,aAAOvD,QAAQ,CAACwD,WAAT,+BAAP;AACD,KAxSH;;AA0SUC,IAAAA,UA1SV,GA0SuB,UAACC,KAAD,EAAkB;AACrC;AACAC,MAAAA,UAAU,CAAC,oBAAMD,KAAN,oBAAMA,KAAK,CAAEJ,KAAP,EAAN,EAAD,EAAuB,CAAvB,CAAV;AACD,KA7SH;;AA+SUM,IAAAA,OA/SV,GA+SoB,UAACf,IAAD,EAAgB;AAChC,YAAKA,IAAL,GAAYA,IAAZ;AACD,KAjTH;;AAmTUgB,IAAAA,MAnTV,GAmTmB,YAAM;AACrB,UAAI,MAAKvB,KAAL,CAAWC,MAAf,EAAuB;AACrB,cAAKa,KAAL;AACD,OAFD,MAEO;AACL,cAAKH,IAAL;AACD;AACF,KAzTH;;AA2TUa,IAAAA,SA3TV,GA2TsB,UAACC,CAAD,EAAyC;AAC3D,UAAI,CAAC,MAAKzB,KAAL,CAAWC,MAAhB,EAAwB;AACtB,YAAIhC,UAAU,CAACwD,CAAD,CAAV,IAAiB3D,kBAAkB,CAAC2D,CAAD,CAAvC,EAA4C;AAC1CA,UAAAA,CAAC,CAACC,cAAF;AACA,gBAAKf,IAAL;AACD;AACF,OALD,MAKO;AACL,gBAAQ,IAAR;AACE,eAAK3C,WAAW,CAACyD,CAAD,CAAhB;AACE,kBAAKT,KAAL;AACA,kBAAKF,KAAL;AACA;AACF,eAAKjD,YAAY,CAAC4D,CAAD,CAAjB;AACEA,YAAAA,CAAC,CAACC,cAAF;AACA,gBAAI,MAAKnB,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUoB,EAAV;AACD;AACD;AACF,eAAK/D,cAAc,CAAC6D,CAAD,CAAnB;AACEA,YAAAA,CAAC,CAACC,cAAF;AACA,gBAAI,MAAKnB,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUqB,IAAV;AACD;AACD;AACF,eAAK7D,UAAU,CAAC0D,CAAD,CAAf;AACEA,YAAAA,CAAC,CAACC,cAAF,GADF,CACsB;AACpB,gBAAI,MAAKnB,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUsB,KAAV,CAAgBJ,CAAhB;AACD;AACD,kBAtBJ;;AAwBD;AACD,UAAI,MAAKtB,KAAL,CAAW2B,SAAf,EAA0B;AACxB,cAAK3B,KAAL,CAAW2B,SAAX,CAAqBL,CAArB;AACD;AACF,KA9VH;;AAgWUM,IAAAA,YAhWV,GAgWyB,UAAC7B,KAAD,EAAmB;AACxC,YAAKU,QAAL,CAAc,EAAEP,aAAa,EAAEH,KAAjB,EAAd;AACA,0BAAKK,IAAL,gCAAWyB,aAAX,CAAyB,CAAzB;AACD,KAnWH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2ZUC,IAAAA,SA3ZV,GA2ZsB,UAACC,OAAD,EAA2C;AAC7D,YAAK1B,aAAL,GAAqB0B,OAArB;AACD,KA7ZH;;AA+ZUC,IAAAA,SA/ZV,GA+ZsB,UAACC,YAAD,EAAgC;AAClD,UAAMC,MAAM,GAAG,MAAKlC,KAAL,CAAWmC,aAAX;AACX,YAAKnC,KAAL,CAAWmC,aAAX,CAAyBF,YAAzB,CADW;AAEX,YAAKG,mBAAL,CAAyBH,YAAzB,CAFJ;;AAIA,UAAM5B,aAAa,GAAGhD,KAAK,CAACgF,QAAN,CAAeC,IAAf,CAAoBJ,MAApB,CAAtB;;AAEA,aAAO,aAAA7E,KAAK,CAACkF,cAAN,CAAqBlC,aAArB;AACHhD,MAAAA,KAAK,CAACmF,YAAN,CAAmBnC,aAAnB,EAAwD;AACtDoC,QAAAA,GAAG,EAAE,MAAKX,SAD4C;AAEtDY,QAAAA,OAAO,EAAE,MAAK1C,KAAL,CAAW0C,OAFkC;AAGtDC,QAAAA,MAAM,EAAE,MAAK3C,KAAL,CAAW2C,MAHmC,EAAxD,CADG;;AAMHtC,MAAAA,aANJ;AAOD,KA7aH,oDAyDSuC,kBAzDT,GAyDE,4BAA0BC,UAA1B,EAAkEC,SAAlE,EAAkG,CAChG,IAAI,CAACA,SAAS,CAAChD,MAAX,IAAqB,KAAKD,KAAL,CAAWC,MAApC,EAA4C,CAC1CiD,MAAM,CAACC,gBAAP,CAAwB,UAAxB,EAAoC,KAAKrC,KAAzC,EACD,CACD,IAAImC,SAAS,CAAChD,MAAV,IAAoB,CAAC,KAAKD,KAAL,CAAWC,MAApC,EAA4C,CAC1CiD,MAAM,CAACE,mBAAP,CAA2B,UAA3B,EAAuC,KAAKtC,KAA5C,EACD,CACF,CAhEH,QAkESuC,MAlET,GAkEE,kBAAgB,mBACd,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAAC/C,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,oBACE,oBAAC,YAAD,CAAc,QAAd,IAAuB,KAAK,EAAEjB,cAAc,CAACiB,KAAD,EAAQ,MAAI,CAACH,KAAb,CAA5C,IAAkE,MAAI,CAACmD,UAAL,EAAlE,CADF,CAGD,CANH,CADF,CAUD,CA7EH,CA+EE;AACF;AACA,KAjFA,QAkHUA,UAlHV,GAkHE,sBAAqB,yBACc,KAAKC,WAAL,EADd,CACXC,KADW,qBACXA,KADW,CACJC,aADI,qBACJA,aADI,CAGnB,IAAMrB,YAA0B,GAAG,EACjCnC,MAAM,EAAE,KAAKD,KAAL,CAAWC,MADc,EAEjCuD,KAAK,EAALA,KAFiC,EAGjCC,aAAa,EAAbA,aAHiC,EAIjCC,OAAO,EAAE,KAAKnC,MAJmB,EAKjCO,SAAS,EAAE,KAAKN,SALiB,EAAnC,CAQA,IAAMmC,KAAK,GAAG,EACZC,KAAK,EAAE,KAAKzD,KAAL,CAAWyD,KADN,EAEZC,QAAQ,EAAE,KAAK1D,KAAL,CAAW0D,QAAX,IAAuBC,SAFrB,EAAd,CAKA,IAAMzB,MAAM,GAAG,KAAKF,SAAL,CAAeC,YAAf,CAAf,CAEA,oBACE,oBAAC,aAAD,EAAmB,KAAKjC,KAAxB,eACE,oBAAC,WAAD,IAAa,cAAc,EAAE,KAAKW,KAAlC,EAAyC,cAAc,EAAE,KAAKA,KAA9D,EAAqE,MAAM,EAAE,KAAKd,KAAL,CAAWC,MAAxF,iBACE,8BAAM,SAAS,EAAEb,MAAM,CAAC2E,IAAP,EAAjB,EAAgC,KAAK,EAAEJ,KAAvC,IACGtB,MADH,EAEG,CAAC,KAAKlC,KAAL,CAAWZ,QAAZ,IAAwB,KAAKS,KAAL,CAAWC,MAAnC,IAA6C,KAAK+D,UAAL,EAFhD,CADF,CADF,CADF,CAUD,CA9IH,QAgJUT,WAhJV,GAgJE,uBAAsB,CACpB,IAAMrD,KAAK,GAAG,KAAK+D,QAAL,EAAd,CACA,IAAMC,IAAI,GAAG,KAAKC,cAAL,CAAoBjE,KAApB,CAAb,CAEA,IAAIgE,IAAI,IAAI,IAAR,IAAgBhE,KAAK,IAAI,IAA7B,EAAmC,CACjC,OAAO,EACLsD,KAAK,EAAE,KAAK/C,QAAL,GAAgB2D,WAAhB,CAA4BlE,KAA5B,EAAmCgE,IAAnC,CADF,EAELT,aAAa,EAAE,KAFV,EAAP,CAID,CAED,OAAO,EACLD,KAAK,eAAE,kCAAO,KAAKrD,KAAL,CAAWkE,WAAX,IAA0B,KAAKnG,MAAL,CAAYmG,WAA7C,CADF,EAELZ,aAAa,EAAE,IAFV,EAAP,CAID,CA/JH,QAiKUa,gBAjKV,GAiKE,0BAAyB5E,IAAzB,EAAuD,CACrD,IAAI,KAAKS,KAAL,CAAWV,GAAX,KAAmB,MAAvB,EAA+B,CAC7B,OAAOL,MAAM,CAACmF,YAAP,CAAoB,KAAKjE,KAAzB,CAAP,CACD,CAED,QAAQZ,IAAR,GACE,KAAK,OAAL,CACE,OAAON,MAAM,CAACoF,aAAP,CAAqB,KAAKlE,KAA1B,CAAP,CACF,KAAK,QAAL,CACE,OAAOlB,MAAM,CAACqF,cAAP,CAAsB,KAAKnE,KAA3B,CAAP,CACF,KAAK,OAAL,CACA,QACE,OAAOlB,MAAM,CAACsF,aAAP,CAAqB,KAAKpE,KAA1B,CAAP,CAPJ,CASD,CA/KH,QAiLUiC,mBAjLV,GAiLE,6BAA4BoC,MAA5B,EAAkD,eAChD,IAAMC,WAAwB,gBACzBtG,WAAW,CAAC,KAAK6B,KAAN,EAAab,iBAAb,CADc,IAE5BuF,KAAK,EAAE,MAFqB,EAG5BtF,QAAQ,EAAE,KAAKY,KAAL,CAAWZ,QAHO,EAI5BqE,KAAK,EAAE,MAJqB,EAK5BF,OAAO,EAAEiB,MAAM,CAACjB,OALY,EAM5B5B,SAAS,EAAE6C,MAAM,CAAC7C,SANU,EAO5BgD,MAAM,EAAEH,MAAM,CAAC1E,MAPa,GAA9B,CAUA,IAAM8E,UAAU,GAAG,EACjBC,SAAS,EAAE/F,EAAE,gBACVG,MAAM,CAACoE,KAAP,EADU,IACO,KAAKrD,KAAL,CAAWV,GAAX,KAAmB,MAD1B,MAEVL,MAAM,CAACiF,WAAP,CAAmB,KAAK/D,KAAxB,CAFU,IAEuBqE,MAAM,CAAClB,aAF9B,MAGVrE,MAAM,CAAC6F,oBAAP,EAHU,IAGsBN,MAAM,CAAClB,aAAP,IAAwB,KAAKtD,KAAL,CAAWV,GAAX,KAAmB,SAHjE,MAIVL,MAAM,CAAC8F,mBAAP,CAA2B,KAAK5E,KAAhC,CAJU,IAI+BqE,MAAM,CAAClB,aAAP,IAAwB,KAAKtD,KAAL,CAAWZ,QAJlE,OADI,EAOjBoE,KAAK,EAAE,EACLwB,YAAY,EAAE,KAAKC,gBAAL,EADT,EAPU,EAAnB,CAYA,IAAMC,WAAW,GAAG,KAAKlF,KAAL,CAAWV,GAAX,KAAmB,SAAvC,CAEA,oBACE,oBAAC,MAAD,EAAYmF,WAAZ,eACE,6BAAK,SAAS,EAAExF,MAAM,CAACkG,qBAAP,EAAhB,IACG,KAAKnF,KAAL,CAAWoF,KAAX,iBAAoB,6BAAK,SAAS,EAAE,KAAKjB,gBAAL,CAAsB,KAAKnE,KAAL,CAAWT,IAAjC,CAAhB,IAAyD,KAAKS,KAAL,CAAWoF,KAApE,CADvB,eAEE,4BAAUR,UAAV,EAAuBJ,MAAM,CAACnB,KAA9B,CAFF,eAIE,6BACE,SAAS,EAAEvE,EAAE,CAACG,MAAM,CAACoG,SAAP,CAAiB,KAAKlF,KAAtB,CAAD,mBACVlB,MAAM,CAACqG,aAAP,CAAqB,KAAKnF,KAA1B,CADU,IACyB,KAAKH,KAAL,CAAWZ,QADpC,OAEVH,MAAM,CAACsG,cAAP,EAFU,IAEgBL,WAFhB,QADf,iBAME,oBAAC,oBAAD,OANF,CAJF,CADF,CADF,CAiBD,CA3NH,QA6NUD,gBA7NV,GA6NE,4BAAmC,mBACjC,IAAMO,eAAe,GAAG,SAAlBA,eAAkB,GAAM,CAC5B,QAAQ,MAAI,CAACxF,KAAL,CAAWT,IAAnB,GACE,KAAK,OAAL,CACE,OAAO,MAAI,CAACY,KAAL,CAAWsF,kBAAlB,CACF,KAAK,QAAL,CACE,OAAO,MAAI,CAACtF,KAAL,CAAWuF,mBAAlB,CACF,KAAK,OAAL,CACA,QACE,OAAO,MAAI,CAACvF,KAAL,CAAWwF,kBAAlB,CAPJ,CASD,CAVD,CAWA,IAAMC,gBAAgB,GAAGC,UAAU,CAACL,eAAe,EAAhB,CAAV,IAAiC,CAA1D,CAEA,OAAOI,gBAAP,CACD,CA5OH,QA8OU/B,UA9OV,GA8OE,sBAAsC,mBACpC,IAAMiC,MAAM,GAAG,KAAK9F,KAAL,CAAW8F,MAAX,gBACb,6BAAK,SAAS,EAAE7G,MAAM,CAAC6G,MAAP,EAAhB,EAAiC,SAAS,EAAE,KAAKzE,SAAjD,iBACE,oBAAC,KAAD,IAAO,GAAG,EAAE,KAAKL,UAAjB,EAA6B,aAAa,EAAE,KAAKY,YAAjD,EAA+D,KAAK,EAAC,MAArE,GADF,CADa,GAIX,IAJJ,CAMA,IAAM7B,KAAK,GAAG,KAAK+D,QAAL,EAAd,CAEA,oBACE,oBAAC,iBAAD,IACE,SAAS,EAAE,KAAKhD,0BADlB,EAEE,OAAO,EAAE,CAAC,CAFZ,EAGE,KAAK,EAAE,KAAKd,KAAL,CAAW+F,SAHpB,EAIE,aAAa,EAAE,KAAK/F,KAAL,CAAWgG,aAJ5B,iBAME,oBAAC,IAAD,IACE,GAAG,EAAE,KAAK7E,OADZ,EAEE,KAAK,EAAE,KAAKnB,KAAL,CAAWiG,SAFpB,EAGE,WAAW,EAAE,KAAKtF,KAHpB,EAIE,SAAS,EAAE,KAAKX,KAAL,CAAWkG,aAJxB,IAMGJ,MANH,EAOG,KAAKK,QAAL,CACC,UAACC,MAAD,EAAiBrC,IAAjB,EAAwDsC,CAAxD,EAAmEC,OAAnE,EAA0G,CACxG,IAAI5H,UAAU,CAACqF,IAAD,CAAd,EAAsB,CACpB,IAAMhC,OAAO,GAAGgC,IAAI,EAApB,CAEA,kBAAI1G,KAAK,CAACkF,cAAN,CAAqBR,OAArB,CAAJ,EAAmC,CACjC,oBAAO1E,KAAK,CAACmF,YAAN,CAAmBT,OAAnB,EAA4B,EAAEwE,GAAG,EAAEF,CAAP,EAA5B,CAAP,CACD,CAED,OAAO,IAAP,CACD,CAED,kBAAIhJ,KAAK,CAACkF,cAAN,CAAqBwB,IAArB,CAAJ,EAAgC,CAC9B,oBAAO1G,KAAK,CAACmF,YAAN,CAAmBuB,IAAnB,EAAyB,EAAEwC,GAAG,EAAEF,CAAP,EAAzB,CAAP,CACD,CAED,oBACE,oBAAC,QAAD,IACE,GAAG,EAAEA,CADP,EAEE,KAAK,EAAE,MAAI,CAAC/F,QAAL,GAAgBkG,cAAhB,CAA+BJ,MAA/B,EAAuCrG,KAAvC,IAAgD,UAAhD,GAA6D,IAFtE,EAGE,OAAO,EAAE,MAAI,CAAC0G,MAAL,CAAYC,IAAZ,CAAiB,MAAjB,EAAuBN,MAAvB,CAHX,EAIE,OAAO,EAAEE,OAJX,IAMG,MAAI,CAAChG,QAAL,GAAgBqG,UAAhB,CAA2BP,MAA3B,EAAmCrC,IAAnC,CANH,CADF,CAUD,CA1BF,CAPH,CANF,CADF,CA6CD,CApSH,QAqWU0C,MArWV,GAqWE,gBAAe1G,KAAf,EAA8B,CAC5B,KAAKc,KAAL,GACA,KAAKJ,QAAL,CAAc,EAAEX,MAAM,EAAE,KAAV,EAAiBC,KAAK,EAALA,KAAjB,EAAd,EAEA,IAAI,KAAKC,KAAL,CAAW4G,aAAX,IAA4B,CAAC,KAAKtG,QAAL,GAAgBkG,cAAhB,CAA+B,KAAK1C,QAAL,EAA/B,EAAgD/D,KAAhD,CAAjC,EAAyF,CACvF,KAAKC,KAAL,CAAW4G,aAAX,CAAyB7G,KAAzB,EACD,CACF,CA5WH,QA8WU+D,QA9WV,GA8WE,oBAAmB,CACjB,IAAI,KAAK9D,KAAL,CAAWD,KAAX,KAAqB4D,SAAzB,EAAoC,CAClC,OAAO,KAAK3D,KAAL,CAAWD,KAAlB,CACD,CACD,OAAO,KAAKF,KAAL,CAAWE,KAAlB,CACD,CAnXH,QAqXUoG,QArXV,GAqXE,kBAAiBU,EAAjB,EAAuG,KAC7FC,KAD6F,GACnF,KAAK9G,KAD8E,CAC7F8G,KAD6F,CAErG,IAAI,CAACA,KAAL,EAAY,CACV,OAAO,EAAP,CACD,CACD,IAAMC,OAAO,GAAG,KAAKlH,KAAL,CAAWK,aAAX,IAA4B,KAAKL,KAAL,CAAWK,aAAX,CAAyB8G,WAAzB,EAA5C,CAEA,IAAMC,MAA4B,GAAG,EAArC,CACA,IAAIC,KAAK,GAAG,CAAZ,CACA,qDAAoBJ,KAApB,wCAA2B,KAAhBK,KAAgB,qCACMC,cAAc,CAACD,KAAD,CADpB,CAClBpH,MADkB,sBACXgE,KADW,sBACLuC,QADK,sBAGzB,IAAI,CAACS,OAAD,IAAY,KAAKzG,QAAL,GAAgB+G,UAAhB,CAA2BtH,MAA3B,EAAkCgE,KAAlC,EAAwCgD,OAAxC,CAAhB,EAAkE,CAChEE,MAAM,CAACK,IAAP,CAAYT,EAAE,CAAC9G,MAAD,EAAQgE,KAAR,EAAcmD,KAAd,EAAqBZ,QAArB,CAAd,EACA,EAAEY,KAAF,CACD,CACF,CAED,OAAOD,MAAP,CACD,CAxYH,QA0YUjD,cA1YV,GA0YE,wBAAuBjE,KAAvB,EAAiD,CAC/C,IAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK4D,SAAhC,EAA2C,CACzC,OAAO,IAAP,CACD,CAED,IAAMmD,KAAK,GAAG,KAAK9G,KAAL,CAAW8G,KAAX,IAAoB,EAAlC,CAEA,sDAAoBA,KAApB,2CAA2B,KAAhBK,KAAgB,uCACCC,cAAc,CAACD,KAAD,CADf,CAClBI,SADkB,uBACPxD,MADO,uBAGzB,IAAI,KAAKzD,QAAL,GAAgBkG,cAAhB,CAA+Be,SAA/B,EAA0CxH,KAA1C,CAAJ,EAAsD,CACpD,OAAOgE,MAAP,CACD,CACF,CACD,OAAO,IAAP,CACD,CAzZH,iBAAqD1G,KAAK,CAACmK,SAA3D,WACgBC,mBADhB,GACsC,QADtC,UAGgBC,SAHhB,GAG4B,EACxBlB,cAAc,EAAElJ,SAAS,CAACqK,IADF,EAExB1H,YAAY,EAAE3C,SAAS,CAACsK,GAFA,EAGxB5B,aAAa,EAAE1I,SAAS,CAACuK,IAHD,EAIxBzI,QAAQ,EAAE9B,SAAS,CAACuK,IAJI,EAKxBxI,KAAK,EAAE/B,SAAS,CAACuK,IALO,EAMxBR,UAAU,EAAE/J,SAAS,CAACqK,IANE,EAOxBb,KAAK,EAAExJ,SAAS,CAACwK,SAAV,CAAoB,CAACxK,SAAS,CAACyK,KAAX,EAAkBzK,SAAS,CAAC0K,MAA5B,CAApB,CAPiB,EAQxB9B,aAAa,EAAE5I,SAAS,CAAC2K,MARD,EASxBvE,QAAQ,EAAEpG,SAAS,CAACwK,SAAV,CAAoB,CAACxK,SAAS,CAAC2K,MAAX,EAAmB3K,SAAS,CAAC4K,MAA7B,CAApB,CATc,EAUxBhE,WAAW,EAAE5G,SAAS,CAAC6K,IAVC,EAWxBxB,UAAU,EAAErJ,SAAS,CAACqK,IAXE,EAYxB1D,WAAW,EAAE3G,SAAS,CAACqK,IAZC,EAaxB7B,MAAM,EAAExI,SAAS,CAACuK,IAbM,EAcxB9H,KAAK,EAAEzC,SAAS,CAACsK,GAdO,EAexBnE,KAAK,EAAEnG,SAAS,CAACwK,SAAV,CAAoB,CAACxK,SAAS,CAAC2K,MAAX,EAAmB3K,SAAS,CAAC4K,MAA7B,CAApB,CAfiB,EAgBxBtB,aAAa,EAAEtJ,SAAS,CAACqK,IAhBD,EAiBxBlI,YAAY,EAAEnC,SAAS,CAACqK,IAjBA,EAkBxBjI,YAAY,EAAEpC,SAAS,CAACqK,IAlBA,EAmBxBhI,WAAW,EAAErC,SAAS,CAACqK,IAnBC,EAoBxBhG,SAAS,EAAErE,SAAS,CAACqK,IApBG,EAH5B,UA0BgBpH,YA1BhB,GA0B+B,EAC3B0D,WAAW,EAAXA,WAD2B,EAE3B0C,UAAU,EAAVA,UAF2B,EAG3BH,cAAc,EAAdA,cAH2B,EAI3Ba,UAAU,EAAVA,UAJ2B,EAK3B/H,GAAG,EAAE,SALsB,EA1B/B,UAkCgBP,IAlChB,GAkCuBA,IAlCvB,UAmCgBqJ,GAnChB,GAmCsB,iCAAM,oBAAC,aAAD,OAAN,EAnCtB,sBAqCyB,UAACrG,OAAD,EAA8D,CACnFvE,SAAS,CACP,cAAAH,KAAK,CAACkF,cAAN,CAAqBR,OAArB,KAAiC,OAAOA,OAAP,KAAmB,UAD7C,EAEP,qEAFO,CAAT,CAIA,OAAOA,OAAP,CACD,CA3CH;AAgbA,SAASkC,WAAT,CAAqBlE,KAArB,EAAiCgE,IAAjC,EAA4C;AAC1C,SAAOA,IAAP;AACD;;AAED,SAAS4C,UAAT,CAAoB5G,KAApB,EAAgCgE,IAAhC,EAA2C;AACzC,SAAOA,IAAP;AACD;;AAED,SAASyC,cAAT,CAAwB6B,MAAxB,EAAqCC,MAArC,EAAkD;AAChD,SAAOD,MAAM,KAAKC,MAAlB;AACD;;AAED,SAASlB,cAAT,CAAwBD,KAAxB,EAAoC;AAClC,MAAIoB,KAAK,CAACC,OAAN,CAAcrB,KAAd,CAAJ,EAA0B;AACxB,WAAOA,KAAP;AACD,GAFD,MAEO;AACL,WAAO,CAACA,KAAD,EAAQA,KAAR,EAAexD,SAAf,CAAP;AACD;AACF;;AAED,SAAS0D,UAAT,CAAoBtH,KAApB,EAAgCgE,IAAhC,EAA2CgD,OAA3C,EAA4D;AAC1D,MAAIhD,IAAI,KAAKnE,MAAM,CAACwI,GAApB,EAAyB;AACvB,WAAO,KAAP;AACD;AACD,MAAI,cAAA/K,KAAK,CAACkF,cAAN,CAAqBwB,IAArB,KAA+BrF,UAAU,CAACqF,IAAD,CAAV,iBAAoB1G,KAAK,CAACkF,cAAN,CAAsBwB,IAAI,GAAGA,IAAI,EAAjC,CAAvD,EAA+F;AAC7FA,IAAAA,IAAI,GAAG/F,mBAAmB,CAAC+F,IAAD,CAA1B;AACD;AACD,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5BA,IAAAA,IAAI,GAAGA,IAAI,CAAC0E,QAAL,CAAc,EAAd,CAAP;AACD;AACD,MAAI,OAAO1E,IAAP,KAAgB,QAApB,EAA8B;AAC5B,WAAO,KAAP;AACD;AACD,SAAOA,IAAI,CAACiD,WAAL,GAAmB0B,OAAnB,CAA2B3B,OAA3B,MAAwC,CAAC,CAAhD;AACD","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private renderMain() {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const button = this.getButton(buttonParams);\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active={this.state.opened}>\n <span className={styles.root()} style={style}>\n {button}\n {!this.props.disabled && this.state.opened && this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n >\n {search}\n {this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n )}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private dropdownContainerGetParent = () => {\n return ReactDOM.findDOMNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNodeArray = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
@@ -14,6 +14,7 @@ import { ZIndex } from "../../../internal/ZIndex";
|
|
|
14
14
|
import { ThemeContext } from "../../../lib/theming/ThemeContext";
|
|
15
15
|
import { CommonWrapper } from "../../../internal/CommonWrapper";
|
|
16
16
|
import { cx } from "../../../lib/theming/Emotion";
|
|
17
|
+
import { isTestEnv } from "../../../lib/currentEnvironment";
|
|
17
18
|
import { SidePageBody } from "../SidePageBody";
|
|
18
19
|
import { SidePageContainer } from "../SidePageContainer";
|
|
19
20
|
import { SidePageContext } from "../SidePageContext";
|
|
@@ -291,6 +292,7 @@ SidePage.Body = SidePageBody;
|
|
|
291
292
|
SidePage.Footer = SidePageFooter;
|
|
292
293
|
SidePage.Container = SidePageContainer;
|
|
293
294
|
SidePage.defaultProps = {
|
|
295
|
+
disableAnimations: isTestEnv,
|
|
294
296
|
disableFocusLock: true,
|
|
295
297
|
offset: 0
|
|
296
298
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["SidePage.tsx"],"names":["React","CSSTransition","FocusLock","isKeyEscape","LayoutEvents","stopPropagation","HideBodyVerticalScroll","ModalStack","RenderContainer","RenderLayer","ZIndex","ThemeContext","CommonWrapper","cx","SidePageBody","SidePageContainer","SidePageContext","SidePageFooter","SidePageHeader","styles","TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","theme","stackSubscription","layoutRef","footer","updateLayout","update","getSidePageContextProps","requestClose","getWidth","footerRef","setHasHeader","setHasFooter","setHasPanel","clientWidth","handleStackChange","stack","sidePages","filter","x","props","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","isBlocking","setState","stackPosition","handleClickOutside","e","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","add","componentWillUnmount","removeEventListener","remove","render","renderMain","blockBackground","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","width","disableFocusLock","offset","root","emit","right","left","focusLock","wrapper","wrapperLeft","wrapperMarginLeft","wrapperMarginRight","shadow","_","children","overlay","background","backgroundGray","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","Component","__KONTUR_REACT_UI__","Header","Body","Footer","Container","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Работает только при заблокированном фоне: `blockBackground = true`\n */\n disableFocusLock: boolean;\n\n /**\n * задает отступ от края экрана\n */\n offset?: number | string;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layoutRef: HTMLElement | null = null;\n private footer: SidePageFooter | null = null;\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n if (this.footer) {\n this.footer.update();\n }\n };\n\n public static defaultProps = {\n disableFocusLock: true,\n offset: 0,\n };\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { blockBackground, disableAnimations } = this.props;\n\n return (\n <CommonWrapper {...this.props}>\n <RenderContainer>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </RenderContainer>\n </CommonWrapper>\n );\n }\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock, offset } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{\n width: width || (blockBackground ? 800 : 500),\n right: fromLeft ? 'auto' : offset,\n left: fromLeft ? offset : 'auto',\n }}\n >\n <FocusLock disabled={disableFocusLock || !blockBackground} autoFocus={false} className={styles.focusLock()}>\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.wrapperLeft()]: fromLeft,\n [styles.wrapperMarginLeft()]: this.state.hasMargin && fromLeft,\n [styles.wrapperMarginRight()]: this.state.hasMargin && !fromLeft,\n [styles.shadow(this.theme)]: this.state.hasShadow,\n })}\n ref={(_) => (this.layoutRef = _)}\n >\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </RenderLayer>\n </FocusLock>\n </ZIndex>\n );\n }\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layoutRef) {\n return 'auto';\n }\n return this.layoutRef.clientWidth;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["SidePage.tsx"],"names":["React","CSSTransition","FocusLock","isKeyEscape","LayoutEvents","stopPropagation","HideBodyVerticalScroll","ModalStack","RenderContainer","RenderLayer","ZIndex","ThemeContext","CommonWrapper","cx","isTestEnv","SidePageBody","SidePageContainer","SidePageContext","SidePageFooter","SidePageHeader","styles","TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","theme","stackSubscription","layoutRef","footer","updateLayout","update","getSidePageContextProps","requestClose","getWidth","footerRef","setHasHeader","setHasFooter","setHasPanel","clientWidth","handleStackChange","stack","sidePages","filter","x","props","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","isBlocking","setState","stackPosition","handleClickOutside","e","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","add","componentWillUnmount","removeEventListener","remove","render","renderMain","blockBackground","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","width","disableFocusLock","offset","root","emit","right","left","focusLock","wrapper","wrapperLeft","wrapperMarginLeft","wrapperMarginRight","shadow","_","children","overlay","background","backgroundGray","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","Component","__KONTUR_REACT_UI__","Header","Body","Footer","Container","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Работает только при заблокированном фоне: `blockBackground = true`\n */\n disableFocusLock: boolean;\n\n /**\n * задает отступ от края экрана\n */\n offset?: number | string;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layoutRef: HTMLElement | null = null;\n private footer: SidePageFooter | null = null;\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n if (this.footer) {\n this.footer.update();\n }\n };\n\n public static defaultProps = {\n disableAnimations: isTestEnv,\n disableFocusLock: true,\n offset: 0,\n };\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { blockBackground, disableAnimations } = this.props;\n\n return (\n <CommonWrapper {...this.props}>\n <RenderContainer>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </RenderContainer>\n </CommonWrapper>\n );\n }\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock, offset } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{\n width: width || (blockBackground ? 800 : 500),\n right: fromLeft ? 'auto' : offset,\n left: fromLeft ? offset : 'auto',\n }}\n >\n <FocusLock disabled={disableFocusLock || !blockBackground} autoFocus={false} className={styles.focusLock()}>\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.wrapperLeft()]: fromLeft,\n [styles.wrapperMarginLeft()]: this.state.hasMargin && fromLeft,\n [styles.wrapperMarginRight()]: this.state.hasMargin && !fromLeft,\n [styles.shadow(this.theme)]: this.state.hasShadow,\n })}\n ref={(_) => (this.layoutRef = _)}\n >\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </RenderLayer>\n </FocusLock>\n </ZIndex>\n );\n }\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layoutRef) {\n return 'auto';\n }\n return this.layoutRef.clientWidth;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { isFirefox } from "../../client"; // Checkbox not checked in Firefox if key of modifier was active
|
|
2
|
+
// shift+click, ctrl+click on Win and cmd+click on Mac
|
|
3
|
+
// https://bugzilla.mozilla.org/show_bug.cgi?id=559506
|
|
4
|
+
|
|
5
|
+
export var fixFirefoxModifiedClickOnLabel = function fixFirefoxModifiedClickOnLabel(ref) {
|
|
6
|
+
return function (e) {
|
|
7
|
+
var input = ref.current;
|
|
8
|
+
|
|
9
|
+
if (input && !input.disabled && isFirefox && (e.shiftKey || e.ctrlKey || e.metaKey)) {
|
|
10
|
+
// Currently only valid for Radio and Checkbox
|
|
11
|
+
input.checked = !input.checked;
|
|
12
|
+
var type = input.type;
|
|
13
|
+
input.type = 'text';
|
|
14
|
+
e.persist();
|
|
15
|
+
input.dispatchEvent(new MouseEvent('change', e.nativeEvent));
|
|
16
|
+
input.type = type;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["fixFirefoxModifiedClickOnLabel.ts"],"names":["isFirefox","fixFirefoxModifiedClickOnLabel","ref","e","input","current","disabled","shiftKey","ctrlKey","metaKey","checked","type","persist","dispatchEvent","MouseEvent","nativeEvent"],"mappings":";;AAEA,SAASA,SAAT,QAA0B,WAA1B;;AAEA;AACA;AACA;AACA,OAAO,IAAMC,8BAA8B;AACzC,SADWA,8BACX,CAACC,GAAD,UAA4C,UAACC,CAAD,EAA2C;AACrF,QAAMC,KAAK,GAAGF,GAAG,CAACG,OAAlB;AACA,QAAID,KAAK,IAAI,CAACA,KAAK,CAACE,QAAhB,IAA4BN,SAA5B,KAA0CG,CAAC,CAACI,QAAF,IAAcJ,CAAC,CAACK,OAAhB,IAA2BL,CAAC,CAACM,OAAvE,CAAJ,EAAqF;AACnF;AACAL,MAAAA,KAAK,CAACM,OAAN,GAAgB,CAACN,KAAK,CAACM,OAAvB;AACA,UAAMC,IAAI,GAAGP,KAAK,CAACO,IAAnB;AACAP,MAAAA,KAAK,CAACO,IAAN,GAAa,MAAb;AACAR,MAAAA,CAAC,CAACS,OAAF;AACAR,MAAAA,KAAK,CAACS,aAAN,CAAoB,IAAIC,UAAJ,CAAe,QAAf,EAAyBX,CAAC,CAACY,WAA3B,CAApB;AACAX,MAAAA,KAAK,CAACO,IAAN,GAAaA,IAAb;AACD;AACF,GAXD,EADK","sourcesContent":["import React from 'react';\n\nimport { isFirefox } from '../client';\n\n// Checkbox not checked in Firefox if key of modifier was active\n// shift+click, ctrl+click on Win and cmd+click on Mac\n// https://bugzilla.mozilla.org/show_bug.cgi?id=559506\nexport const fixFirefoxModifiedClickOnLabel =\n (ref: React.RefObject<HTMLInputElement>) => (e: React.MouseEvent<HTMLLabelElement>) => {\n const input = ref.current;\n if (input && !input.disabled && isFirefox && (e.shiftKey || e.ctrlKey || e.metaKey)) {\n // Currently only valid for Radio and Checkbox\n input.checked = !input.checked;\n const type = input.type;\n input.type = 'text';\n e.persist();\n input.dispatchEvent(new MouseEvent('change', e.nativeEvent));\n input.type = type;\n }\n };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["getDisplayName.ts"],"names":["getDisplayName","RC","displayName","name"],"mappings":";;;;AAIA,OAAO,SAASA,cAAT;AACLC,EADK;AAEG;AACR,SAAOA,EAAE,CAACC,WAAH,IAAkBD,EAAE,CAACE,IAArB,IAA6B,WAApC;AACD","sourcesContent":["import React from 'react';\n\nimport { ReactUIComponentWithRef } from './forwardRefAndName';\n\nexport function getDisplayName<P>(\n RC: React.ComponentType<P> | React.FunctionComponent<P> | ReactUIComponentWithRef<any, P>,\n): string {\n return RC.displayName || RC.name || 'Anonymous';\n}\n"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { getDisplayName } from "../getDisplayName";
|
|
5
|
+
|
|
6
|
+
var removePostfix = function removePostfix(word, postfixRegex) {
|
|
7
|
+
var regexContent = postfixRegex.source.replace(/\$$/, '');
|
|
8
|
+
var isCorrectPostfix = postfixRegex.test(word);
|
|
9
|
+
|
|
10
|
+
if (!isCorrectPostfix) {
|
|
11
|
+
throw new Error("Component's displayName property must end with '" + regexContent + "' in order to be wrapped in withClassWrapper HOC");
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return word.replace(postfixRegex, '');
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* HOC for moving from Class to Functional components.
|
|
18
|
+
*
|
|
19
|
+
* Used to remove distinctions between Class and Functional refs.
|
|
20
|
+
*
|
|
21
|
+
* @param RFC Functional component wrapped in forwardRefAndName.
|
|
22
|
+
* @returns Class component that wraps Functional component.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
export function withClassWrapper(RFC) {
|
|
27
|
+
var _class, _temp;
|
|
28
|
+
|
|
29
|
+
var fullName = getDisplayName(RFC);
|
|
30
|
+
var nameWithoutPostfix = removePostfix(fullName, /FC$/);
|
|
31
|
+
return _temp = _class = /*#__PURE__*/function (_React$Component) {
|
|
32
|
+
_inheritsLoose(ClassWrapper, _React$Component);
|
|
33
|
+
|
|
34
|
+
function ClassWrapper() {
|
|
35
|
+
var _this;
|
|
36
|
+
|
|
37
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
38
|
+
args[_key] = arguments[_key];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
|
|
42
|
+
_this.instancePropertiesRef = /*#__PURE__*/React.createRef();
|
|
43
|
+
return _this;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
var _proto = ClassWrapper.prototype;
|
|
47
|
+
|
|
48
|
+
_proto.componentDidMount = function componentDidMount() {
|
|
49
|
+
if (this.instancePropertiesRef.current) {
|
|
50
|
+
Object.defineProperties(this, Object.getOwnPropertyDescriptors(this.instancePropertiesRef.current));
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
_proto.render = function render() {
|
|
55
|
+
return (
|
|
56
|
+
/*#__PURE__*/
|
|
57
|
+
// TypeScript is not able to understand
|
|
58
|
+
// that both types (class one and functional one)
|
|
59
|
+
// have ref at the build stage.
|
|
60
|
+
// @ts-ignore
|
|
61
|
+
React.createElement(ClassWrapper.FC, _extends({
|
|
62
|
+
// Returns methods defined in useImperativeHandle.
|
|
63
|
+
instanceRef: this.instancePropertiesRef
|
|
64
|
+
}, this.props))
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
return ClassWrapper;
|
|
69
|
+
}(React.Component), _class.__KONTUR_REACT_UI__ = nameWithoutPostfix, _class.displayName = nameWithoutPostfix, _class.FC = RFC, _temp;
|
|
70
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["withClassWrapper.tsx"],"names":["React","getDisplayName","removePostfix","word","postfixRegex","regexContent","source","replace","isCorrectPostfix","test","Error","withClassWrapper","RFC","fullName","nameWithoutPostfix","instancePropertiesRef","createRef","componentDidMount","current","Object","defineProperties","getOwnPropertyDescriptors","render","props","Component","__KONTUR_REACT_UI__","displayName","FC"],"mappings":"gIAAA,OAAOA,KAAP,MAAkB,OAAlB;;;AAGA,SAASC,cAAT,QAA+B,kBAA/B;;AAEA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAACC,IAAD,EAAeC,YAAf,EAAwC;AAC5D,MAAMC,YAAY,GAAGD,YAAY,CAACE,MAAb,CAAoBC,OAApB,CAA4B,KAA5B,EAAmC,EAAnC,CAArB;;AAEA,MAAMC,gBAAgB,GAAGJ,YAAY,CAACK,IAAb,CAAkBN,IAAlB,CAAzB;AACA,MAAI,CAACK,gBAAL,EAAuB;AACrB,UAAM,IAAIE,KAAJ;AAC+CL,IAAAA,YAD/C,sDAAN;;AAGD;;AAED,SAAOF,IAAI,CAACI,OAAL,CAAaH,YAAb,EAA2B,EAA3B,CAAP;AACD,CAXD;;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,gBAAT,CAAgCC,GAAhC,EAAoE;AACzE,MAAMC,QAAQ,GAAGZ,cAAc,CAACW,GAAD,CAA/B;AACA,MAAME,kBAAkB,GAAGZ,aAAa,CAACW,QAAD,EAAW,KAAX,CAAxC;;AAEA;AACSE,MAAAA,qBADT,gBACiCf,KAAK,CAACgB,SAAN,EADjC;;AAGEC,IAAAA,iBAHF,GAGE,6BAAoB;AAClB,UAAI,KAAKF,qBAAL,CAA2BG,OAA/B,EAAwC;AACtCC,QAAAA,MAAM,CAACC,gBAAP,CAAwB,IAAxB,EAA8BD,MAAM,CAACE,yBAAP,CAAiC,KAAKN,qBAAL,CAA2BG,OAA5D,CAA9B;AACD;AACF,KAPH;;;;;;;AAcEI,IAAAA,MAdF,GAcE,kBAAS;AACP;AACE;AACA;AACA;AACA;AACA,4BAAC,YAAD,CAAc,EAAd;AACE;AACA,UAAA,WAAW,EAAE,KAAKP,qBAFpB;AAGM,aAAKQ,KAHX,EALF;;;AAWD,KA1BH,uBAAkCvB,KAAK,CAACwB,SAAxC,UASgBC,mBAThB,GASsCX,kBATtC,SAUgBY,WAVhB,GAU8BZ,kBAV9B,SAYgBa,EAZhB,GAYqBf,GAZrB;;AA4BD","sourcesContent":["import React from 'react';\n\nimport { ReactUIComponentWithRef } from './forwardRefAndName';\nimport { getDisplayName } from './getDisplayName';\n\nconst removePostfix = (word: string, postfixRegex: RegExp) => {\n const regexContent = postfixRegex.source.replace(/\\$$/, '');\n\n const isCorrectPostfix = postfixRegex.test(word);\n if (!isCorrectPostfix) {\n throw new Error(\n `Component's displayName property must end with '${regexContent}' in order to be wrapped in withClassWrapper HOC`,\n );\n }\n\n return word.replace(postfixRegex, '');\n};\n\n/**\n * HOC for moving from Class to Functional components.\n *\n * Used to remove distinctions between Class and Functional refs.\n *\n * @param RFC Functional component wrapped in forwardRefAndName.\n * @returns Class component that wraps Functional component.\n */\nexport function withClassWrapper<T, P>(RFC: ReactUIComponentWithRef<T, P>) {\n const fullName = getDisplayName(RFC);\n const nameWithoutPostfix = removePostfix(fullName, /FC$/);\n\n return class ClassWrapper extends React.Component<P> {\n public instancePropertiesRef = React.createRef<T>();\n\n componentDidMount() {\n if (this.instancePropertiesRef.current) {\n Object.defineProperties(this, Object.getOwnPropertyDescriptors(this.instancePropertiesRef.current));\n }\n }\n\n public static __KONTUR_REACT_UI__ = nameWithoutPostfix;\n public static displayName = nameWithoutPostfix;\n\n public static FC = RFC;\n\n render() {\n return (\n // TypeScript is not able to understand\n // that both types (class one and functional one)\n // have ref at the build stage.\n // @ts-ignore\n <ClassWrapper.FC\n // Returns methods defined in useImperativeHandle.\n instanceRef={this.instancePropertiesRef}\n {...this.props}\n />\n );\n }\n };\n}\n"]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ReactUIComponentWithRef } from './forwardRefAndName';
|
|
3
|
+
/**
|
|
4
|
+
* HOC for moving from Class to Functional components.
|
|
5
|
+
*
|
|
6
|
+
* Used to remove distinctions between Class and Functional refs.
|
|
7
|
+
*
|
|
8
|
+
* @param RFC Functional component wrapped in forwardRefAndName.
|
|
9
|
+
* @returns Class component that wraps Functional component.
|
|
10
|
+
*/
|
|
11
|
+
export declare function withClassWrapper<T, P>(RFC: ReactUIComponentWithRef<T, P>): {
|
|
12
|
+
new (props: P | Readonly<P>): {
|
|
13
|
+
instancePropertiesRef: React.RefObject<T>;
|
|
14
|
+
componentDidMount(): void;
|
|
15
|
+
render(): JSX.Element;
|
|
16
|
+
context: any;
|
|
17
|
+
setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<P>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
|
|
18
|
+
forceUpdate(callback?: (() => void) | undefined): void;
|
|
19
|
+
readonly props: Readonly<P> & Readonly<{
|
|
20
|
+
children?: React.ReactNode;
|
|
21
|
+
}>;
|
|
22
|
+
state: Readonly<{}>;
|
|
23
|
+
refs: {
|
|
24
|
+
[key: string]: React.ReactInstance;
|
|
25
|
+
};
|
|
26
|
+
shouldComponentUpdate?(nextProps: Readonly<P>, nextState: Readonly<{}>, nextContext: any): boolean;
|
|
27
|
+
componentWillUnmount?(): void;
|
|
28
|
+
componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
|
|
29
|
+
getSnapshotBeforeUpdate?(prevProps: Readonly<P>, prevState: Readonly<{}>): any;
|
|
30
|
+
componentDidUpdate?(prevProps: Readonly<P>, prevState: Readonly<{}>, snapshot?: any): void;
|
|
31
|
+
componentWillMount?(): void;
|
|
32
|
+
UNSAFE_componentWillMount?(): void;
|
|
33
|
+
componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
|
|
34
|
+
UNSAFE_componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
|
|
35
|
+
componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<{}>, nextContext: any): void;
|
|
36
|
+
UNSAFE_componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<{}>, nextContext: any): void;
|
|
37
|
+
};
|
|
38
|
+
new (props: P, context: any): {
|
|
39
|
+
instancePropertiesRef: React.RefObject<T>;
|
|
40
|
+
componentDidMount(): void;
|
|
41
|
+
render(): JSX.Element;
|
|
42
|
+
context: any;
|
|
43
|
+
setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<P>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
|
|
44
|
+
forceUpdate(callback?: (() => void) | undefined): void;
|
|
45
|
+
readonly props: Readonly<P> & Readonly<{
|
|
46
|
+
children?: React.ReactNode;
|
|
47
|
+
}>;
|
|
48
|
+
state: Readonly<{}>;
|
|
49
|
+
refs: {
|
|
50
|
+
[key: string]: React.ReactInstance;
|
|
51
|
+
};
|
|
52
|
+
shouldComponentUpdate?(nextProps: Readonly<P>, nextState: Readonly<{}>, nextContext: any): boolean;
|
|
53
|
+
componentWillUnmount?(): void;
|
|
54
|
+
componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
|
|
55
|
+
getSnapshotBeforeUpdate?(prevProps: Readonly<P>, prevState: Readonly<{}>): any;
|
|
56
|
+
componentDidUpdate?(prevProps: Readonly<P>, prevState: Readonly<{}>, snapshot?: any): void;
|
|
57
|
+
componentWillMount?(): void;
|
|
58
|
+
UNSAFE_componentWillMount?(): void;
|
|
59
|
+
componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
|
|
60
|
+
UNSAFE_componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
|
|
61
|
+
componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<{}>, nextContext: any): void;
|
|
62
|
+
UNSAFE_componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<{}>, nextContext: any): void;
|
|
63
|
+
};
|
|
64
|
+
__KONTUR_REACT_UI__: string;
|
|
65
|
+
displayName: string;
|
|
66
|
+
FC: ReactUIComponentWithRef<T, P>;
|
|
67
|
+
contextType?: React.Context<any> | undefined;
|
|
68
|
+
};
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skbkontur/react-ui",
|
|
3
|
-
"version": "3.9.
|
|
3
|
+
"version": "3.9.3",
|
|
4
4
|
"description": "UI Components",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "index.js",
|
|
7
7
|
"sideEffects": false,
|
|
8
|
-
"homepage": "https://tech.skbkontur.ru/react-ui/3.9.
|
|
8
|
+
"homepage": "https://tech.skbkontur.ru/react-ui/3.9.3/",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
11
|
"url": "git@github.com:skbkontur/retail-ui.git"
|
|
@@ -94,6 +94,7 @@
|
|
|
94
94
|
"@types/react-transition-group": "^4.2.3",
|
|
95
95
|
"@types/shallowequal": "^1.1.1",
|
|
96
96
|
"@types/warning": "^3.0.0",
|
|
97
|
+
"axios": "^0.24.0",
|
|
97
98
|
"babel-jest": "^26.6.3",
|
|
98
99
|
"babel-loader": "^8.2.2",
|
|
99
100
|
"chalk": "4.1.0",
|
|
@@ -102,6 +103,7 @@
|
|
|
102
103
|
"creevey": "0.7.31",
|
|
103
104
|
"cross-env": "^7.0.3",
|
|
104
105
|
"css-loader": "5.2.0",
|
|
106
|
+
"dotenv": "^10.0.0",
|
|
105
107
|
"dts-css-modules-loader": "1.2.1",
|
|
106
108
|
"enzyme": "^3.11.0",
|
|
107
109
|
"enzyme-adapter-react-16": "^1.15.6",
|