@skbkontur/react-ui 4.10.0 → 4.11.0
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 +17 -0
- package/cjs/components/Autocomplete/Autocomplete.d.ts +2 -1
- package/cjs/components/Autocomplete/Autocomplete.js +8 -1
- package/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
- package/cjs/components/ComboBox/ComboBox.d.ts +2 -1
- package/cjs/components/ComboBox/ComboBox.js +1 -0
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/DatePicker/DatePicker.d.ts +2 -1
- package/cjs/components/DatePicker/DatePicker.js +1 -0
- package/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/cjs/components/Modal/Modal.styles.js +1 -1
- package/cjs/components/Modal/Modal.styles.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +2 -1
- package/cjs/components/Select/Select.js +2 -1
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +2 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js +2 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +2 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.js +3 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +4 -0
- package/cjs/internal/DropdownContainer/DropdownContainer.js +11 -6
- package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
- package/cjs/internal/DropdownContainer/getManualPosition.d.ts +19 -0
- package/cjs/internal/DropdownContainer/getManualPosition.js +41 -0
- package/cjs/internal/DropdownContainer/getManualPosition.js.map +1 -0
- package/cjs/lib/theming/ThemeFactory.js +7 -0
- package/cjs/lib/theming/ThemeFactory.js.map +1 -1
- package/cjs/lib/theming/ThemeHelpers.d.ts +12 -3
- package/cjs/lib/theming/ThemeHelpers.js +24 -5
- package/cjs/lib/theming/ThemeHelpers.js.map +1 -1
- package/cjs/lib/theming/themes/DarkTheme.js +1 -1
- package/cjs/lib/theming/themes/DarkTheme.js.map +1 -1
- package/cjs/lib/theming/themes/Theme2022Dark.d.ts +1 -1
- package/cjs/lib/theming/themes/Theme2022Dark.js +4 -3
- package/cjs/lib/theming/themes/Theme2022Dark.js.map +1 -1
- package/components/Autocomplete/Autocomplete/Autocomplete.js +4 -2
- package/components/Autocomplete/Autocomplete/Autocomplete.js.map +1 -1
- package/components/Autocomplete/Autocomplete.d.ts +2 -1
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +2 -1
- package/components/DatePicker/DatePicker/DatePicker.js +1 -0
- package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +2 -1
- package/components/Modal/Modal.styles/Modal.styles.js +1 -1
- package/components/Modal/Modal.styles/Modal.styles.js.map +1 -1
- package/components/Select/Select/Select.js +2 -1
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +2 -1
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +3 -1
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.d.ts +2 -1
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +1 -0
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/CustomComboBox/CustomComboBox.d.ts +2 -1
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +17 -4
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
- package/internal/DropdownContainer/DropdownContainer.d.ts +4 -0
- package/internal/DropdownContainer/getManualPosition/getManualPosition.js +36 -0
- package/internal/DropdownContainer/getManualPosition/getManualPosition.js.map +1 -0
- package/internal/DropdownContainer/getManualPosition/package.json +6 -0
- package/internal/DropdownContainer/getManualPosition.d.ts +19 -0
- package/lib/theming/ThemeFactory/ThemeFactory.js +7 -1
- package/lib/theming/ThemeFactory/ThemeFactory.js.map +1 -1
- package/lib/theming/ThemeHelpers/ThemeHelpers.js +18 -4
- package/lib/theming/ThemeHelpers/ThemeHelpers.js.map +1 -1
- package/lib/theming/ThemeHelpers.d.ts +12 -3
- package/lib/theming/themes/DarkTheme/DarkTheme.js +2 -2
- package/lib/theming/themes/DarkTheme/DarkTheme.js.map +1 -1
- package/lib/theming/themes/Theme2022Dark/Theme2022Dark.js +2 -1
- package/lib/theming/themes/Theme2022Dark/Theme2022Dark.js.map +1 -1
- package/lib/theming/themes/Theme2022Dark.d.ts +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,23 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [4.11.0](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.10.0...@skbkontur/react-ui@4.11.0) (2023-01-13)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **Modal:** forced scroll on mobile devices ([#3070](https://github.com/skbkontur/retail-ui/issues/3070)) ([a6262de](https://github.com/skbkontur/retail-ui/commit/a6262ded4a727f63fb15a800e432669d27a01df9))
|
|
12
|
+
* **ThemeFactory:** correct `overrideDefaultTheme` method ([#3073](https://github.com/skbkontur/retail-ui/issues/3073)) ([9f9b31e](https://github.com/skbkontur/retail-ui/commit/9f9b31ea961de245b8de1d6986359a918db8f739))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* **ComboBox,DatePicker,Select,Autocomplete:** new prop menuPos ([#3076](https://github.com/skbkontur/retail-ui/issues/3076)) ([5e59286](https://github.com/skbkontur/retail-ui/commit/5e5928641ea7e5b5faf5fffffbfa26459882a9e3))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
6
23
|
# [4.10.0](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.9.2...@skbkontur/react-ui@4.10.0) (2022-12-22)
|
|
7
24
|
|
|
8
25
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { InputProps } from '../Input';
|
|
4
|
+
import { DropdownContainerProps } from '../../internal/DropdownContainer';
|
|
4
5
|
import { Nullable, Override } from '../../typings/utility-types';
|
|
5
6
|
import { CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';
|
|
6
|
-
export interface AutocompleteProps extends CommonProps, Override<InputProps, {
|
|
7
|
+
export interface AutocompleteProps extends CommonProps, Pick<DropdownContainerProps, 'menuPos'>, Override<InputProps, {
|
|
7
8
|
/** Функция отрисовки элемента меню */
|
|
8
9
|
renderItem?: (item: string) => React.ReactNode;
|
|
9
10
|
/** Промис, резолвящий элементы меню */
|
|
@@ -80,6 +80,7 @@ function renderItem(item) {
|
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
|
|
83
|
+
|
|
83
84
|
|
|
84
85
|
|
|
85
86
|
var AutocompleteDataTids = {
|
|
@@ -253,6 +254,12 @@ Autocomplete = (0, _decorator.responsiveLayout)(_class = (0, _rootNode.rootNode)
|
|
|
253
254
|
|
|
254
255
|
|
|
255
256
|
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
|
|
256
263
|
|
|
257
264
|
|
|
258
265
|
|
|
@@ -477,7 +484,7 @@ Autocomplete = (0, _decorator.responsiveLayout)(_class = (0, _rootNode.rootNode)
|
|
|
477
484
|
* @public
|
|
478
485
|
*/_proto.focus = function focus() {if (this.input) {this.input.focus();}} /**
|
|
479
486
|
* @public
|
|
480
|
-
*/;_proto.blur = function blur() {this.handleBlur();};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {if (prevProps.value !== this.props.value) {this.updateItems(this.props.value || '');}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this2.setRootNode }, _this2.props), _this2.renderMain);});};_proto.renderMenu = function renderMenu() {var items = this.state.items;var _this$getProps = this.getProps(),menuMaxHeight = _this$getProps.menuMaxHeight,hasShadow = _this$getProps.hasShadow,menuWidth = _this$getProps.menuWidth,width = _this$getProps.width,preventWindowScroll = _this$getProps.preventWindowScroll,menuAlign = _this$getProps.menuAlign,disablePortal = _this$getProps.disablePortal;var menuProps = { ref: this.refMenu, maxHeight: menuMaxHeight, hasShadow: hasShadow, width: menuWidth || width && (0, _getDOMRect.getDOMRect)(this.rootSpan).width, preventWindowScroll: preventWindowScroll };if (!items || items.length === 0) {return null;}return /*#__PURE__*/_react.default.createElement(_DropdownContainer.DropdownContainer, { offsetY: 1, getParent: this.getAnchor, align: menuAlign, disablePortal: disablePortal }, /*#__PURE__*/_react.default.createElement(_Menu.Menu, menuProps, this.getItems()));};_proto.handleMenuItemClick = function handleMenuItemClick(i) {var _this3 = this;return function (event) {return _this3.handleItemClick(event, i);};};_proto.handleItemClick = function handleItemClick(event, index) {if (event.button) {return;}event.preventDefault();this.choose(index);};_proto.choose = function choose(index) {if (!this.state.items) {return;}var value = this.state.items[index];this.opened = false;this.setState({ selected: -1, items: null });this.fireChange(value);this.blur();};_proto.updateItems = function updateItems(value) {var _this4 = this;if (!this.opened) {return;}var pattern = value.trim();var source = this.props.source;if (!source) {return;}var promise;this.requestId += 1;var expectingId = this.requestId;if (typeof source === 'function') {promise = source(pattern);} else {promise = match(pattern, source);}promise.then(function (items) {if (_this4.opened && expectingId === _this4.requestId) {_this4.setState({ items: items, selected: -1 });}});};_proto.fireChange = function fireChange(value) {if (this.props.onValueChange) {this.props.onValueChange(value);}};return Autocomplete;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Autocomplete', _class2.propTypes = { /**
|
|
487
|
+
*/;_proto.blur = function blur() {this.handleBlur();};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {if (prevProps.value !== this.props.value) {this.updateItems(this.props.value || '');}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this2.setRootNode }, _this2.props), _this2.renderMain);});};_proto.renderMenu = function renderMenu() {var items = this.state.items;var _this$getProps = this.getProps(),menuMaxHeight = _this$getProps.menuMaxHeight,hasShadow = _this$getProps.hasShadow,menuWidth = _this$getProps.menuWidth,width = _this$getProps.width,preventWindowScroll = _this$getProps.preventWindowScroll,menuAlign = _this$getProps.menuAlign,disablePortal = _this$getProps.disablePortal,menuPos = _this$getProps.menuPos;var menuProps = { ref: this.refMenu, maxHeight: menuMaxHeight, hasShadow: hasShadow, width: menuWidth || width && (0, _getDOMRect.getDOMRect)(this.rootSpan).width, preventWindowScroll: preventWindowScroll };if (!items || items.length === 0) {return null;}return /*#__PURE__*/_react.default.createElement(_DropdownContainer.DropdownContainer, { offsetY: 1, getParent: this.getAnchor, align: menuAlign, disablePortal: disablePortal, menuPos: menuPos }, /*#__PURE__*/_react.default.createElement(_Menu.Menu, menuProps, this.getItems()));};_proto.handleMenuItemClick = function handleMenuItemClick(i) {var _this3 = this;return function (event) {return _this3.handleItemClick(event, i);};};_proto.handleItemClick = function handleItemClick(event, index) {if (event.button) {return;}event.preventDefault();this.choose(index);};_proto.choose = function choose(index) {if (!this.state.items) {return;}var value = this.state.items[index];this.opened = false;this.setState({ selected: -1, items: null });this.fireChange(value);this.blur();};_proto.updateItems = function updateItems(value) {var _this4 = this;if (!this.opened) {return;}var pattern = value.trim();var source = this.props.source;if (!source) {return;}var promise;this.requestId += 1;var expectingId = this.requestId;if (typeof source === 'function') {promise = source(pattern);} else {promise = match(pattern, source);}promise.then(function (items) {if (_this4.opened && expectingId === _this4.requestId) {_this4.setState({ items: items, selected: -1 });}});};_proto.fireChange = function fireChange(value) {if (this.props.onValueChange) {this.props.onValueChange(value);}};return Autocomplete;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Autocomplete', _class2.propTypes = { /**
|
|
481
488
|
* Функция для отрисовки элемента в выпадающем списке. Единственный аргумент
|
|
482
489
|
* — *item*.
|
|
483
490
|
*/renderItem: _propTypes.default.func, /**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Autocomplete.tsx"],"names":["match","pattern","items","Promise","resolve","lowerCasedPattern","toLowerCase","itemsMatchingPattern","filter","item","includes","renderItem","AutocompleteDataTids","root","Autocomplete","responsiveLayout","rootNode","state","selected","focused","isMobileOpened","opened","input","requestId","getProps","defaultProps","renderMain","props","isMobile","isMobileLayout","onValueChange","onKeyDown","onFocus","onBlur","_renderItem","disablePortal","hasShadow","menuAlign","menuMaxHeight","preventWindowScroll","source","width","theme","inputWidth","mobileMenuHeaderText","rest","inputProps","handleValueChange","handleKeyDown","handleFocus","ref","refInput","handleBlur","handleClickOutside","styles","refRootSpan","renderMobileMenu","renderMenu","autoFocus","onKeyPress","handleKeyPressMobile","value","placeholder","handleCloseMobile","refMobilePopup","refMenu","mobilePopup","close","length","getItems","map","i","handleMenuItemClick","fireChange","setState","e","key","event","blur","preventDefault","menu","up","down","enter","getAnchor","el","span","rootSpan","focus","componentDidUpdate","prevProps","updateItems","render","setRootNode","menuWidth","menuProps","maxHeight","handleItemClick","index","button","choose","trim","promise","expectingId","then","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","func","oneOfType","array","size"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { KeyboardEvent } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter, isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport { Input, InputProps } from '../Input';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\n\nimport { styles } from './Autocomplete.styles';\n\nfunction match(pattern: string, items: string[]) {\n if (!pattern || !items) {\n return Promise.resolve([]);\n }\n\n const lowerCasedPattern = pattern.toLowerCase();\n const itemsMatchingPattern = items.filter((item) => {\n return item.toLowerCase().includes(lowerCasedPattern);\n });\n\n return Promise.resolve(itemsMatchingPattern);\n}\n\nfunction renderItem(item: any) {\n return item;\n}\n\nexport interface AutocompleteProps\n extends CommonProps,\n Override<\n InputProps,\n {\n /** Функция отрисовки элемента меню */\n renderItem?: (item: string) => React.ReactNode;\n /** Промис, резолвящий элементы меню */\n source?: string[] | ((patter: string) => Promise<string[]>);\n /** Отключает использование портала */\n disablePortal?: boolean;\n /** Отрисовка тени у выпадающего меню */\n hasShadow?: boolean;\n /** Выравнивание выпадающего меню */\n menuAlign?: 'left' | 'right';\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Отключить скролл окна, когда меню открыто */\n preventWindowScroll?: boolean;\n /** Вызывается при изменении `value` */\n onValueChange: (value: string) => void;\n /** onBlur */\n onBlur?: () => void;\n /** Размер инпута */\n size?: InputProps['size'];\n /** value */\n value: string;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n }\n > {}\n\nexport interface AutocompleteState {\n items: Nullable<string[]>;\n selected: number;\n focused: boolean;\n isMobileOpened: boolean;\n}\n\nexport const AutocompleteDataTids = {\n root: 'Autocomplete__root',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n AutocompleteProps,\n 'renderItem' | 'size' | 'disablePortal' | 'hasShadow' | 'menuMaxHeight' | 'menuAlign' | 'preventWindowScroll'\n >\n>;\n\n/**\n * Стандартный инпут с подсказками.\n *\n * Все свойства передаются во внутренний *Input*.\n */\n@responsiveLayout\n@rootNode\nexport class Autocomplete extends React.Component<AutocompleteProps, AutocompleteState> {\n public static __KONTUR_REACT_UI__ = 'Autocomplete';\n\n public static propTypes = {\n /**\n * Функция для отрисовки элемента в выпадающем списке. Единственный аргумент\n * — *item*.\n */\n renderItem: PropTypes.func,\n\n /**\n * Если передан массив, то совпадения ищутся по этому массиву.\n *\n * Если передается функция, то она должна возвращать thenable, который\n * резолвится уже отфильтрованным массивом. Возвращенный thenable может\n * иметь метод cancel, который будет вызван при отмене поиска (пользователь\n * изменил строку поиска, автокомплит потерял фокус).\n * ```\n * function(pattern) {\n * return service.findAll(pattern);\n * }\n * ```\n */\n source: PropTypes.oneOfType([PropTypes.array, PropTypes.func]),\n };\n\n public static defaultProps: DefaultProps = {\n renderItem,\n size: 'small',\n disablePortal: false,\n hasShadow: true,\n menuMaxHeight: 300,\n menuAlign: 'left',\n preventWindowScroll: true,\n };\n\n public state: AutocompleteState = {\n items: null,\n selected: -1,\n focused: false,\n isMobileOpened: false,\n };\n\n private theme!: Theme;\n private isMobileLayout!: boolean;\n private opened = false;\n private input: Nullable<Input> = null;\n private menu: Nullable<Menu>;\n private rootSpan: Nullable<HTMLSpanElement>;\n private mobilePopup: Nullable<MobilePopup>;\n\n private requestId = 0;\n\n private getProps = createPropsGetter(Autocomplete.defaultProps);\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public focus() {\n if (this.input) {\n this.input.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n this.handleBlur();\n }\n\n public componentDidUpdate(prevProps: AutocompleteProps) {\n if (prevProps.value !== this.props.value) {\n this.updateItems(this.props.value || '');\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n public renderMain = (props: CommonWrapperRestProps<AutocompleteProps>) => {\n const { focused } = this.state;\n\n const isMobile = this.isMobileLayout;\n\n const {\n onValueChange,\n onKeyDown,\n onFocus,\n onBlur,\n renderItem: _renderItem,\n disablePortal,\n hasShadow,\n menuAlign,\n menuMaxHeight,\n preventWindowScroll,\n source,\n width = this.theme.inputWidth,\n mobileMenuHeaderText,\n ...rest\n } = props;\n\n const inputProps = {\n ...rest,\n width: '100%',\n onValueChange: this.handleValueChange,\n onKeyDown: this.handleKeyDown,\n onFocus: this.handleFocus,\n ref: this.refInput,\n };\n\n return (\n <RenderLayer onFocusOutside={this.handleBlur} onClickOutside={this.handleClickOutside} active={focused}>\n <span\n data-tid={AutocompleteDataTids.root}\n className={styles.root(this.theme)}\n style={{ width }}\n ref={this.refRootSpan}\n >\n <Input {...inputProps} />\n {isMobile ? this.renderMobileMenu() : this.renderMenu()}\n </span>\n </RenderLayer>\n );\n };\n\n private renderMenu(): React.ReactNode {\n const items = this.state.items;\n const { menuMaxHeight, hasShadow, menuWidth, width, preventWindowScroll, menuAlign, disablePortal } =\n this.getProps();\n const menuProps = {\n ref: this.refMenu,\n maxHeight: menuMaxHeight,\n hasShadow,\n width: menuWidth || (width && getDOMRect(this.rootSpan).width),\n preventWindowScroll,\n };\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <DropdownContainer offsetY={1} getParent={this.getAnchor} align={menuAlign} disablePortal={disablePortal}>\n <Menu {...menuProps}>{this.getItems()}</Menu>\n </DropdownContainer>\n );\n }\n\n private renderMobileMenu = () => {\n const inputProps: InputProps = {\n autoFocus: true,\n width: '100%',\n onValueChange: this.handleValueChange,\n onKeyPress: this.handleKeyPressMobile,\n value: this.props.value,\n placeholder: 'Начните вводить',\n };\n\n const items = this.state.items;\n\n return (\n <MobilePopup\n headerChildComponent={<Input {...inputProps} />}\n caption={this.props.mobileMenuHeaderText}\n useFullHeight\n opened={this.state.isMobileOpened}\n onCloseRequest={this.handleCloseMobile}\n ref={this.refMobilePopup}\n >\n <Menu ref={this.refMenu} onItemClick={this.mobilePopup?.close} disableScrollContainer maxHeight={'auto'}>\n {items && items.length > 0 && this.getItems()}\n </Menu>\n </MobilePopup>\n );\n };\n\n private getItems = () => {\n const items = this.state.items;\n const isMobile = this.isMobileLayout;\n\n return items\n ? items.map((item, i) => {\n return (\n <MenuItem onClick={this.handleMenuItemClick(i)} key={i} isMobile={isMobile}>\n {this.getProps().renderItem(item)}\n </MenuItem>\n );\n })\n : null;\n };\n\n private handleValueChange = (value: string) => {\n this.opened = true;\n\n this.fireChange(value);\n };\n\n private handleCloseMobile = () => {\n this.setState({\n isMobileOpened: false,\n });\n\n this.handleBlur();\n };\n\n private handleKeyPressMobile = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.mobilePopup?.close();\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n if (this.isMobileLayout) {\n this.setState({ isMobileOpened: true });\n }\n\n if (this.state.focused) {\n return;\n }\n\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = () => {\n if (!this.state.focused) {\n return;\n }\n\n this.opened = false;\n this.setState({ items: null, focused: false });\n\n if (this.input) {\n this.input.blur();\n }\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n switch (true) {\n case isKeyEscape(e):\n e.preventDefault();\n this.setState({ items: null });\n return;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n return;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n return;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n return;\n }\n };\n\n private handleMenuItemClick(i: number) {\n return (event: React.SyntheticEvent<HTMLElement>) => this.handleItemClick(event, i);\n }\n\n private getAnchor = () => {\n return getRootNode(this);\n };\n\n private handleItemClick(event: React.SyntheticEvent<HTMLElement> | React.MouseEvent<HTMLElement>, index: number) {\n if ((event as React.MouseEvent<HTMLElement>).button) {\n return;\n }\n\n event.preventDefault();\n this.choose(index);\n }\n\n private choose(index: number) {\n if (!this.state.items) {\n return;\n }\n\n const value = this.state.items[index];\n this.opened = false;\n this.setState({\n selected: -1,\n items: null,\n });\n\n this.fireChange(value);\n this.blur();\n }\n\n private updateItems(value: string) {\n if (!this.opened) {\n return;\n }\n const pattern = value.trim();\n const source = this.props.source;\n\n if (!source) {\n return;\n }\n\n let promise;\n this.requestId += 1;\n const expectingId = this.requestId;\n if (typeof source === 'function') {\n promise = source(pattern);\n } else {\n promise = match(pattern, source);\n }\n promise.then((items) => {\n if (this.opened && expectingId === this.requestId) {\n this.setState({\n items,\n selected: -1,\n });\n }\n });\n }\n\n private fireChange(value: string) {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n }\n\n private refInput = (el: Input | null) => {\n this.input = el;\n };\n\n private refMenu = (menu: Menu | null) => {\n this.menu = menu;\n };\n\n private refRootSpan = (span: HTMLSpanElement) => {\n this.rootSpan = span;\n };\n\n private refMobilePopup = (mobilePopup: MobilePopup | null) => {\n this.mobilePopup = mobilePopup;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Autocomplete.tsx"],"names":["match","pattern","items","Promise","resolve","lowerCasedPattern","toLowerCase","itemsMatchingPattern","filter","item","includes","renderItem","AutocompleteDataTids","root","Autocomplete","responsiveLayout","rootNode","state","selected","focused","isMobileOpened","opened","input","requestId","getProps","defaultProps","renderMain","props","isMobile","isMobileLayout","onValueChange","onKeyDown","onFocus","onBlur","_renderItem","disablePortal","hasShadow","menuAlign","menuMaxHeight","preventWindowScroll","source","width","theme","inputWidth","mobileMenuHeaderText","rest","inputProps","handleValueChange","handleKeyDown","handleFocus","ref","refInput","handleBlur","handleClickOutside","styles","refRootSpan","renderMobileMenu","renderMenu","autoFocus","onKeyPress","handleKeyPressMobile","value","placeholder","handleCloseMobile","refMobilePopup","refMenu","mobilePopup","close","length","getItems","map","i","handleMenuItemClick","fireChange","setState","e","key","event","blur","preventDefault","menu","up","down","enter","getAnchor","el","span","rootSpan","focus","componentDidUpdate","prevProps","updateItems","render","setRootNode","menuWidth","menuPos","menuProps","maxHeight","handleItemClick","index","button","choose","trim","promise","expectingId","then","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","func","oneOfType","array","size"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { KeyboardEvent } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter, isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport { Input, InputProps } from '../Input';\nimport { DropdownContainer, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\n\nimport { styles } from './Autocomplete.styles';\n\nfunction match(pattern: string, items: string[]) {\n if (!pattern || !items) {\n return Promise.resolve([]);\n }\n\n const lowerCasedPattern = pattern.toLowerCase();\n const itemsMatchingPattern = items.filter((item) => {\n return item.toLowerCase().includes(lowerCasedPattern);\n });\n\n return Promise.resolve(itemsMatchingPattern);\n}\n\nfunction renderItem(item: any) {\n return item;\n}\n\nexport interface AutocompleteProps\n extends CommonProps,\n Pick<DropdownContainerProps, 'menuPos'>,\n Override<\n InputProps,\n {\n /** Функция отрисовки элемента меню */\n renderItem?: (item: string) => React.ReactNode;\n /** Промис, резолвящий элементы меню */\n source?: string[] | ((patter: string) => Promise<string[]>);\n /** Отключает использование портала */\n disablePortal?: boolean;\n /** Отрисовка тени у выпадающего меню */\n hasShadow?: boolean;\n /** Выравнивание выпадающего меню */\n menuAlign?: 'left' | 'right';\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Отключить скролл окна, когда меню открыто */\n preventWindowScroll?: boolean;\n /** Вызывается при изменении `value` */\n onValueChange: (value: string) => void;\n /** onBlur */\n onBlur?: () => void;\n /** Размер инпута */\n size?: InputProps['size'];\n /** value */\n value: string;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n }\n > {}\n\nexport interface AutocompleteState {\n items: Nullable<string[]>;\n selected: number;\n focused: boolean;\n isMobileOpened: boolean;\n}\n\nexport const AutocompleteDataTids = {\n root: 'Autocomplete__root',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n AutocompleteProps,\n 'renderItem' | 'size' | 'disablePortal' | 'hasShadow' | 'menuMaxHeight' | 'menuAlign' | 'preventWindowScroll'\n >\n>;\n\n/**\n * Стандартный инпут с подсказками.\n *\n * Все свойства передаются во внутренний *Input*.\n */\n@responsiveLayout\n@rootNode\nexport class Autocomplete extends React.Component<AutocompleteProps, AutocompleteState> {\n public static __KONTUR_REACT_UI__ = 'Autocomplete';\n\n public static propTypes = {\n /**\n * Функция для отрисовки элемента в выпадающем списке. Единственный аргумент\n * — *item*.\n */\n renderItem: PropTypes.func,\n\n /**\n * Если передан массив, то совпадения ищутся по этому массиву.\n *\n * Если передается функция, то она должна возвращать thenable, который\n * резолвится уже отфильтрованным массивом. Возвращенный thenable может\n * иметь метод cancel, который будет вызван при отмене поиска (пользователь\n * изменил строку поиска, автокомплит потерял фокус).\n * ```\n * function(pattern) {\n * return service.findAll(pattern);\n * }\n * ```\n */\n source: PropTypes.oneOfType([PropTypes.array, PropTypes.func]),\n };\n\n public static defaultProps: DefaultProps = {\n renderItem,\n size: 'small',\n disablePortal: false,\n hasShadow: true,\n menuMaxHeight: 300,\n menuAlign: 'left',\n preventWindowScroll: true,\n };\n\n public state: AutocompleteState = {\n items: null,\n selected: -1,\n focused: false,\n isMobileOpened: false,\n };\n\n private theme!: Theme;\n private isMobileLayout!: boolean;\n private opened = false;\n private input: Nullable<Input> = null;\n private menu: Nullable<Menu>;\n private rootSpan: Nullable<HTMLSpanElement>;\n private mobilePopup: Nullable<MobilePopup>;\n\n private requestId = 0;\n\n private getProps = createPropsGetter(Autocomplete.defaultProps);\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public focus() {\n if (this.input) {\n this.input.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n this.handleBlur();\n }\n\n public componentDidUpdate(prevProps: AutocompleteProps) {\n if (prevProps.value !== this.props.value) {\n this.updateItems(this.props.value || '');\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n public renderMain = (props: CommonWrapperRestProps<AutocompleteProps>) => {\n const { focused } = this.state;\n\n const isMobile = this.isMobileLayout;\n\n const {\n onValueChange,\n onKeyDown,\n onFocus,\n onBlur,\n renderItem: _renderItem,\n disablePortal,\n hasShadow,\n menuAlign,\n menuMaxHeight,\n preventWindowScroll,\n source,\n width = this.theme.inputWidth,\n mobileMenuHeaderText,\n ...rest\n } = props;\n\n const inputProps = {\n ...rest,\n width: '100%',\n onValueChange: this.handleValueChange,\n onKeyDown: this.handleKeyDown,\n onFocus: this.handleFocus,\n ref: this.refInput,\n };\n\n return (\n <RenderLayer onFocusOutside={this.handleBlur} onClickOutside={this.handleClickOutside} active={focused}>\n <span\n data-tid={AutocompleteDataTids.root}\n className={styles.root(this.theme)}\n style={{ width }}\n ref={this.refRootSpan}\n >\n <Input {...inputProps} />\n {isMobile ? this.renderMobileMenu() : this.renderMenu()}\n </span>\n </RenderLayer>\n );\n };\n\n private renderMenu(): React.ReactNode {\n const items = this.state.items;\n const { menuMaxHeight, hasShadow, menuWidth, width, preventWindowScroll, menuAlign, disablePortal, menuPos } =\n this.getProps();\n const menuProps = {\n ref: this.refMenu,\n maxHeight: menuMaxHeight,\n hasShadow,\n width: menuWidth || (width && getDOMRect(this.rootSpan).width),\n preventWindowScroll,\n };\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <DropdownContainer\n offsetY={1}\n getParent={this.getAnchor}\n align={menuAlign}\n disablePortal={disablePortal}\n menuPos={menuPos}\n >\n <Menu {...menuProps}>{this.getItems()}</Menu>\n </DropdownContainer>\n );\n }\n\n private renderMobileMenu = () => {\n const inputProps: InputProps = {\n autoFocus: true,\n width: '100%',\n onValueChange: this.handleValueChange,\n onKeyPress: this.handleKeyPressMobile,\n value: this.props.value,\n placeholder: 'Начните вводить',\n };\n\n const items = this.state.items;\n\n return (\n <MobilePopup\n headerChildComponent={<Input {...inputProps} />}\n caption={this.props.mobileMenuHeaderText}\n useFullHeight\n opened={this.state.isMobileOpened}\n onCloseRequest={this.handleCloseMobile}\n ref={this.refMobilePopup}\n >\n <Menu ref={this.refMenu} onItemClick={this.mobilePopup?.close} disableScrollContainer maxHeight={'auto'}>\n {items && items.length > 0 && this.getItems()}\n </Menu>\n </MobilePopup>\n );\n };\n\n private getItems = () => {\n const items = this.state.items;\n const isMobile = this.isMobileLayout;\n\n return items\n ? items.map((item, i) => {\n return (\n <MenuItem onClick={this.handleMenuItemClick(i)} key={i} isMobile={isMobile}>\n {this.getProps().renderItem(item)}\n </MenuItem>\n );\n })\n : null;\n };\n\n private handleValueChange = (value: string) => {\n this.opened = true;\n\n this.fireChange(value);\n };\n\n private handleCloseMobile = () => {\n this.setState({\n isMobileOpened: false,\n });\n\n this.handleBlur();\n };\n\n private handleKeyPressMobile = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.mobilePopup?.close();\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n if (this.isMobileLayout) {\n this.setState({ isMobileOpened: true });\n }\n\n if (this.state.focused) {\n return;\n }\n\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = () => {\n if (!this.state.focused) {\n return;\n }\n\n this.opened = false;\n this.setState({ items: null, focused: false });\n\n if (this.input) {\n this.input.blur();\n }\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n switch (true) {\n case isKeyEscape(e):\n e.preventDefault();\n this.setState({ items: null });\n return;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n return;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n return;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n return;\n }\n };\n\n private handleMenuItemClick(i: number) {\n return (event: React.SyntheticEvent<HTMLElement>) => this.handleItemClick(event, i);\n }\n\n private getAnchor = () => {\n return getRootNode(this);\n };\n\n private handleItemClick(event: React.SyntheticEvent<HTMLElement> | React.MouseEvent<HTMLElement>, index: number) {\n if ((event as React.MouseEvent<HTMLElement>).button) {\n return;\n }\n\n event.preventDefault();\n this.choose(index);\n }\n\n private choose(index: number) {\n if (!this.state.items) {\n return;\n }\n\n const value = this.state.items[index];\n this.opened = false;\n this.setState({\n selected: -1,\n items: null,\n });\n\n this.fireChange(value);\n this.blur();\n }\n\n private updateItems(value: string) {\n if (!this.opened) {\n return;\n }\n const pattern = value.trim();\n const source = this.props.source;\n\n if (!source) {\n return;\n }\n\n let promise;\n this.requestId += 1;\n const expectingId = this.requestId;\n if (typeof source === 'function') {\n promise = source(pattern);\n } else {\n promise = match(pattern, source);\n }\n promise.then((items) => {\n if (this.opened && expectingId === this.requestId) {\n this.setState({\n items,\n selected: -1,\n });\n }\n });\n }\n\n private fireChange(value: string) {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n }\n\n private refInput = (el: Input | null) => {\n this.input = el;\n };\n\n private refMenu = (menu: Menu | null) => {\n this.menu = menu;\n };\n\n private refRootSpan = (span: HTMLSpanElement) => {\n this.rootSpan = span;\n };\n\n private refMobilePopup = (mobilePopup: MobilePopup | null) => {\n this.mobilePopup = mobilePopup;\n };\n}\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { DropdownContainerProps } from '../../internal/DropdownContainer';
|
|
2
3
|
import { Nullable } from '../../typings/utility-types';
|
|
3
4
|
import { MenuItemState } from '../MenuItem';
|
|
4
5
|
import { InputIconType } from '../Input';
|
|
5
6
|
import { CommonProps } from '../../internal/CommonWrapper';
|
|
6
|
-
export interface ComboBoxProps<T> extends CommonProps {
|
|
7
|
+
export interface ComboBoxProps<T> extends Pick<DropdownContainerProps, 'menuPos'>, CommonProps {
|
|
7
8
|
align?: 'left' | 'center' | 'right';
|
|
8
9
|
/**
|
|
9
10
|
* Вызывает функцию поиска `getItems` при фокусе и очистке поля ввода
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.ComboBox = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
|
|
2
2
|
|
|
3
|
+
|
|
3
4
|
var _CustomComboBox = require("../../internal/CustomComboBox");
|
|
4
5
|
|
|
5
6
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ComboBox.tsx"],"names":["ComboBox","rootNode","getProps","defaultProps","comboboxElement","customComboBoxRef","element","setRootNode","focus","blur","search","query","cancelSearch","open","close","selectInputText","reset","render","React","Component","__KONTUR_REACT_UI__","itemToValue","item","value","valueToString","label","renderValue","renderItem","menuAlign","searchOnFocus","drawArrow"],"mappings":"sUAAA;;AAEA;;;;;AAKA;AACA,gE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyLaA,Q,OADZC,kB;;;;;;;;;;;;;AAcSC,IAAAA,Q,GAAW,0CAAkBF,QAAQ,CAACG,YAA3B,C;;AAEXC,IAAAA,e,GAA+C,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqF/CC,IAAAA,iB,GAAoB,UAACC,OAAD,EAA0C;AACpE,YAAKC,WAAL,CAAiBD,OAAjB;AACA,YAAKF,eAAL,GAAuBE,OAAvB;AACD,K,gDArFD;AACF;AACA,K,OACSE,K,GAAP,iBAAe,CACb,IAAI,KAAKJ,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBI,KAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,I,GAAP,gBAAc,CACZ,IAAI,KAAKL,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBK,IAArB,GACD,CACF,C,CAED;AACF;AACA;AACA;AACA;AACA;AACA,K,QACSC,M,GAAP,gBAAcC,KAAd,EAA8B,CAC5B,IAAI,KAAKP,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBM,MAArB,CAA4BC,KAA5B,EACD,CACF,C,CAED;AACF;AACA,K,QACSC,Y,GAAP,wBAAsB,CACpB,IAAI,KAAKR,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBQ,YAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,I,GAAP,gBAAc,CACZ,IAAI,KAAKT,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBS,IAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,K,GAAP,iBAAe,CACb,IAAI,KAAKV,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBU,KAArB,GACD,CACF,C,CAED;AACF;AACA;AACA,K,QACSC,e,GAAP,2BAAyB,CACvB,IAAI,KAAKX,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBW,eAArB,GACD,CACF,C,CAED;AACF;AACA;AACA,K,QACSC,K,GAAP,iBAAe,CACb,IAAI,KAAKZ,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBY,KAArB,GACD,CACF,C,QAEMC,M,GAAP,kBAAgB,CACd,oBAAO,6BAAC,8BAAD,6BAAoB,KAAKf,QAAL,EAApB,IAAqC,GAAG,EAAE,KAAKG,iBAA/C,IAAP,CACD,C,mBAlG6Ca,eAAMC,S,WACtCC,mB,GAAsB,U,UAEtBjB,Y,GAAkC,EAC9CkB,WAAW,EAAE,qBAACC,IAAD,UAAwBA,IAAI,CAACC,KAA7B,EADiC,EAE9CC,aAAa,EAAE,uBAACF,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAF+B,EAG9CC,WAAW,EAAE,qBAACJ,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAHiC,EAI9CE,UAAU,EAAE,oBAACL,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAJkC,EAK9CG,SAAS,EAAE,MALmC,EAM9CC,aAAa,EAAE,IAN+B,EAO9CC,SAAS,EAAE,IAPmC,E","sourcesContent":["import React from 'react';\n\nimport { CustomComboBox } from '../../internal/CustomComboBox';\nimport { Nullable } from '../../typings/utility-types';\nimport { MenuItemState } from '../MenuItem';\nimport { InputIconType } from '../Input';\nimport { CommonProps } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nexport interface ComboBoxProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n /**\n * Вызывает функцию поиска `getItems` при фокусе и очистке поля ввода\n * @default true\n */\n searchOnFocus?: boolean;\n /**\n * Рисует справа иконку в виде стрелки\n * @default true\n */\n drawArrow?: boolean;\n\n autoFocus?: boolean;\n\n borderless?: boolean;\n\n /**\n * Не использовать Portal для рендеринга меню.\n * См. https://github.com/skbkontur/retail-ui/issues/15\n * @default false\n */\n disablePortal?: boolean;\n\n disabled?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n\n leftIcon?: InputIconType;\n\n rightIcon?: InputIconType;\n\n /**\n * Функция поиска элементов, должна возвращать Promise с массивом элементов.\n * По умолчанию ожидаются объекты с типом `{ value: string, label: string }`.\n *\n * Элементы могут быть любого типа. В этом случае необходимо определить\n * свойства `itemToValue`, `renderValue`, `renderItem`, `valueToString`\n */\n getItems: (query: string) => Promise<T[]>;\n\n /**\n * Необходим для сравнения полученных результатов с `value`\n * @default item => item.label\n */\n itemToValue?: (item: T) => string | number;\n\n maxLength?: number;\n\n menuAlign?: 'left' | 'right';\n\n onBlur?: () => void;\n\n /** Вызывается при изменении `value` */\n onValueChange?: (value: T) => void;\n\n onFocus?: () => void;\n\n /**\n * Вызывается при изменении текста в поле ввода,\n * если результатом функции будет строка,\n * то она станет следующим состоянием полем ввода\n */\n onInputValueChange?: (value: string) => Nullable<string> | void;\n\n /**\n * Функция для обработки ситуации, когда была введена\n * строка в инпут и был потерян фокус с элемента.\n *\n * Если при потере фокуса в выпадающем списке будет только один\n * элемент и результат `renderValue` с этим элементом будет\n * совпадать со значение в текстовом поле, то\n * сработает onValueChange со значением данного элемента\n *\n * Сама функция также может вернуть значение,\n * неравное `undefined`,\n * с которым будет вызван onValueChange.\n */\n onUnexpectedInput?: (value: string) => void | null | T;\n\n placeholder?: string;\n\n /**\n * Функция отрисовки элементов результата поиска.\n * Не применяется если элемент является функцией или React-элементом\n * @default item => item.label\n */\n renderItem?: (item: T, state?: MenuItemState) => React.ReactNode;\n\n /**\n * Компонент, заменяющий собой обёртку элементов результата поиска.\n *\n * По умолчанию все элементы результата поиска оборачиваются в тег `<button />`.\n *\n * @example\n * itemWrapper={(item) => {\n * if (item.value === 3) {\n * return (props) => {\n * return <a {...props} />\n * }\n * }\n * }}\n */\n itemWrapper?: (item?: T) => React.ComponentType<unknown>;\n\n /**\n * Функция для отрисовки сообщения о пустом результате поиска\n * Если есть renderAddButton - не работает\n */\n renderNotFound?: () => React.ReactNode;\n\n /**\n * Функция отображающая сообщение об общем количестве элементов.\n * `found` учитывает только компонент `MenuItem`. Им \"оборачиваются\" элементы, возвращаемые `getItems()`.\n */\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n\n /**\n * Функция отрисовки выбранного значения\n * @default item => item.label\n */\n renderValue?: (item: T) => React.ReactNode;\n\n /**\n * Функция отрисовки кнопки добавления в выпадающем списке\n */\n renderAddButton?: (query?: string) => React.ReactNode;\n\n /**\n * Общее количество элементов.\n * Необходим для работы `renderTotalCount`\n */\n totalCount?: number;\n\n /**\n * Выбранное значение\n * Ожидается, что `value` того же типа что и элементы в массиве,\n * возвращаемом в `getItems`\n */\n value?: Nullable<T>;\n\n /**\n * Необходим для преобразования `value` в строку при фокусировке\n * @default item => item.label\n */\n valueToString?: (item: T) => string;\n\n size?: 'small' | 'medium' | 'large';\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n\n width?: string | number;\n\n maxMenuHeight?: number | string;\n\n onMouseEnter?: (e: React.MouseEvent) => void;\n\n onMouseOver?: (e: React.MouseEvent) => void;\n\n onMouseLeave?: (e: React.MouseEvent) => void;\n\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface ComboBoxItem {\n value: string;\n label: string;\n}\n\ntype DefaultProps<T> = Required<\n Pick<\n ComboBoxProps<T>,\n 'itemToValue' | 'valueToString' | 'renderValue' | 'renderItem' | 'menuAlign' | 'searchOnFocus' | 'drawArrow'\n >\n>;\n\n@rootNode\nexport class ComboBox<T = ComboBoxItem> extends React.Component<ComboBoxProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBox';\n\n public static defaultProps: DefaultProps<any> = {\n itemToValue: (item: ComboBoxItem) => item.value,\n valueToString: (item: ComboBoxItem) => item.label,\n renderValue: (item: ComboBoxItem) => item.label,\n renderItem: (item: ComboBoxItem) => item.label,\n menuAlign: 'left',\n searchOnFocus: true,\n drawArrow: true,\n };\n\n private getProps = createPropsGetter(ComboBox.defaultProps);\n\n private comboboxElement: Nullable<CustomComboBox<T>> = null;\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public focus() {\n if (this.comboboxElement) {\n this.comboboxElement.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.comboboxElement) {\n this.comboboxElement.blur();\n }\n }\n\n /**\n * Открывает выпадающий список и запускает поиск элементов\n *\n * @public\n * @param {string} [query] Текст поиска. По умолчанию берется\n * текст из инпута или результат `valueToString(value)`\n */\n public search(query?: string) {\n if (this.comboboxElement) {\n this.comboboxElement.search(query);\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.comboboxElement) {\n this.comboboxElement.cancelSearch();\n }\n }\n\n /**\n * @public Открывает выпадающий список\n */\n public open() {\n if (this.comboboxElement) {\n this.comboboxElement.open();\n }\n }\n\n /**\n * @public Закрывает выпадающий список\n */\n public close() {\n if (this.comboboxElement) {\n this.comboboxElement.close();\n }\n }\n\n /**\n * Выделяет текст внутри input\n * @public\n */\n public selectInputText() {\n if (this.comboboxElement) {\n this.comboboxElement.selectInputText();\n }\n }\n\n /**\n * Сбрасывает введенное пользователем значение\n * @public\n */\n public reset() {\n if (this.comboboxElement) {\n this.comboboxElement.reset();\n }\n }\n\n public render() {\n return <CustomComboBox {...this.getProps()} ref={this.customComboBoxRef} />;\n }\n\n private customComboBoxRef = (element: Nullable<CustomComboBox<T>>) => {\n this.setRootNode(element);\n this.comboboxElement = element;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["ComboBox.tsx"],"names":["ComboBox","rootNode","getProps","defaultProps","comboboxElement","customComboBoxRef","element","setRootNode","focus","blur","search","query","cancelSearch","open","close","selectInputText","reset","render","React","Component","__KONTUR_REACT_UI__","itemToValue","item","value","valueToString","label","renderValue","renderItem","menuAlign","searchOnFocus","drawArrow"],"mappings":"sUAAA;;;AAGA;;;;;AAKA;AACA,gE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyLaA,Q,OADZC,kB;;;;;;;;;;;;;AAcSC,IAAAA,Q,GAAW,0CAAkBF,QAAQ,CAACG,YAA3B,C;;AAEXC,IAAAA,e,GAA+C,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqF/CC,IAAAA,iB,GAAoB,UAACC,OAAD,EAA0C;AACpE,YAAKC,WAAL,CAAiBD,OAAjB;AACA,YAAKF,eAAL,GAAuBE,OAAvB;AACD,K,gDArFD;AACF;AACA,K,OACSE,K,GAAP,iBAAe,CACb,IAAI,KAAKJ,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBI,KAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,I,GAAP,gBAAc,CACZ,IAAI,KAAKL,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBK,IAArB,GACD,CACF,C,CAED;AACF;AACA;AACA;AACA;AACA;AACA,K,QACSC,M,GAAP,gBAAcC,KAAd,EAA8B,CAC5B,IAAI,KAAKP,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBM,MAArB,CAA4BC,KAA5B,EACD,CACF,C,CAED;AACF;AACA,K,QACSC,Y,GAAP,wBAAsB,CACpB,IAAI,KAAKR,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBQ,YAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,I,GAAP,gBAAc,CACZ,IAAI,KAAKT,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBS,IAArB,GACD,CACF,C,CAED;AACF;AACA,K,QACSC,K,GAAP,iBAAe,CACb,IAAI,KAAKV,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBU,KAArB,GACD,CACF,C,CAED;AACF;AACA;AACA,K,QACSC,e,GAAP,2BAAyB,CACvB,IAAI,KAAKX,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBW,eAArB,GACD,CACF,C,CAED;AACF;AACA;AACA,K,QACSC,K,GAAP,iBAAe,CACb,IAAI,KAAKZ,eAAT,EAA0B,CACxB,KAAKA,eAAL,CAAqBY,KAArB,GACD,CACF,C,QAEMC,M,GAAP,kBAAgB,CACd,oBAAO,6BAAC,8BAAD,6BAAoB,KAAKf,QAAL,EAApB,IAAqC,GAAG,EAAE,KAAKG,iBAA/C,IAAP,CACD,C,mBAlG6Ca,eAAMC,S,WACtCC,mB,GAAsB,U,UAEtBjB,Y,GAAkC,EAC9CkB,WAAW,EAAE,qBAACC,IAAD,UAAwBA,IAAI,CAACC,KAA7B,EADiC,EAE9CC,aAAa,EAAE,uBAACF,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAF+B,EAG9CC,WAAW,EAAE,qBAACJ,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAHiC,EAI9CE,UAAU,EAAE,oBAACL,IAAD,UAAwBA,IAAI,CAACG,KAA7B,EAJkC,EAK9CG,SAAS,EAAE,MALmC,EAM9CC,aAAa,EAAE,IAN+B,EAO9CC,SAAS,EAAE,IAPmC,E","sourcesContent":["import React from 'react';\n\nimport { DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { CustomComboBox } from '../../internal/CustomComboBox';\nimport { Nullable } from '../../typings/utility-types';\nimport { MenuItemState } from '../MenuItem';\nimport { InputIconType } from '../Input';\nimport { CommonProps } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nexport interface ComboBoxProps<T> extends Pick<DropdownContainerProps, 'menuPos'>, CommonProps {\n align?: 'left' | 'center' | 'right';\n /**\n * Вызывает функцию поиска `getItems` при фокусе и очистке поля ввода\n * @default true\n */\n searchOnFocus?: boolean;\n /**\n * Рисует справа иконку в виде стрелки\n * @default true\n */\n drawArrow?: boolean;\n\n autoFocus?: boolean;\n\n borderless?: boolean;\n\n /**\n * Не использовать Portal для рендеринга меню.\n * См. https://github.com/skbkontur/retail-ui/issues/15\n * @default false\n */\n disablePortal?: boolean;\n\n disabled?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n\n leftIcon?: InputIconType;\n\n rightIcon?: InputIconType;\n\n /**\n * Функция поиска элементов, должна возвращать Promise с массивом элементов.\n * По умолчанию ожидаются объекты с типом `{ value: string, label: string }`.\n *\n * Элементы могут быть любого типа. В этом случае необходимо определить\n * свойства `itemToValue`, `renderValue`, `renderItem`, `valueToString`\n */\n getItems: (query: string) => Promise<T[]>;\n\n /**\n * Необходим для сравнения полученных результатов с `value`\n * @default item => item.label\n */\n itemToValue?: (item: T) => string | number;\n\n maxLength?: number;\n\n menuAlign?: 'left' | 'right';\n\n onBlur?: () => void;\n\n /** Вызывается при изменении `value` */\n onValueChange?: (value: T) => void;\n\n onFocus?: () => void;\n\n /**\n * Вызывается при изменении текста в поле ввода,\n * если результатом функции будет строка,\n * то она станет следующим состоянием полем ввода\n */\n onInputValueChange?: (value: string) => Nullable<string> | void;\n\n /**\n * Функция для обработки ситуации, когда была введена\n * строка в инпут и был потерян фокус с элемента.\n *\n * Если при потере фокуса в выпадающем списке будет только один\n * элемент и результат `renderValue` с этим элементом будет\n * совпадать со значение в текстовом поле, то\n * сработает onValueChange со значением данного элемента\n *\n * Сама функция также может вернуть значение,\n * неравное `undefined`,\n * с которым будет вызван onValueChange.\n */\n onUnexpectedInput?: (value: string) => void | null | T;\n\n placeholder?: string;\n\n /**\n * Функция отрисовки элементов результата поиска.\n * Не применяется если элемент является функцией или React-элементом\n * @default item => item.label\n */\n renderItem?: (item: T, state?: MenuItemState) => React.ReactNode;\n\n /**\n * Компонент, заменяющий собой обёртку элементов результата поиска.\n *\n * По умолчанию все элементы результата поиска оборачиваются в тег `<button />`.\n *\n * @example\n * itemWrapper={(item) => {\n * if (item.value === 3) {\n * return (props) => {\n * return <a {...props} />\n * }\n * }\n * }}\n */\n itemWrapper?: (item?: T) => React.ComponentType<unknown>;\n\n /**\n * Функция для отрисовки сообщения о пустом результате поиска\n * Если есть renderAddButton - не работает\n */\n renderNotFound?: () => React.ReactNode;\n\n /**\n * Функция отображающая сообщение об общем количестве элементов.\n * `found` учитывает только компонент `MenuItem`. Им \"оборачиваются\" элементы, возвращаемые `getItems()`.\n */\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n\n /**\n * Функция отрисовки выбранного значения\n * @default item => item.label\n */\n renderValue?: (item: T) => React.ReactNode;\n\n /**\n * Функция отрисовки кнопки добавления в выпадающем списке\n */\n renderAddButton?: (query?: string) => React.ReactNode;\n\n /**\n * Общее количество элементов.\n * Необходим для работы `renderTotalCount`\n */\n totalCount?: number;\n\n /**\n * Выбранное значение\n * Ожидается, что `value` того же типа что и элементы в массиве,\n * возвращаемом в `getItems`\n */\n value?: Nullable<T>;\n\n /**\n * Необходим для преобразования `value` в строку при фокусировке\n * @default item => item.label\n */\n valueToString?: (item: T) => string;\n\n size?: 'small' | 'medium' | 'large';\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n\n width?: string | number;\n\n maxMenuHeight?: number | string;\n\n onMouseEnter?: (e: React.MouseEvent) => void;\n\n onMouseOver?: (e: React.MouseEvent) => void;\n\n onMouseLeave?: (e: React.MouseEvent) => void;\n\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface ComboBoxItem {\n value: string;\n label: string;\n}\n\ntype DefaultProps<T> = Required<\n Pick<\n ComboBoxProps<T>,\n 'itemToValue' | 'valueToString' | 'renderValue' | 'renderItem' | 'menuAlign' | 'searchOnFocus' | 'drawArrow'\n >\n>;\n\n@rootNode\nexport class ComboBox<T = ComboBoxItem> extends React.Component<ComboBoxProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBox';\n\n public static defaultProps: DefaultProps<any> = {\n itemToValue: (item: ComboBoxItem) => item.value,\n valueToString: (item: ComboBoxItem) => item.label,\n renderValue: (item: ComboBoxItem) => item.label,\n renderItem: (item: ComboBoxItem) => item.label,\n menuAlign: 'left',\n searchOnFocus: true,\n drawArrow: true,\n };\n\n private getProps = createPropsGetter(ComboBox.defaultProps);\n\n private comboboxElement: Nullable<CustomComboBox<T>> = null;\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public focus() {\n if (this.comboboxElement) {\n this.comboboxElement.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.comboboxElement) {\n this.comboboxElement.blur();\n }\n }\n\n /**\n * Открывает выпадающий список и запускает поиск элементов\n *\n * @public\n * @param {string} [query] Текст поиска. По умолчанию берется\n * текст из инпута или результат `valueToString(value)`\n */\n public search(query?: string) {\n if (this.comboboxElement) {\n this.comboboxElement.search(query);\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.comboboxElement) {\n this.comboboxElement.cancelSearch();\n }\n }\n\n /**\n * @public Открывает выпадающий список\n */\n public open() {\n if (this.comboboxElement) {\n this.comboboxElement.open();\n }\n }\n\n /**\n * @public Закрывает выпадающий список\n */\n public close() {\n if (this.comboboxElement) {\n this.comboboxElement.close();\n }\n }\n\n /**\n * Выделяет текст внутри input\n * @public\n */\n public selectInputText() {\n if (this.comboboxElement) {\n this.comboboxElement.selectInputText();\n }\n }\n\n /**\n * Сбрасывает введенное пользователем значение\n * @public\n */\n public reset() {\n if (this.comboboxElement) {\n this.comboboxElement.reset();\n }\n }\n\n public render() {\n return <CustomComboBox {...this.getProps()} ref={this.customComboBoxRef} />;\n }\n\n private customComboBoxRef = (element: Nullable<CustomComboBox<T>>) => {\n this.setRootNode(element);\n this.comboboxElement = element;\n };\n}\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import PropTypes from 'prop-types';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { Nullable } from '../../typings/utility-types';
|
|
4
|
+
import { DropdownContainerProps } from '../../internal/DropdownContainer';
|
|
4
5
|
import { CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';
|
|
5
6
|
export declare const MIN_WIDTH = 120;
|
|
6
|
-
export interface DatePickerProps extends CommonProps {
|
|
7
|
+
export interface DatePickerProps extends Pick<DropdownContainerProps, 'menuPos'>, CommonProps {
|
|
7
8
|
autoFocus?: boolean;
|
|
8
9
|
disabled?: boolean;
|
|
9
10
|
enableTodayLink?: boolean;
|
|
@@ -261,6 +261,7 @@ DatePicker = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/fu
|
|
|
261
261
|
if (_this.state.opened) {
|
|
262
262
|
picker = /*#__PURE__*/
|
|
263
263
|
_react.default.createElement(_DropdownContainer.DropdownContainer, {
|
|
264
|
+
menuPos: _this.props.menuPos,
|
|
264
265
|
"data-tid": DatePickerDataTids.root,
|
|
265
266
|
getParent: _this.getParent,
|
|
266
267
|
offsetY: 2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["DatePicker.tsx"],"names":["INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePickerDataTids","root","pickerRoot","pickerTodayWrapper","DatePicker","rootNode","getProps","defaultProps","state","opened","canUseMobileNativeDatePicker","input","focused","renderMain","props","picker","value","minDate","maxDate","internalDate","parseValueToDate","date","toNativeFormat","parsedMinDate","formattedMinDate","undefined","parsedMaxDate","formattedMaxDate","getParent","menuAlign","handlePick","handleSelect","enableTodayLink","isHoliday","styles","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","InternalDateTransformer","dateToInternalString","month","year","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","isMobile","focus","componentDidUpdate","render","setRootNode","InternalDate","validate","checks","InternalDateValidateCheck","NotNull","Native","React","PureComponent","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","string","isRequired","oneOf","oneOfType","number","func","MIN_FULLDATE","MAX_FULLDATE","_day","range","order","InternalDateOrder","DMY","separator","InternalDateSeparator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps extends CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n minDate?: string;\n maxDate?: string;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: string | null;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: string) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {string} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday?: (day: string, isWeekend: boolean) => boolean;\n}\n\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\nexport const DatePickerDataTids = {\n root: 'DatePicker__root',\n pickerRoot: 'Picker__root',\n pickerTodayWrapper: 'Picker__todayWrapper',\n} as const;\n\ntype DefaultProps = Required<Pick<DatePickerProps, 'minDate' | 'maxDate' | 'isHoliday'>>;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right']),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps: DefaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: string, isWeekend: boolean) => isWeekend,\n };\n\n private getProps = createPropsGetter(DatePicker.defaultProps);\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<DatePickerProps>) => {\n let picker = null;\n\n const { value } = this.props;\n const { minDate, maxDate } = this.getProps();\n\n const internalDate = this.parseValueToDate(value);\n const date = internalDate ? internalDate.toNativeFormat() : null;\n\n const parsedMinDate = this.parseValueToDate(minDate);\n const formattedMinDate = (parsedMinDate && parsedMinDate.toNativeFormat()) || undefined;\n\n const parsedMaxDate = this.parseValueToDate(maxDate);\n const formattedMaxDate = (parsedMaxDate && parsedMaxDate.toNativeFormat()) || undefined;\n\n if (this.state.opened) {\n picker = (\n <DropdownContainer\n data-tid={DatePickerDataTids.root}\n getParent={this.getParent}\n offsetY={2}\n align={this.props.menuAlign}\n >\n <Picker\n value={date}\n minDate={formattedMinDate}\n maxDate={formattedMaxDate}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={minDate}\n maxDate={maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={minDate}\n maxDate={maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = (dateShape: CalendarDateShape | null) => {\n if (!dateShape) {\n return null;\n }\n\n const value = InternalDateTransformer.dateToInternalString({\n date: dateShape.date,\n month: dateShape.month + 1,\n year: dateShape.year,\n });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.getProps().isHoliday(dateString, isWeekend);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["DatePicker.tsx"],"names":["INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePickerDataTids","root","pickerRoot","pickerTodayWrapper","DatePicker","rootNode","getProps","defaultProps","state","opened","canUseMobileNativeDatePicker","input","focused","renderMain","props","picker","value","minDate","maxDate","internalDate","parseValueToDate","date","toNativeFormat","parsedMinDate","formattedMinDate","undefined","parsedMaxDate","formattedMaxDate","menuPos","getParent","menuAlign","handlePick","handleSelect","enableTodayLink","isHoliday","styles","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","InternalDateTransformer","dateToInternalString","month","year","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","isMobile","focus","componentDidUpdate","render","setRootNode","InternalDate","validate","checks","InternalDateValidateCheck","NotNull","Native","React","PureComponent","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","string","isRequired","oneOf","oneOfType","number","func","MIN_FULLDATE","MAX_FULLDATE","_day","range","order","InternalDateOrder","DMY","separator","InternalDateSeparator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps extends Pick<DropdownContainerProps, 'menuPos'>, CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n minDate?: string;\n maxDate?: string;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: string | null;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: string) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {string} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday?: (day: string, isWeekend: boolean) => boolean;\n}\n\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\nexport const DatePickerDataTids = {\n root: 'DatePicker__root',\n pickerRoot: 'Picker__root',\n pickerTodayWrapper: 'Picker__todayWrapper',\n} as const;\n\ntype DefaultProps = Required<Pick<DatePickerProps, 'minDate' | 'maxDate' | 'isHoliday'>>;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right']),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps: DefaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: string, isWeekend: boolean) => isWeekend,\n };\n\n private getProps = createPropsGetter(DatePicker.defaultProps);\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<DatePickerProps>) => {\n let picker = null;\n\n const { value } = this.props;\n const { minDate, maxDate } = this.getProps();\n\n const internalDate = this.parseValueToDate(value);\n const date = internalDate ? internalDate.toNativeFormat() : null;\n\n const parsedMinDate = this.parseValueToDate(minDate);\n const formattedMinDate = (parsedMinDate && parsedMinDate.toNativeFormat()) || undefined;\n\n const parsedMaxDate = this.parseValueToDate(maxDate);\n const formattedMaxDate = (parsedMaxDate && parsedMaxDate.toNativeFormat()) || undefined;\n\n if (this.state.opened) {\n picker = (\n <DropdownContainer\n menuPos={this.props.menuPos}\n data-tid={DatePickerDataTids.root}\n getParent={this.getParent}\n offsetY={2}\n align={this.props.menuAlign}\n >\n <Picker\n value={date}\n minDate={formattedMinDate}\n maxDate={formattedMaxDate}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={minDate}\n maxDate={maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={minDate}\n maxDate={maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = (dateShape: CalendarDateShape | null) => {\n if (!dateShape) {\n return null;\n }\n\n const value = InternalDateTransformer.dateToInternalString({\n date: dateShape.date,\n month: dateShape.month + 1,\n year: dateShape.year,\n });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.getProps().isHoliday(dateString, isWeekend);\n };\n}\n"]}
|
|
@@ -363,7 +363,7 @@ var styles = (0, _Emotion.memoizeStyle)({
|
|
|
363
363
|
},
|
|
364
364
|
|
|
365
365
|
columnFlexContainer: function columnFlexContainer() {
|
|
366
|
-
return (0, _Emotion.css)(_templateObject37 || (_templateObject37 = (0, _taggedTemplateLiteralLoose2.default)(["\n height: 100%;\n display: flex;\n flex-flow: column;\n overflow-y:
|
|
366
|
+
return (0, _Emotion.css)(_templateObject37 || (_templateObject37 = (0, _taggedTemplateLiteralLoose2.default)(["\n height: 100%;\n display: flex;\n flex-flow: column;\n overflow-y: auto;\n "])));
|
|
367
367
|
|
|
368
368
|
|
|
369
369
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Modal.styles.ts"],"names":["styles","root","css","bg","t","modalBackBg","modalBackOpacity","container","window","modalBg","modalBorderRadius","mobileWindow","centerContainer","mobileCenterContainer","alignTop","close","padding","parseInt","modalCloseButtonPadding","modalCloseButtonColor","modalCloseButtonClickArea","modalCloseButtonHoverColor","modalCloseIconSize","mobileClose","mobileModalCloseButtonRightPadding","mobileModalCloseButtonTopPadding","mobileModalHeaderPadding","mobileModalCloseButtonClickArea","mobileModalCloseIconSize","mobileCloseWithoutHeader","closeWrapper","paddingBottom","modalCloseButtonBottomPadding","legacyGap","modalCloseWrapperLegacyGap","legacyShift","modalCloseButtonLegacyShift","blockSizeX","blockSizeY","mobileCloseWrapper","size","bgDefault","disabled","modalCloseButtonDisabledColor","focus","borderColorFocus","headerWrapper","header","modalHeaderFontSize","modalHeaderLineHeight","modalHeaderPaddingTop","modalPaddingRight","modalHeaderPaddingBottom","modalPaddingLeft","modalHeaderTextColor","mobileHeader","mobileModalHeaderFontSize","mobileModalHeaderLineHeight","body","modalBodyPaddingBottom","modalBodyTextColor","mobileBody","mobileModalBodyPadding","mobileModalBodyFontSize","headerWithClose","rightPadding","modalCloseLegacyGap","mobileHeaderWithClose","footer","modalFooterPaddingTop","modalFooterPaddingBottom","modalFooterTextColor","mobileFooter","mobileModalFooterPadding","footerWrapper","panel","modalFooterPanelPaddingTop","modalFooterPanelPaddingBottom","modalFooterBg","fixedHeader","modalFixedHeaderPaddingBottom","modalFixedHeaderBg","modalFixedHeaderBorder","modalFixedHeaderShadow","mobileFixedHeader","fixedFooter","modalFixedFooterBorder","modalFixedFooterShadow","fixedPanel","modalFixedPanelShadow","headerAddPadding","bodyWithoutHeader","modalPaddingTop","mobileBodyWithoutHeader","bodyWithoutPadding","bodyAddPaddingForPanel","modalPaddingBottom","mobileBodyAddPaddingForPanel","columnFlexContainer"],"mappings":"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","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\nimport { resetButton } from '../../lib/styles/Mixins';\n\nexport const styles = memoizeStyle({\n root() {\n return css`\n height: 100%;\n left: 0;\n position: fixed;\n top: 0;\n width: 100%;\n `;\n },\n\n bg(t: Theme) {\n return css`\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n background: ${t.modalBackBg};\n opacity: ${t.modalBackOpacity};\n `;\n },\n\n container() {\n return css`\n position: relative;\n white-space: nowrap;\n text-align: center;\n height: 100%;\n overflow-y: auto;\n outline: none;\n\n &::before {\n content: '';\n display: inline-block;\n vertical-align: middle;\n height: 80%; /* to vertical align modal 40%/60% of screen height */\n }\n `;\n },\n\n window(t: Theme) {\n return css`\n position: relative;\n white-space: normal;\n margin: auto;\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n background: ${t.modalBg};\n border-radius: ${t.modalBorderRadius};\n `;\n },\n\n mobileWindow() {\n return css`\n width: 100%;\n height: 100%;\n overflow: auto;\n `;\n },\n\n centerContainer() {\n return css`\n position: relative;\n display: inline-block;\n text-align: left;\n vertical-align: middle;\n box-sizing: border-box;\n z-index: 10;\n margin: 40px 20px;\n `;\n },\n\n mobileCenterContainer() {\n return css`\n margin: 0;\n width: 100%;\n height: 100%;\n `;\n },\n\n alignTop() {\n return css`\n vertical-align: top;\n `;\n },\n\n close(t: Theme) {\n const padding = parseInt(t.modalCloseButtonPadding);\n return css`\n ${resetButton()};\n position: absolute;\n display: flex;\n right: ${padding}px;\n top: ${padding}px;\n background: none;\n background: transparent;\n cursor: pointer;\n color: ${t.modalCloseButtonColor};\n text-align: center;\n vertical-align: middle;\n padding: ${t.modalCloseButtonClickArea};\n margin: -${t.modalCloseButtonClickArea};\n\n &:hover {\n color: ${t.modalCloseButtonHoverColor};\n }\n\n & > svg {\n width: ${t.modalCloseIconSize};\n height: ${t.modalCloseIconSize};\n box-sizing: content-box;\n }\n `;\n },\n\n mobileClose(t: Theme) {\n return css`\n right: ${t.mobileModalCloseButtonRightPadding};\n top: ${parseInt(t.mobileModalCloseButtonTopPadding) + parseInt(t.mobileModalHeaderPadding)}px;\n padding: ${t.mobileModalCloseButtonClickArea};\n margin: -${t.mobileModalCloseButtonClickArea};\n\n & > svg {\n width: ${t.mobileModalCloseIconSize};\n height: ${t.mobileModalCloseIconSize};\n }\n `;\n },\n\n mobileCloseWithoutHeader() {\n return css`\n position: static;\n `;\n },\n\n closeWrapper(t: Theme) {\n const padding = parseInt(t.modalCloseButtonPadding);\n const paddingBottom = parseInt(t.modalCloseButtonBottomPadding);\n const legacyGap = parseInt(t.modalCloseWrapperLegacyGap);\n const legacyShift = parseInt(t.modalCloseButtonLegacyShift);\n const blockSizeX = parseInt(t.modalCloseIconSize) + 2 * padding - legacyShift;\n const blockSizeY = parseInt(t.modalCloseIconSize) + padding + paddingBottom + legacyGap;\n return css`\n position: relative;\n float: right;\n width: ${blockSizeX + legacyGap}px;\n height: ${blockSizeY}px;\n `;\n },\n\n mobileCloseWrapper(t: Theme) {\n const size = parseInt(t.mobileModalCloseIconSize) + parseInt(t.mobileModalCloseButtonClickArea) * 2;\n\n return css`\n position: absolute;\n right: ${t.mobileModalCloseButtonRightPadding};\n top: ${t.mobileModalCloseButtonTopPadding};\n padding: 0px;\n margin: 0px;\n display: flex;\n justify-content: center;\n align-items: center;\n width: ${size}px;\n height: ${size}px;\n background: radial-gradient(50% 50% at 50% 50%, ${t.bgDefault} 60%, rgba(255, 255, 255, 0) 100%);\n border-radius: ${size}px;\n `;\n },\n\n disabled(t: Theme) {\n return css`\n pointer-events: none;\n cursor: default;\n color: ${t.modalCloseButtonDisabledColor};\n `;\n },\n\n focus(t: Theme) {\n return css`\n color: ${t.modalCloseButtonHoverColor};\n outline: 2px solid ${t.borderColorFocus};\n `;\n },\n\n headerWrapper() {\n return css`\n position: relative;\n `;\n },\n\n header(t: Theme) {\n return css`\n font-size: ${t.modalHeaderFontSize};\n line-height: ${t.modalHeaderLineHeight};\n padding: ${t.modalHeaderPaddingTop} ${t.modalPaddingRight} ${t.modalHeaderPaddingBottom} ${t.modalPaddingLeft};\n overflow-wrap: break-word;\n word-wrap: break-word;\n color: ${t.modalHeaderTextColor};\n `;\n },\n\n mobileHeader(t: Theme) {\n return css`\n font-size: ${t.mobileModalHeaderFontSize};\n line-height: ${t.mobileModalHeaderLineHeight};\n padding: ${t.mobileModalHeaderPadding};\n `;\n },\n\n body(t: Theme) {\n return css`\n padding: 0 ${t.modalPaddingRight} ${t.modalBodyPaddingBottom} ${t.modalPaddingLeft};\n color: ${t.modalBodyTextColor};\n `;\n },\n\n mobileBody(t: Theme) {\n return css`\n padding: ${t.mobileModalBodyPadding};\n padding-top: 0px;\n display: flex;\n flex-flow: column;\n flex: 1;\n font-size: ${t.mobileModalBodyFontSize};\n `;\n },\n\n headerWithClose(t: Theme) {\n const rightPadding =\n 2 * parseInt(t.modalCloseButtonPadding) + parseInt(t.modalCloseIconSize) + parseInt(t.modalCloseLegacyGap);\n\n return css`\n padding-right: ${rightPadding}px;\n `;\n },\n\n mobileHeaderWithClose(t: Theme) {\n return css`\n padding-right: ${2 * parseInt(t.mobileModalCloseButtonRightPadding) + parseInt(t.mobileModalCloseIconSize)}px;\n `;\n },\n\n footer(t: Theme) {\n return css`\n padding: ${t.modalFooterPaddingTop} ${t.modalPaddingRight} ${t.modalFooterPaddingBottom} ${t.modalPaddingLeft};\n color: ${t.modalFooterTextColor};\n border-radius: 0 0 ${t.modalBorderRadius} ${t.modalBorderRadius};\n `;\n },\n\n mobileFooter(t: Theme) {\n return css`\n padding: ${t.mobileModalFooterPadding};\n `;\n },\n\n footerWrapper() {\n return css`\n position: relative;\n `;\n },\n\n panel(t: Theme) {\n return css`\n padding-top: ${t.modalFooterPanelPaddingTop};\n padding-bottom: ${t.modalFooterPanelPaddingBottom};\n background: ${t.modalFooterBg};\n `;\n },\n\n fixedHeader(t: Theme) {\n return css`\n margin-bottom: 10px;\n padding-bottom: ${t.modalFixedHeaderPaddingBottom};\n background: ${t.modalFixedHeaderBg};\n border-bottom: ${t.modalFixedHeaderBorder};\n\n &:after {\n bottom: 11px;\n content: '';\n position: absolute;\n height: 1px;\n width: 100%;\n left: 0;\n z-index: -1;\n box-shadow: ${t.modalFixedHeaderShadow};\n }\n `;\n },\n\n mobileFixedHeader(t: Theme) {\n return css`\n padding-bottom: ${t.mobileModalHeaderPadding};\n `;\n },\n\n fixedFooter(t: Theme) {\n return css`\n padding-top: 20px;\n margin-top: 10px;\n background: ${t.modalFixedHeaderBg};\n border-top: ${t.modalFixedFooterBorder};\n\n &:before {\n top: 11px;\n content: '';\n position: absolute;\n height: 1px;\n width: 100%;\n left: 0;\n z-index: -1;\n box-shadow: ${t.modalFixedFooterShadow};\n }\n `;\n },\n\n fixedPanel(t: Theme) {\n return css`\n &:before {\n box-shadow: ${t.modalFixedPanelShadow};\n }\n `;\n },\n\n headerAddPadding() {\n return css`\n padding-bottom: 22px;\n `;\n },\n\n bodyWithoutHeader(t: Theme) {\n return css`\n padding-top: ${t.modalPaddingTop};\n `;\n },\n\n mobileBodyWithoutHeader() {\n return css`\n padding-top: 0px;\n `;\n },\n\n bodyWithoutPadding() {\n return css`\n padding: 0;\n `;\n },\n\n bodyAddPaddingForPanel(t: Theme) {\n return css`\n padding-bottom: ${t.modalPaddingBottom};\n `;\n },\n\n mobileBodyAddPaddingForPanel(t: Theme) {\n return css`\n padding-bottom: ${t.mobileModalBodyPadding};\n `;\n },\n\n columnFlexContainer() {\n return css`\n height: 100%;\n display: flex;\n flex-flow: column;\n overflow-y: scroll;\n `;\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["Modal.styles.ts"],"names":["styles","root","css","bg","t","modalBackBg","modalBackOpacity","container","window","modalBg","modalBorderRadius","mobileWindow","centerContainer","mobileCenterContainer","alignTop","close","padding","parseInt","modalCloseButtonPadding","modalCloseButtonColor","modalCloseButtonClickArea","modalCloseButtonHoverColor","modalCloseIconSize","mobileClose","mobileModalCloseButtonRightPadding","mobileModalCloseButtonTopPadding","mobileModalHeaderPadding","mobileModalCloseButtonClickArea","mobileModalCloseIconSize","mobileCloseWithoutHeader","closeWrapper","paddingBottom","modalCloseButtonBottomPadding","legacyGap","modalCloseWrapperLegacyGap","legacyShift","modalCloseButtonLegacyShift","blockSizeX","blockSizeY","mobileCloseWrapper","size","bgDefault","disabled","modalCloseButtonDisabledColor","focus","borderColorFocus","headerWrapper","header","modalHeaderFontSize","modalHeaderLineHeight","modalHeaderPaddingTop","modalPaddingRight","modalHeaderPaddingBottom","modalPaddingLeft","modalHeaderTextColor","mobileHeader","mobileModalHeaderFontSize","mobileModalHeaderLineHeight","body","modalBodyPaddingBottom","modalBodyTextColor","mobileBody","mobileModalBodyPadding","mobileModalBodyFontSize","headerWithClose","rightPadding","modalCloseLegacyGap","mobileHeaderWithClose","footer","modalFooterPaddingTop","modalFooterPaddingBottom","modalFooterTextColor","mobileFooter","mobileModalFooterPadding","footerWrapper","panel","modalFooterPanelPaddingTop","modalFooterPanelPaddingBottom","modalFooterBg","fixedHeader","modalFixedHeaderPaddingBottom","modalFixedHeaderBg","modalFixedHeaderBorder","modalFixedHeaderShadow","mobileFixedHeader","fixedFooter","modalFixedFooterBorder","modalFixedFooterShadow","fixedPanel","modalFixedPanelShadow","headerAddPadding","bodyWithoutHeader","modalPaddingTop","mobileBodyWithoutHeader","bodyWithoutPadding","bodyAddPaddingForPanel","modalPaddingBottom","mobileBodyAddPaddingForPanel","columnFlexContainer"],"mappings":"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","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\nimport { resetButton } from '../../lib/styles/Mixins';\n\nexport const styles = memoizeStyle({\n root() {\n return css`\n height: 100%;\n left: 0;\n position: fixed;\n top: 0;\n width: 100%;\n `;\n },\n\n bg(t: Theme) {\n return css`\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n background: ${t.modalBackBg};\n opacity: ${t.modalBackOpacity};\n `;\n },\n\n container() {\n return css`\n position: relative;\n white-space: nowrap;\n text-align: center;\n height: 100%;\n overflow-y: auto;\n outline: none;\n\n &::before {\n content: '';\n display: inline-block;\n vertical-align: middle;\n height: 80%; /* to vertical align modal 40%/60% of screen height */\n }\n `;\n },\n\n window(t: Theme) {\n return css`\n position: relative;\n white-space: normal;\n margin: auto;\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n background: ${t.modalBg};\n border-radius: ${t.modalBorderRadius};\n `;\n },\n\n mobileWindow() {\n return css`\n width: 100%;\n height: 100%;\n overflow: auto;\n `;\n },\n\n centerContainer() {\n return css`\n position: relative;\n display: inline-block;\n text-align: left;\n vertical-align: middle;\n box-sizing: border-box;\n z-index: 10;\n margin: 40px 20px;\n `;\n },\n\n mobileCenterContainer() {\n return css`\n margin: 0;\n width: 100%;\n height: 100%;\n `;\n },\n\n alignTop() {\n return css`\n vertical-align: top;\n `;\n },\n\n close(t: Theme) {\n const padding = parseInt(t.modalCloseButtonPadding);\n return css`\n ${resetButton()};\n position: absolute;\n display: flex;\n right: ${padding}px;\n top: ${padding}px;\n background: none;\n background: transparent;\n cursor: pointer;\n color: ${t.modalCloseButtonColor};\n text-align: center;\n vertical-align: middle;\n padding: ${t.modalCloseButtonClickArea};\n margin: -${t.modalCloseButtonClickArea};\n\n &:hover {\n color: ${t.modalCloseButtonHoverColor};\n }\n\n & > svg {\n width: ${t.modalCloseIconSize};\n height: ${t.modalCloseIconSize};\n box-sizing: content-box;\n }\n `;\n },\n\n mobileClose(t: Theme) {\n return css`\n right: ${t.mobileModalCloseButtonRightPadding};\n top: ${parseInt(t.mobileModalCloseButtonTopPadding) + parseInt(t.mobileModalHeaderPadding)}px;\n padding: ${t.mobileModalCloseButtonClickArea};\n margin: -${t.mobileModalCloseButtonClickArea};\n\n & > svg {\n width: ${t.mobileModalCloseIconSize};\n height: ${t.mobileModalCloseIconSize};\n }\n `;\n },\n\n mobileCloseWithoutHeader() {\n return css`\n position: static;\n `;\n },\n\n closeWrapper(t: Theme) {\n const padding = parseInt(t.modalCloseButtonPadding);\n const paddingBottom = parseInt(t.modalCloseButtonBottomPadding);\n const legacyGap = parseInt(t.modalCloseWrapperLegacyGap);\n const legacyShift = parseInt(t.modalCloseButtonLegacyShift);\n const blockSizeX = parseInt(t.modalCloseIconSize) + 2 * padding - legacyShift;\n const blockSizeY = parseInt(t.modalCloseIconSize) + padding + paddingBottom + legacyGap;\n return css`\n position: relative;\n float: right;\n width: ${blockSizeX + legacyGap}px;\n height: ${blockSizeY}px;\n `;\n },\n\n mobileCloseWrapper(t: Theme) {\n const size = parseInt(t.mobileModalCloseIconSize) + parseInt(t.mobileModalCloseButtonClickArea) * 2;\n\n return css`\n position: absolute;\n right: ${t.mobileModalCloseButtonRightPadding};\n top: ${t.mobileModalCloseButtonTopPadding};\n padding: 0px;\n margin: 0px;\n display: flex;\n justify-content: center;\n align-items: center;\n width: ${size}px;\n height: ${size}px;\n background: radial-gradient(50% 50% at 50% 50%, ${t.bgDefault} 60%, rgba(255, 255, 255, 0) 100%);\n border-radius: ${size}px;\n `;\n },\n\n disabled(t: Theme) {\n return css`\n pointer-events: none;\n cursor: default;\n color: ${t.modalCloseButtonDisabledColor};\n `;\n },\n\n focus(t: Theme) {\n return css`\n color: ${t.modalCloseButtonHoverColor};\n outline: 2px solid ${t.borderColorFocus};\n `;\n },\n\n headerWrapper() {\n return css`\n position: relative;\n `;\n },\n\n header(t: Theme) {\n return css`\n font-size: ${t.modalHeaderFontSize};\n line-height: ${t.modalHeaderLineHeight};\n padding: ${t.modalHeaderPaddingTop} ${t.modalPaddingRight} ${t.modalHeaderPaddingBottom} ${t.modalPaddingLeft};\n overflow-wrap: break-word;\n word-wrap: break-word;\n color: ${t.modalHeaderTextColor};\n `;\n },\n\n mobileHeader(t: Theme) {\n return css`\n font-size: ${t.mobileModalHeaderFontSize};\n line-height: ${t.mobileModalHeaderLineHeight};\n padding: ${t.mobileModalHeaderPadding};\n `;\n },\n\n body(t: Theme) {\n return css`\n padding: 0 ${t.modalPaddingRight} ${t.modalBodyPaddingBottom} ${t.modalPaddingLeft};\n color: ${t.modalBodyTextColor};\n `;\n },\n\n mobileBody(t: Theme) {\n return css`\n padding: ${t.mobileModalBodyPadding};\n padding-top: 0px;\n display: flex;\n flex-flow: column;\n flex: 1;\n font-size: ${t.mobileModalBodyFontSize};\n `;\n },\n\n headerWithClose(t: Theme) {\n const rightPadding =\n 2 * parseInt(t.modalCloseButtonPadding) + parseInt(t.modalCloseIconSize) + parseInt(t.modalCloseLegacyGap);\n\n return css`\n padding-right: ${rightPadding}px;\n `;\n },\n\n mobileHeaderWithClose(t: Theme) {\n return css`\n padding-right: ${2 * parseInt(t.mobileModalCloseButtonRightPadding) + parseInt(t.mobileModalCloseIconSize)}px;\n `;\n },\n\n footer(t: Theme) {\n return css`\n padding: ${t.modalFooterPaddingTop} ${t.modalPaddingRight} ${t.modalFooterPaddingBottom} ${t.modalPaddingLeft};\n color: ${t.modalFooterTextColor};\n border-radius: 0 0 ${t.modalBorderRadius} ${t.modalBorderRadius};\n `;\n },\n\n mobileFooter(t: Theme) {\n return css`\n padding: ${t.mobileModalFooterPadding};\n `;\n },\n\n footerWrapper() {\n return css`\n position: relative;\n `;\n },\n\n panel(t: Theme) {\n return css`\n padding-top: ${t.modalFooterPanelPaddingTop};\n padding-bottom: ${t.modalFooterPanelPaddingBottom};\n background: ${t.modalFooterBg};\n `;\n },\n\n fixedHeader(t: Theme) {\n return css`\n margin-bottom: 10px;\n padding-bottom: ${t.modalFixedHeaderPaddingBottom};\n background: ${t.modalFixedHeaderBg};\n border-bottom: ${t.modalFixedHeaderBorder};\n\n &:after {\n bottom: 11px;\n content: '';\n position: absolute;\n height: 1px;\n width: 100%;\n left: 0;\n z-index: -1;\n box-shadow: ${t.modalFixedHeaderShadow};\n }\n `;\n },\n\n mobileFixedHeader(t: Theme) {\n return css`\n padding-bottom: ${t.mobileModalHeaderPadding};\n `;\n },\n\n fixedFooter(t: Theme) {\n return css`\n padding-top: 20px;\n margin-top: 10px;\n background: ${t.modalFixedHeaderBg};\n border-top: ${t.modalFixedFooterBorder};\n\n &:before {\n top: 11px;\n content: '';\n position: absolute;\n height: 1px;\n width: 100%;\n left: 0;\n z-index: -1;\n box-shadow: ${t.modalFixedFooterShadow};\n }\n `;\n },\n\n fixedPanel(t: Theme) {\n return css`\n &:before {\n box-shadow: ${t.modalFixedPanelShadow};\n }\n `;\n },\n\n headerAddPadding() {\n return css`\n padding-bottom: 22px;\n `;\n },\n\n bodyWithoutHeader(t: Theme) {\n return css`\n padding-top: ${t.modalPaddingTop};\n `;\n },\n\n mobileBodyWithoutHeader() {\n return css`\n padding-top: 0px;\n `;\n },\n\n bodyWithoutPadding() {\n return css`\n padding: 0;\n `;\n },\n\n bodyAddPaddingForPanel(t: Theme) {\n return css`\n padding-bottom: ${t.modalPaddingBottom};\n `;\n },\n\n mobileBodyAddPaddingForPanel(t: Theme) {\n return css`\n padding-bottom: ${t.mobileModalBodyPadding};\n `;\n },\n\n columnFlexContainer() {\n return css`\n height: 100%;\n display: flex;\n flex-flow: column;\n overflow-y: auto;\n `;\n },\n});\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { ReactNode, ReactPortal } from 'react';
|
|
2
2
|
import { ButtonSize, ButtonUse } from '../Button';
|
|
3
|
+
import { DropdownContainerProps } from '../../internal/DropdownContainer';
|
|
3
4
|
import { Nullable } from '../../typings/utility-types';
|
|
4
5
|
import { CommonProps } from '../../internal/CommonWrapper';
|
|
5
6
|
import { Item } from './Item';
|
|
@@ -15,7 +16,7 @@ export declare const SelectDataTids: {
|
|
|
15
16
|
readonly root: "Select__root";
|
|
16
17
|
};
|
|
17
18
|
declare type SelectItem<TValue, TItem> = [TValue, TItem, React.ReactNode?] | TItem | TValue | React.ReactElement | (() => React.ReactElement);
|
|
18
|
-
export interface SelectProps<TValue, TItem> extends CommonProps {
|
|
19
|
+
export interface SelectProps<TValue, TItem> extends CommonProps, Pick<DropdownContainerProps, 'menuPos'> {
|
|
19
20
|
/** @ignore */
|
|
20
21
|
_icon?: React.ReactNode;
|
|
21
22
|
/** @ignore */
|
|
@@ -479,6 +479,7 @@ Select = (_dec = (0, _decorators.locale)('Select', _locale.SelectLocaleHelper),
|
|
|
479
479
|
|
|
480
480
|
|
|
481
481
|
|
|
482
|
+
|
|
482
483
|
|
|
483
484
|
|
|
484
485
|
getSearch = function (noMargin) {var _cx;
|
|
@@ -667,7 +668,7 @@ Select = (_dec = (0, _decorators.locale)('Select', _locale.SelectLocaleHelper),
|
|
|
667
668
|
buttonElement;
|
|
668
669
|
};return _this;}var _proto = Select.prototype;_proto.componentDidUpdate = function componentDidUpdate(_prevProps, prevState) {if (!prevState.opened && this.state.opened) {window.addEventListener('popstate', this.close);}if (prevState.opened && !this.state.opened) {window.removeEventListener('popstate', this.close);}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: _this2.theme }, _this2.renderMain());});} /**
|
|
669
670
|
* @public
|
|
670
|
-
*/;_proto.getMenuRenderer = function getMenuRenderer() {if (this.props.disabled) {return null;}if (this.isMobileLayout) {return this.renderMobileMenu();}if (this.state.opened) {return this.renderMenu();}return null;};_proto.renderMain = function renderMain() {var _cx2;var buttonParams = this.getDefaultButtonParams();var button = /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: (0, _selectTheme.getSelectTheme)(this.theme, this.props) }, this.getButton(buttonParams));var isMobile = this.isMobileLayout;var style = { width: this.props.width, maxWidth: this.props.maxWidth || undefined };var root = /*#__PURE__*/_react.default.createElement("span", { "data-tid": SelectDataTids.root, className: (0, _Emotion.cx)((_cx2 = {}, _cx2[_Select.styles.root()] = true, _cx2[_Select.styles.rootMobile(this.theme)] = isMobile, _cx2)), style: style }, button, this.getMenuRenderer());return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: this.close, onFocusOutside: this.close, active: isMobile ? false : this.state.opened }, root));};_proto.renderLabel = function renderLabel() {var _this$locale;var value = this.getValue();var item = this.getItemByValue(value);if ((0, _utils.isNonNullable)(value)) {return { label: this.getProps().renderValue(value, item), isPlaceholder: false };}return { label: /*#__PURE__*/_react.default.createElement("span", null, this.props.placeholder || ((_this$locale = this.locale) == null ? void 0 : _this$locale.placeholder)), isPlaceholder: true };};_proto.getLeftIconClass = function getLeftIconClass(size) {if (this.getProps().use === 'link') {return _Select.styles.leftIconLink(this.theme);}switch (size) {case 'large':return _Select.styles.leftIconLarge(this.theme);case 'medium':return _Select.styles.leftIconMedium(this.theme);case 'small':default:return _Select.styles.leftIconSmall(this.theme);}};_proto.renderDefaultButton = function renderDefaultButton(params) {var _cx3, _cx4;var buttonProps = (0, _extends2.default)({}, (0, _filterProps.filterProps)(this.props, PASS_BUTTON_PROPS), { align: 'left', disabled: this.props.disabled, width: '100%', onClick: params.onClick, onKeyDown: params.onKeyDown, active: params.opened });var use = this.getProps().use;var labelProps = { className: (0, _Emotion.cx)((_cx3 = {}, _cx3[_Select.styles.label()] = use !== 'link', _cx3[_Select.styles.placeholder(this.theme)] = params.isPlaceholder, _cx3[_Select.styles.customUsePlaceholder()] = params.isPlaceholder && use !== 'default', _cx3[_Select.styles.placeholderDisabled(this.theme)] = params.isPlaceholder && this.props.disabled, _cx3)), style: { paddingRight: this.getSelectIconGap() } };var useIsCustom = use !== 'default';return /*#__PURE__*/_react.default.createElement(_Button.Button, buttonProps, /*#__PURE__*/_react.default.createElement("div", { className: _Select.styles.selectButtonContainer() }, this.props._icon && /*#__PURE__*/_react.default.createElement("div", { className: this.getLeftIconClass(this.props.size) }, this.props._icon), /*#__PURE__*/_react.default.createElement("span", labelProps, params.label), /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Select.styles.arrowWrap(this.theme), (_cx4 = {}, _cx4[_Select.styles.arrowDisabled(this.theme)] = this.props.disabled, _cx4[_Select.styles.customUseArrow()] = useIsCustom, _cx4)) }, /*#__PURE__*/_react.default.createElement(_px.ArrowChevronDownIcon, null))));};_proto.getSelectIconGap = function getSelectIconGap() {var _this3 = this;var getArrowPadding = function getArrowPadding() {switch (_this3.props.size) {case 'large':return _this3.theme.selectIconGapLarge;case 'medium':return _this3.theme.selectIconGapMedium;case 'small':default:return _this3.theme.selectIconGapSmall;}};var arrowLeftPadding = parseFloat(getArrowPadding()) || 0;return arrowLeftPadding;};_proto.renderMenu = function renderMenu() {var search = this.props.search ? /*#__PURE__*/_react.default.createElement("div", { className: _Select.styles.search(), onKeyDown: this.handleKey }, /*#__PURE__*/_react.default.createElement(_Input.Input, { ref: this.focusInput, onValueChange: this.handleSearch, width: "100%" })) : null;var value = this.getValue();var hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';return /*#__PURE__*/_react.default.createElement(_DropdownContainer.DropdownContainer, { getParent: this.dropdownContainerGetParent, offsetY: -1, align: this.props.menuAlign, disablePortal: this.props.disablePortal, hasFixedWidth: hasFixedWidth }, /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: this.refMenu, width: this.props.menuWidth, onItemClick: this.close, maxHeight: this.props.maxMenuHeight, align: this.props.menuAlign }, search, this.getMenuItems(value)));};_proto.renderMobileMenu = function renderMobileMenu() {var search = this.props.search ? this.getSearch(true) : null;var value = this.getValue();var isWithSearch = Boolean(search);return /*#__PURE__*/_react.default.createElement(_MobilePopup.MobilePopup, { headerChildComponent: search, caption: this.props.mobileMenuHeaderText, useFullHeight: isWithSearch, onCloseRequest: this.close, opened: this.state.opened }, /*#__PURE__*/_react.default.createElement(_Menu.Menu, { hasShadow: false, onItemClick: this.close, disableScrollContainer: true, maxHeight: 'auto' }, this.getMenuItems(value)));};_proto.select = function select(value) {this.focus();this.setState({ opened: false, value: value });if (!this.areValuesEqual(this.getValue(), value)) {var _this$props$onValueCh, _this$props;(_this$props$onValueCh = (_this$props = this.props).onValueChange) == null ? void 0 : _this$props$onValueCh.call(_this$props, value);}};_proto.getValue = function getValue() {if (this.props.value !== undefined) {return this.props.value;}return this.state.value;};_proto.mapItems = function mapItems(fn) {var items = this.props.items;if (!items) {return [];}var pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();var result = [];var index = 0;for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {var entry = _step.value;var _normalizeEntry = normalizeEntry(entry),_value = _normalizeEntry[0],_item = _normalizeEntry[1],_comment = _normalizeEntry[2];if (!pattern || this.getProps().filterItem(_value, _item, pattern)) {result.push(fn(_value, _item, index, _comment));++index;}}return result;};_proto.getItemByValue = function getItemByValue(value) {if (value === null || value === undefined) {return null;}var items = this.props.items || [];for (var _iterator2 = _createForOfIteratorHelperLoose(items), _step2; !(_step2 = _iterator2()).done;) {var entry = _step2.value;var _normalizeEntry2 = normalizeEntry(entry),itemValue = _normalizeEntry2[0],_item2 = _normalizeEntry2[1];if (this.areValuesEqual(itemValue, value)) {return _item2;}}return null;};_proto.areValuesEqual = function areValuesEqual(value1, value2) {return (0, _utils.isNonNullable)(value1) && (0, _utils.isNonNullable)(value2) && this.getProps().areValuesEqual(value1, value2);};return Select;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Select', _class2.defaultProps = { renderValue: renderValue, renderItem: renderItem, areValuesEqual: areValuesEqual, filterItem: filterItem, use: 'default' }, _class2.Item = _Item.Item, _class2.SEP = function () {return /*#__PURE__*/_react.default.createElement(_MenuSeparator.MenuSeparator, null);}, _class2.static = function (element) {(0, _invariant.default)( /*#__PURE__*/_react.default.isValidElement(element) || typeof element === 'function', 'Select.static(element) expects element to be a valid react element.');return element;}, _temp)) || _class) || _class) || _class);exports.Select = Select;
|
|
671
|
+
*/;_proto.getMenuRenderer = function getMenuRenderer() {if (this.props.disabled) {return null;}if (this.isMobileLayout) {return this.renderMobileMenu();}if (this.state.opened) {return this.renderMenu();}return null;};_proto.renderMain = function renderMain() {var _cx2;var buttonParams = this.getDefaultButtonParams();var button = /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: (0, _selectTheme.getSelectTheme)(this.theme, this.props) }, this.getButton(buttonParams));var isMobile = this.isMobileLayout;var style = { width: this.props.width, maxWidth: this.props.maxWidth || undefined };var root = /*#__PURE__*/_react.default.createElement("span", { "data-tid": SelectDataTids.root, className: (0, _Emotion.cx)((_cx2 = {}, _cx2[_Select.styles.root()] = true, _cx2[_Select.styles.rootMobile(this.theme)] = isMobile, _cx2)), style: style }, button, this.getMenuRenderer());return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: this.close, onFocusOutside: this.close, active: isMobile ? false : this.state.opened }, root));};_proto.renderLabel = function renderLabel() {var _this$locale;var value = this.getValue();var item = this.getItemByValue(value);if ((0, _utils.isNonNullable)(value)) {return { label: this.getProps().renderValue(value, item), isPlaceholder: false };}return { label: /*#__PURE__*/_react.default.createElement("span", null, this.props.placeholder || ((_this$locale = this.locale) == null ? void 0 : _this$locale.placeholder)), isPlaceholder: true };};_proto.getLeftIconClass = function getLeftIconClass(size) {if (this.getProps().use === 'link') {return _Select.styles.leftIconLink(this.theme);}switch (size) {case 'large':return _Select.styles.leftIconLarge(this.theme);case 'medium':return _Select.styles.leftIconMedium(this.theme);case 'small':default:return _Select.styles.leftIconSmall(this.theme);}};_proto.renderDefaultButton = function renderDefaultButton(params) {var _cx3, _cx4;var buttonProps = (0, _extends2.default)({}, (0, _filterProps.filterProps)(this.props, PASS_BUTTON_PROPS), { align: 'left', disabled: this.props.disabled, width: '100%', onClick: params.onClick, onKeyDown: params.onKeyDown, active: params.opened });var use = this.getProps().use;var labelProps = { className: (0, _Emotion.cx)((_cx3 = {}, _cx3[_Select.styles.label()] = use !== 'link', _cx3[_Select.styles.placeholder(this.theme)] = params.isPlaceholder, _cx3[_Select.styles.customUsePlaceholder()] = params.isPlaceholder && use !== 'default', _cx3[_Select.styles.placeholderDisabled(this.theme)] = params.isPlaceholder && this.props.disabled, _cx3)), style: { paddingRight: this.getSelectIconGap() } };var useIsCustom = use !== 'default';return /*#__PURE__*/_react.default.createElement(_Button.Button, buttonProps, /*#__PURE__*/_react.default.createElement("div", { className: _Select.styles.selectButtonContainer() }, this.props._icon && /*#__PURE__*/_react.default.createElement("div", { className: this.getLeftIconClass(this.props.size) }, this.props._icon), /*#__PURE__*/_react.default.createElement("span", labelProps, params.label), /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Select.styles.arrowWrap(this.theme), (_cx4 = {}, _cx4[_Select.styles.arrowDisabled(this.theme)] = this.props.disabled, _cx4[_Select.styles.customUseArrow()] = useIsCustom, _cx4)) }, /*#__PURE__*/_react.default.createElement(_px.ArrowChevronDownIcon, null))));};_proto.getSelectIconGap = function getSelectIconGap() {var _this3 = this;var getArrowPadding = function getArrowPadding() {switch (_this3.props.size) {case 'large':return _this3.theme.selectIconGapLarge;case 'medium':return _this3.theme.selectIconGapMedium;case 'small':default:return _this3.theme.selectIconGapSmall;}};var arrowLeftPadding = parseFloat(getArrowPadding()) || 0;return arrowLeftPadding;};_proto.renderMenu = function renderMenu() {var search = this.props.search ? /*#__PURE__*/_react.default.createElement("div", { className: _Select.styles.search(), onKeyDown: this.handleKey }, /*#__PURE__*/_react.default.createElement(_Input.Input, { ref: this.focusInput, onValueChange: this.handleSearch, width: "100%" })) : null;var value = this.getValue();var hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';return /*#__PURE__*/_react.default.createElement(_DropdownContainer.DropdownContainer, { getParent: this.dropdownContainerGetParent, offsetY: -1, align: this.props.menuAlign, disablePortal: this.props.disablePortal, hasFixedWidth: hasFixedWidth, menuPos: this.props.menuPos }, /*#__PURE__*/_react.default.createElement(_Menu.Menu, { ref: this.refMenu, width: this.props.menuWidth, onItemClick: this.close, maxHeight: this.props.maxMenuHeight, align: this.props.menuAlign }, search, this.getMenuItems(value)));};_proto.renderMobileMenu = function renderMobileMenu() {var search = this.props.search ? this.getSearch(true) : null;var value = this.getValue();var isWithSearch = Boolean(search);return /*#__PURE__*/_react.default.createElement(_MobilePopup.MobilePopup, { headerChildComponent: search, caption: this.props.mobileMenuHeaderText, useFullHeight: isWithSearch, onCloseRequest: this.close, opened: this.state.opened }, /*#__PURE__*/_react.default.createElement(_Menu.Menu, { hasShadow: false, onItemClick: this.close, disableScrollContainer: true, maxHeight: 'auto' }, this.getMenuItems(value)));};_proto.select = function select(value) {this.focus();this.setState({ opened: false, value: value });if (!this.areValuesEqual(this.getValue(), value)) {var _this$props$onValueCh, _this$props;(_this$props$onValueCh = (_this$props = this.props).onValueChange) == null ? void 0 : _this$props$onValueCh.call(_this$props, value);}};_proto.getValue = function getValue() {if (this.props.value !== undefined) {return this.props.value;}return this.state.value;};_proto.mapItems = function mapItems(fn) {var items = this.props.items;if (!items) {return [];}var pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();var result = [];var index = 0;for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {var entry = _step.value;var _normalizeEntry = normalizeEntry(entry),_value = _normalizeEntry[0],_item = _normalizeEntry[1],_comment = _normalizeEntry[2];if (!pattern || this.getProps().filterItem(_value, _item, pattern)) {result.push(fn(_value, _item, index, _comment));++index;}}return result;};_proto.getItemByValue = function getItemByValue(value) {if (value === null || value === undefined) {return null;}var items = this.props.items || [];for (var _iterator2 = _createForOfIteratorHelperLoose(items), _step2; !(_step2 = _iterator2()).done;) {var entry = _step2.value;var _normalizeEntry2 = normalizeEntry(entry),itemValue = _normalizeEntry2[0],_item2 = _normalizeEntry2[1];if (this.areValuesEqual(itemValue, value)) {return _item2;}}return null;};_proto.areValuesEqual = function areValuesEqual(value1, value2) {return (0, _utils.isNonNullable)(value1) && (0, _utils.isNonNullable)(value2) && this.getProps().areValuesEqual(value1, value2);};return Select;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Select', _class2.defaultProps = { renderValue: renderValue, renderItem: renderItem, areValuesEqual: areValuesEqual, filterItem: filterItem, use: 'default' }, _class2.Item = _Item.Item, _class2.SEP = function () {return /*#__PURE__*/_react.default.createElement(_MenuSeparator.MenuSeparator, null);}, _class2.static = function (element) {(0, _invariant.default)( /*#__PURE__*/_react.default.isValidElement(element) || typeof element === 'function', 'Select.static(element) expects element to be a valid react element.');return element;}, _temp)) || _class) || _class) || _class);exports.Select = Select;
|
|
671
672
|
function renderValue(value, item) {
|
|
672
673
|
return item;
|
|
673
674
|
}
|