@skbkontur/react-ui 4.0.3 → 4.0.4
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 +12 -0
- package/cjs/components/Button/Button.d.ts +2 -2
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.d.ts +2 -2
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/ComboBox/ComboBox.d.ts +3 -3
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/CurrencyInput/CurrencyInput.d.ts +1 -1
- package/cjs/components/CurrencyInput/CurrencyInput.js +3 -3
- package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
- package/cjs/components/DateInput/DateInput.d.ts +2 -2
- package/cjs/components/DateInput/DateInput.js.map +1 -1
- package/cjs/components/DatePicker/DatePicker.d.ts +2 -2
- package/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/cjs/components/Dropdown/Dropdown.d.ts +2 -2
- package/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/cjs/components/Hint/Hint.d.ts +1 -1
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +3 -3
- package/cjs/components/Input/Input.js +1 -1
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Modal/Modal.d.ts +1 -1
- package/cjs/components/Modal/Modal.js +1 -1
- package/cjs/components/Modal/Modal.js.map +1 -1
- package/cjs/components/Radio/Radio.d.ts +2 -2
- package/cjs/components/Radio/Radio.js.map +1 -1
- package/cjs/components/RadioGroup/RadioGroup.d.ts +1 -1
- package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +3 -3
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/Tabs/Tab.d.ts +2 -2
- package/cjs/components/Tabs/Tab.js.map +1 -1
- package/cjs/components/Textarea/Textarea.d.ts +4 -4
- package/cjs/components/Textarea/Textarea.js.map +1 -1
- package/cjs/components/Toggle/Toggle.d.ts +2 -2
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/components/Token/Token.d.ts +2 -2
- package/cjs/components/Token/Token.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +2 -2
- package/cjs/components/TokenInput/TokenInput.js +1 -1
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/internal/Popup/Popup.js +1 -1
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/ThemePlayground/ThemeContextPlayground.js +3 -12
- package/cjs/internal/ThemePlayground/ThemeContextPlayground.js.map +1 -1
- package/cjs/lib/theming/ThemeFactory.d.ts +1 -1
- package/cjs/lib/theming/ThemeFactory.js +4 -3
- package/cjs/lib/theming/ThemeFactory.js.map +1 -1
- package/cjs/lib/theming/ThemeHelpers.d.ts +1 -0
- package/cjs/lib/theming/ThemeHelpers.js +11 -2
- package/cjs/lib/theming/ThemeHelpers.js.map +1 -1
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +2 -2
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +2 -2
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +3 -3
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +3 -3
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
- package/components/CurrencyInput/CurrencyInput.d.ts +1 -1
- package/components/DateInput/DateInput/DateInput.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +2 -2
- package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +2 -2
- package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +2 -2
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +1 -1
- package/components/Input/Input/Input.js +1 -1
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +3 -3
- package/components/Modal/Modal/Modal.js +1 -1
- package/components/Modal/Modal/Modal.js.map +1 -1
- package/components/Modal/Modal.d.ts +1 -1
- package/components/Radio/Radio/Radio.js.map +1 -1
- package/components/Radio/Radio.d.ts +2 -2
- package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +1 -1
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +3 -3
- package/components/Tabs/Tab/Tab.js.map +1 -1
- package/components/Tabs/Tab.d.ts +2 -2
- package/components/Textarea/Textarea/Textarea.js.map +1 -1
- package/components/Textarea/Textarea.d.ts +4 -4
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +2 -2
- package/components/Token/Token/Token.js.map +1 -1
- package/components/Token/Token.d.ts +2 -2
- package/components/TokenInput/TokenInput/TokenInput.js +1 -1
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +2 -2
- package/internal/Popup/Popup/Popup.js +1 -1
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/ThemePlayground/ThemeContextPlayground/ThemeContextPlayground.js +2 -11
- package/internal/ThemePlayground/ThemeContextPlayground/ThemeContextPlayground.js.map +1 -1
- package/lib/theming/ThemeFactory/ThemeFactory.js +3 -2
- package/lib/theming/ThemeFactory/ThemeFactory.js.map +1 -1
- package/lib/theming/ThemeFactory.d.ts +1 -1
- package/lib/theming/ThemeHelpers/ThemeHelpers.js +10 -1
- package/lib/theming/ThemeHelpers/ThemeHelpers.js.map +1 -1
- package/lib/theming/ThemeHelpers.d.ts +1 -0
- package/package.json +2 -2
|
@@ -50,7 +50,7 @@ export interface ModalState {
|
|
|
50
50
|
* **Footer** необходимо передать пропс **panel**
|
|
51
51
|
*
|
|
52
52
|
* Для отключения прилипания шапки и футера
|
|
53
|
-
* в соответствующий
|
|
53
|
+
* в соответствующий компонент нужно передать
|
|
54
54
|
* проп **sticky** со значением **false**
|
|
55
55
|
* (по-умолчанию прилипание включено)
|
|
56
56
|
*/
|
|
@@ -80,7 +80,7 @@ var mountedModalsCount = 0;
|
|
|
80
80
|
* **Footer** необходимо передать пропс **panel**
|
|
81
81
|
*
|
|
82
82
|
* Для отключения прилипания шапки и футера
|
|
83
|
-
* в соответствующий
|
|
83
|
+
* в соответствующий компонент нужно передать
|
|
84
84
|
* проп **sticky** со значением **false**
|
|
85
85
|
* (по-умолчанию прилипание включено)
|
|
86
86
|
*/var
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Modal.tsx"],"names":["mountedModalsCount","Modal","state","stackPosition","hasBackground","horizontalScroll","hasHeader","hasFooter","hasPanel","stackSubscription","containerNode","mouseDownTarget","mouseUpTarget","requestClose","props","disableClose","onClose","refContainer","center","handleStackChange","stack","setState","indexOf","ModalStack","isBlocking","handleContainerMouseDown","event","target","handleContainerMouseUp","handleContainerClick","ignoreBackgroundClick","currentTarget","handleKeyDown","e","checkHorizontalScrollAppearance","hasScroll","containerClientWidth","clientWidth","containerScrollWidth","scrollWidth","throttledCheckHorizontalScroll","handleResize","LayoutEvents","emit","setHasHeader","setHasFooter","setHasPanel","componentDidMount","add","window","addEventListener","componentWillUnmount","removeEventListener","remove","render","theme","renderMain","modalContextProps","noClose","close","additionalPadding","style","containerStyle","width","styles","root","bg","container","isMobile","centerContainer","mobileCenterContainer","alignTop","Boolean","undefined","mobileWindow","disableFocusLock","columnFlexContainer","closeWrapper","mobileCloseWrapper","mobileCloseWithoutHeader","children","React","Component","__KONTUR_REACT_UI__","Header","ModalHeader","Body","ModalBody","Footer","ModalFooter","defaultProps","isIE11"],"mappings":"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","sourcesContent":["import React from 'react';\nimport FocusLock from 'react-focus-lock';\nimport throttle from 'lodash.throttle';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { ResponsiveLayout } from '../ResponsiveLayout';\n\nimport { ModalContext, ModalContextProps } from './ModalContext';\nimport { ModalFooter } from './ModalFooter';\nimport { ModalHeader } from './ModalHeader';\nimport { ModalBody } from './ModalBody';\nimport { ModalClose } from './ModalClose';\nimport { styles } from './Modal.styles';\n\nlet mountedModalsCount = 0;\n\nexport interface ModalProps extends CommonProps {\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия модалки\n */\n disableClose?: boolean;\n\n /**\n * Выравнивание окна по верху страницы.\n */\n alignTop?: boolean;\n\n /**\n * Не закрывать окно при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Не показывать крестик для закрытия окна.\n */\n noClose?: boolean;\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие окна (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Не использовать фокус-лок внутри модалки.\n * По умолчанию true для IE11.\n */\n disableFocusLock?: boolean;\n}\n\nexport interface ModalState {\n stackPosition: number;\n hasBackground: boolean;\n horizontalScroll: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\n/**\n * Модальное окно\n *\n * Содержит в себе три компоненты: **Modal.Header**,\n * **Modal.Body** и **Modal.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n *\n * Для отключения прилипания шапки и футера\n * в соответствующий компонет нужно передать\n * проп **sticky** со значением **false**\n * (по-умолчанию прилипание включено)\n */\nexport class Modal extends React.Component<ModalProps, ModalState> {\n public static __KONTUR_REACT_UI__ = 'Modal';\n\n public static Header = ModalHeader;\n public static Body = ModalBody;\n public static Footer = ModalFooter;\n\n public static defaultProps = {\n // NOTE: в ie нормально не работает\n disableFocusLock: isIE11,\n };\n\n public state: ModalState = {\n stackPosition: 0,\n hasBackground: true,\n horizontalScroll: false,\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private containerNode: HTMLDivElement | null = null;\n private mouseDownTarget: EventTarget | null = null;\n private mouseUpTarget: EventTarget | null = null;\n\n public componentDidMount() {\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n\n if (mountedModalsCount === 0) {\n window.addEventListener('resize', this.throttledCheckHorizontalScroll);\n }\n\n mountedModalsCount++;\n window.addEventListener('keydown', this.handleKeyDown);\n this.checkHorizontalScrollAppearance();\n\n if (this.containerNode) {\n this.containerNode.addEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public componentWillUnmount() {\n if (--mountedModalsCount === 0) {\n window.removeEventListener('resize', this.throttledCheckHorizontalScroll);\n LayoutEvents.emit();\n }\n\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n\n if (this.containerNode) {\n this.containerNode.removeEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { hasHeader, hasFooter, hasPanel } = this.state;\n\n const modalContextProps: ModalContextProps = {\n hasHeader,\n horizontalScroll: this.state.horizontalScroll,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n if (!this.props.noClose) {\n modalContextProps.close = {\n disableClose: this.props.disableClose,\n requestClose: this.requestClose,\n };\n }\n if (!hasFooter) {\n modalContextProps.additionalPadding = true;\n }\n if (hasFooter && hasPanel) {\n modalContextProps.additionalPadding = true;\n }\n\n const style: { width?: number | string } = {};\n const containerStyle: { width?: number | string } = {};\n\n if (this.props.width) {\n style.width = this.props.width;\n } else {\n containerStyle.width = 'auto';\n }\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <ZIndex priority={'Modal'} className={styles.root()}>\n <HideBodyVerticalScroll />\n {this.state.hasBackground && <div className={styles.bg(this.theme)} />}\n <div\n ref={this.refContainer}\n className={styles.container()}\n onMouseDown={this.handleContainerMouseDown}\n onMouseUp={this.handleContainerMouseUp}\n onClick={this.handleContainerClick}\n data-tid=\"modal-container\"\n >\n <ResponsiveLayout>\n {({ isMobile }) => {\n return (\n <div\n className={cx({\n [styles.centerContainer(this.theme)]: true,\n [styles.mobileCenterContainer()]: isMobile,\n [styles.alignTop()]: Boolean(this.props.alignTop),\n })}\n style={isMobile ? undefined : containerStyle}\n data-tid=\"modal-content\"\n >\n <div\n className={cx({ [styles.window(this.theme)]: true, [styles.mobileWindow()]: isMobile })}\n style={isMobile ? undefined : style}\n >\n <ResizeDetector onResize={this.handleResize} fullHeight={isMobile}>\n <FocusLock\n disabled={this.props.disableFocusLock}\n autoFocus={false}\n className={cx({ [styles.columnFlexContainer()]: isMobile }, 'focus-lock-container')}\n >\n {!hasHeader && !this.props.noClose && (\n <ZIndex\n priority={'ModalCross'}\n className={cx({\n [styles.closeWrapper(this.theme)]: true,\n [styles.mobileCloseWrapper(this.theme)]: isMobile,\n })}\n >\n <ModalClose\n className={cx({\n [styles.mobileCloseWithoutHeader()]: isMobile && !this.state.hasHeader,\n })}\n requestClose={this.requestClose}\n disableClose={this.props.disableClose}\n />\n </ZIndex>\n )}\n <ModalContext.Provider value={modalContextProps}>\n {this.props.children}\n </ModalContext.Provider>\n </FocusLock>\n </ResizeDetector>\n </div>\n </div>\n );\n }}\n </ResponsiveLayout>\n </div>\n </ZIndex>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private refContainer = (center: HTMLDivElement | null) => {\n this.containerNode = center;\n };\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n this.setState({ stackPosition: stack.indexOf(this), hasBackground: ModalStack.isBlocking(this) });\n };\n\n private handleContainerMouseDown = (event: React.MouseEvent) => {\n this.mouseDownTarget = event.target;\n };\n\n private handleContainerMouseUp = (event: React.MouseEvent) => {\n this.mouseUpTarget = event.target;\n };\n\n private handleContainerClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.props.ignoreBackgroundClick) {\n const { target, currentTarget } = event;\n if (target === currentTarget && this.mouseDownTarget === currentTarget && this.mouseUpTarget === currentTarget) {\n this.requestClose();\n }\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private checkHorizontalScrollAppearance = () => {\n let hasScroll = false;\n\n if (this.containerNode) {\n const containerClientWidth = this.containerNode.clientWidth;\n const containerScrollWidth = this.containerNode.scrollWidth;\n hasScroll = containerClientWidth < containerScrollWidth;\n }\n if (hasScroll && !this.state.horizontalScroll) {\n this.setState({ horizontalScroll: true });\n } else if (this.state.horizontalScroll) {\n this.setState({ horizontalScroll: false });\n }\n };\n\n private throttledCheckHorizontalScroll = throttle(this.checkHorizontalScrollAppearance, 100);\n\n private handleResize = (event: UIEvent) => {\n LayoutEvents.emit();\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Modal.tsx"],"names":["mountedModalsCount","Modal","state","stackPosition","hasBackground","horizontalScroll","hasHeader","hasFooter","hasPanel","stackSubscription","containerNode","mouseDownTarget","mouseUpTarget","requestClose","props","disableClose","onClose","refContainer","center","handleStackChange","stack","setState","indexOf","ModalStack","isBlocking","handleContainerMouseDown","event","target","handleContainerMouseUp","handleContainerClick","ignoreBackgroundClick","currentTarget","handleKeyDown","e","checkHorizontalScrollAppearance","hasScroll","containerClientWidth","clientWidth","containerScrollWidth","scrollWidth","throttledCheckHorizontalScroll","handleResize","LayoutEvents","emit","setHasHeader","setHasFooter","setHasPanel","componentDidMount","add","window","addEventListener","componentWillUnmount","removeEventListener","remove","render","theme","renderMain","modalContextProps","noClose","close","additionalPadding","style","containerStyle","width","styles","root","bg","container","isMobile","centerContainer","mobileCenterContainer","alignTop","Boolean","undefined","mobileWindow","disableFocusLock","columnFlexContainer","closeWrapper","mobileCloseWrapper","mobileCloseWithoutHeader","children","React","Component","__KONTUR_REACT_UI__","Header","ModalHeader","Body","ModalBody","Footer","ModalFooter","defaultProps","isIE11"],"mappings":"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","sourcesContent":["import React from 'react';\nimport FocusLock from 'react-focus-lock';\nimport throttle from 'lodash.throttle';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { ResponsiveLayout } from '../ResponsiveLayout';\n\nimport { ModalContext, ModalContextProps } from './ModalContext';\nimport { ModalFooter } from './ModalFooter';\nimport { ModalHeader } from './ModalHeader';\nimport { ModalBody } from './ModalBody';\nimport { ModalClose } from './ModalClose';\nimport { styles } from './Modal.styles';\n\nlet mountedModalsCount = 0;\n\nexport interface ModalProps extends CommonProps {\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия модалки\n */\n disableClose?: boolean;\n\n /**\n * Выравнивание окна по верху страницы.\n */\n alignTop?: boolean;\n\n /**\n * Не закрывать окно при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Не показывать крестик для закрытия окна.\n */\n noClose?: boolean;\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие окна (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Не использовать фокус-лок внутри модалки.\n * По умолчанию true для IE11.\n */\n disableFocusLock?: boolean;\n}\n\nexport interface ModalState {\n stackPosition: number;\n hasBackground: boolean;\n horizontalScroll: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\n/**\n * Модальное окно\n *\n * Содержит в себе три компоненты: **Modal.Header**,\n * **Modal.Body** и **Modal.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n *\n * Для отключения прилипания шапки и футера\n * в соответствующий компонент нужно передать\n * проп **sticky** со значением **false**\n * (по-умолчанию прилипание включено)\n */\nexport class Modal extends React.Component<ModalProps, ModalState> {\n public static __KONTUR_REACT_UI__ = 'Modal';\n\n public static Header = ModalHeader;\n public static Body = ModalBody;\n public static Footer = ModalFooter;\n\n public static defaultProps = {\n // NOTE: в ie нормально не работает\n disableFocusLock: isIE11,\n };\n\n public state: ModalState = {\n stackPosition: 0,\n hasBackground: true,\n horizontalScroll: false,\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private containerNode: HTMLDivElement | null = null;\n private mouseDownTarget: EventTarget | null = null;\n private mouseUpTarget: EventTarget | null = null;\n\n public componentDidMount() {\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n\n if (mountedModalsCount === 0) {\n window.addEventListener('resize', this.throttledCheckHorizontalScroll);\n }\n\n mountedModalsCount++;\n window.addEventListener('keydown', this.handleKeyDown);\n this.checkHorizontalScrollAppearance();\n\n if (this.containerNode) {\n this.containerNode.addEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public componentWillUnmount() {\n if (--mountedModalsCount === 0) {\n window.removeEventListener('resize', this.throttledCheckHorizontalScroll);\n LayoutEvents.emit();\n }\n\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n\n if (this.containerNode) {\n this.containerNode.removeEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { hasHeader, hasFooter, hasPanel } = this.state;\n\n const modalContextProps: ModalContextProps = {\n hasHeader,\n horizontalScroll: this.state.horizontalScroll,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n if (!this.props.noClose) {\n modalContextProps.close = {\n disableClose: this.props.disableClose,\n requestClose: this.requestClose,\n };\n }\n if (!hasFooter) {\n modalContextProps.additionalPadding = true;\n }\n if (hasFooter && hasPanel) {\n modalContextProps.additionalPadding = true;\n }\n\n const style: { width?: number | string } = {};\n const containerStyle: { width?: number | string } = {};\n\n if (this.props.width) {\n style.width = this.props.width;\n } else {\n containerStyle.width = 'auto';\n }\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <ZIndex priority={'Modal'} className={styles.root()}>\n <HideBodyVerticalScroll />\n {this.state.hasBackground && <div className={styles.bg(this.theme)} />}\n <div\n ref={this.refContainer}\n className={styles.container()}\n onMouseDown={this.handleContainerMouseDown}\n onMouseUp={this.handleContainerMouseUp}\n onClick={this.handleContainerClick}\n data-tid=\"modal-container\"\n >\n <ResponsiveLayout>\n {({ isMobile }) => {\n return (\n <div\n className={cx({\n [styles.centerContainer(this.theme)]: true,\n [styles.mobileCenterContainer()]: isMobile,\n [styles.alignTop()]: Boolean(this.props.alignTop),\n })}\n style={isMobile ? undefined : containerStyle}\n data-tid=\"modal-content\"\n >\n <div\n className={cx({ [styles.window(this.theme)]: true, [styles.mobileWindow()]: isMobile })}\n style={isMobile ? undefined : style}\n >\n <ResizeDetector onResize={this.handleResize} fullHeight={isMobile}>\n <FocusLock\n disabled={this.props.disableFocusLock}\n autoFocus={false}\n className={cx({ [styles.columnFlexContainer()]: isMobile }, 'focus-lock-container')}\n >\n {!hasHeader && !this.props.noClose && (\n <ZIndex\n priority={'ModalCross'}\n className={cx({\n [styles.closeWrapper(this.theme)]: true,\n [styles.mobileCloseWrapper(this.theme)]: isMobile,\n })}\n >\n <ModalClose\n className={cx({\n [styles.mobileCloseWithoutHeader()]: isMobile && !this.state.hasHeader,\n })}\n requestClose={this.requestClose}\n disableClose={this.props.disableClose}\n />\n </ZIndex>\n )}\n <ModalContext.Provider value={modalContextProps}>\n {this.props.children}\n </ModalContext.Provider>\n </FocusLock>\n </ResizeDetector>\n </div>\n </div>\n );\n }}\n </ResponsiveLayout>\n </div>\n </ZIndex>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private refContainer = (center: HTMLDivElement | null) => {\n this.containerNode = center;\n };\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n this.setState({ stackPosition: stack.indexOf(this), hasBackground: ModalStack.isBlocking(this) });\n };\n\n private handleContainerMouseDown = (event: React.MouseEvent) => {\n this.mouseDownTarget = event.target;\n };\n\n private handleContainerMouseUp = (event: React.MouseEvent) => {\n this.mouseUpTarget = event.target;\n };\n\n private handleContainerClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.props.ignoreBackgroundClick) {\n const { target, currentTarget } = event;\n if (target === currentTarget && this.mouseDownTarget === currentTarget && this.mouseUpTarget === currentTarget) {\n this.requestClose();\n }\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private checkHorizontalScrollAppearance = () => {\n let hasScroll = false;\n\n if (this.containerNode) {\n const containerClientWidth = this.containerNode.clientWidth;\n const containerScrollWidth = this.containerNode.scrollWidth;\n hasScroll = containerClientWidth < containerScrollWidth;\n }\n if (hasScroll && !this.state.horizontalScroll) {\n this.setState({ horizontalScroll: true });\n } else if (this.state.horizontalScroll) {\n this.setState({ horizontalScroll: false });\n }\n };\n\n private throttledCheckHorizontalScroll = throttle(this.checkHorizontalScrollAppearance, 100);\n\n private handleResize = (event: UIEvent) => {\n LayoutEvents.emit();\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
|
|
@@ -4,11 +4,11 @@ import { CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrappe
|
|
|
4
4
|
import { RadioGroupContextType } from '../RadioGroup/RadioGroupContext';
|
|
5
5
|
export interface RadioProps<T> extends CommonProps, Override<React.InputHTMLAttributes<HTMLInputElement>, {
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Состояние валидации при ошибке.
|
|
8
8
|
*/
|
|
9
9
|
error?: boolean;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Состояние валидации при предупреждении.
|
|
12
12
|
*/
|
|
13
13
|
warning?: boolean;
|
|
14
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Radio.tsx"],"names":["Radio","rootNode","state","focusedByKeyboard","context","inputEl","React","createRef","renderMain","props","disabled","warning","error","focused","onMouseOver","onMouseEnter","onMouseLeave","onValueChange","rest","radioProps","className","styles","circle","theme","checked","focus","checkedDisabled","globalClasses","value","inputProps","type","input","tabIndex","ref","onChange","handleChange","onFocus","handleFocus","onBlur","handleBlur","labelProps","root","rootChecked","rootIE11","isIE11","isEdge","handleMouseOver","handleMouseEnter","handleMouseLeave","onClick","_isInRadioGroup","activeItem","name","suppressHydrationWarning","placeholder","children","renderCaption","Boolean","e","onSelect","requestAnimationFrame","keyListener","isArrowPressed","isTabPressed","setState","render","setRootNode","current","blur","captionClassNames","caption","captionDisabled","captionIE11","Component","__KONTUR_REACT_UI__","defaultProps","contextType","RadioGroupContext"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Override } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { fixFirefoxModifiedClickOnLabel } from '../../lib/events/fixFirefoxModifiedClickOnLabel';\nimport { isEdge, isIE11 } from '../../lib/client';\nimport { RadioGroupContext, RadioGroupContextType } from '../RadioGroup/RadioGroupContext';\n\nimport { styles, globalClasses } from './Radio.styles';\n\nexport interface RadioProps<T>\n extends CommonProps,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n /**\n * Состояние фокуса.\n */\n focused?: boolean;\n /**\n * Функция, вызываемая при изменении `value`.\n */\n onValueChange?: (value: T) => void;\n /**\n * HTML-событие `onmouseenter`\n */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseleave`\n */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `onmouseover`\n */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-атрибут `value`.\n */\n value: T;\n }\n > {}\n\nexport interface RadioState {\n focusedByKeyboard: boolean;\n}\n\n/**\n * Радио-кнопки используются, когда может быть выбран только один вариант из нескольких.\n */\n@rootNode\nexport class Radio<T> extends React.Component<RadioProps<T>, RadioState> {\n public static __KONTUR_REACT_UI__ = 'Radio';\n\n public state = {\n focusedByKeyboard: false,\n };\n\n public static defaultProps = {\n focused: false,\n };\n\n public static contextType = RadioGroupContext;\n public context: RadioGroupContextType<T> = this.context;\n\n private inputEl = React.createRef<HTMLInputElement>();\n private setRootNode!: TSetRootNode;\n private theme!: Theme;\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\n /**\n * @public\n */\n public focus() {\n keyListener.isTabPressed = true;\n this.inputEl.current?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.inputEl.current?.blur();\n }\n\n public renderMain = (props: CommonWrapperRestProps<RadioProps<T>>) => {\n const {\n disabled = this.context.disabled,\n warning = this.context.warning,\n error = this.context.error,\n focused,\n onMouseOver,\n onMouseEnter,\n onMouseLeave,\n onValueChange,\n ...rest\n } = props;\n\n const radioProps = {\n className: cx({\n [styles.circle(this.theme)]: true,\n [styles.checked(this.theme)]: this.props.checked,\n [styles.focus(this.theme)]: this.props.focused || this.state.focusedByKeyboard,\n [styles.error(this.theme)]: error,\n [styles.warning(this.theme)]: warning,\n [styles.disabled(this.theme)]: disabled,\n [styles.checkedDisabled(this.theme)]: this.props.checked && disabled,\n [globalClasses.circle]: true,\n }),\n };\n\n let value: string | number | undefined;\n if (typeof this.props.value === 'string' || typeof this.props.value === 'number') {\n value = this.props.value;\n }\n\n const inputProps = {\n ...rest,\n type: 'radio',\n className: styles.input(),\n disabled,\n tabIndex: this.props.tabIndex,\n value,\n ref: this.inputEl,\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n };\n\n const labelProps = {\n className: cx(styles.root(this.theme), {\n [styles.rootChecked(this.theme)]: this.props.checked,\n [styles.rootIE11()]: isIE11 || isEdge,\n }),\n onMouseOver: this.handleMouseOver,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n onClick: fixFirefoxModifiedClickOnLabel(this.inputEl),\n };\n\n if (this._isInRadioGroup()) {\n const checked = this.props.value === this.context.activeItem;\n inputProps.checked = checked;\n inputProps.name = this.context.name;\n inputProps.suppressHydrationWarning = true;\n labelProps.className = cx(styles.root(this.theme), {\n [styles.rootChecked(this.theme)]: checked,\n [styles.rootIE11()]: isIE11 || isEdge,\n });\n radioProps.className = cx(radioProps.className, {\n [styles.checked(this.theme)]: checked,\n [styles.checkedDisabled(this.theme)]: checked && disabled,\n });\n }\n\n return (\n <label {...labelProps}>\n <input {...inputProps} />\n <span {...radioProps}>\n <span className={styles.placeholder()} />\n </span>\n {this.props.children && this.renderCaption()}\n </label>\n );\n };\n\n private _isInRadioGroup = () => Boolean(this.context.name);\n\n private renderCaption() {\n const captionClassNames = cx({\n [styles.caption(this.theme)]: true,\n [styles.captionDisabled(this.theme)]: !!(this.props.disabled || this.context.disabled),\n [styles.captionIE11()]: isIE11 || isEdge,\n });\n\n return <div className={captionClassNames}>{this.props.children}</div>;\n }\n\n private handleChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n this.props.onValueChange?.(this.props.value);\n\n if (this._isInRadioGroup()) {\n this.context.onSelect(this.props.value);\n }\n\n this.props.onChange?.(e);\n };\n\n private handleMouseOver: React.MouseEventHandler<HTMLLabelElement> = (e) => {\n this.props.onMouseOver?.(e);\n };\n\n private handleMouseEnter: React.MouseEventHandler<HTMLLabelElement> = (e) => {\n this.props.onMouseEnter?.(e);\n };\n\n private handleMouseLeave: React.MouseEventHandler<HTMLLabelElement> = (e) => {\n this.props.onMouseLeave?.(e);\n };\n\n private handleFocus = (e: React.FocusEvent<any>) => {\n if (!this.context.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isArrowPressed || keyListener.isTabPressed) {\n this.setState({ focusedByKeyboard: true });\n }\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(e);\n }\n }\n };\n\n private handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n this.props.onBlur?.(e);\n this.setState({ focusedByKeyboard: false });\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Radio.tsx"],"names":["Radio","rootNode","state","focusedByKeyboard","context","inputEl","React","createRef","renderMain","props","disabled","warning","error","focused","onMouseOver","onMouseEnter","onMouseLeave","onValueChange","rest","radioProps","className","styles","circle","theme","checked","focus","checkedDisabled","globalClasses","value","inputProps","type","input","tabIndex","ref","onChange","handleChange","onFocus","handleFocus","onBlur","handleBlur","labelProps","root","rootChecked","rootIE11","isIE11","isEdge","handleMouseOver","handleMouseEnter","handleMouseLeave","onClick","_isInRadioGroup","activeItem","name","suppressHydrationWarning","placeholder","children","renderCaption","Boolean","e","onSelect","requestAnimationFrame","keyListener","isArrowPressed","isTabPressed","setState","render","setRootNode","current","blur","captionClassNames","caption","captionDisabled","captionIE11","Component","__KONTUR_REACT_UI__","defaultProps","contextType","RadioGroupContext"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Override } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { fixFirefoxModifiedClickOnLabel } from '../../lib/events/fixFirefoxModifiedClickOnLabel';\nimport { isEdge, isIE11 } from '../../lib/client';\nimport { RadioGroupContext, RadioGroupContextType } from '../RadioGroup/RadioGroupContext';\n\nimport { styles, globalClasses } from './Radio.styles';\n\nexport interface RadioProps<T>\n extends CommonProps,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /**\n * Состояние фокуса.\n */\n focused?: boolean;\n /**\n * Функция, вызываемая при изменении `value`.\n */\n onValueChange?: (value: T) => void;\n /**\n * HTML-событие `onmouseenter`\n */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseleave`\n */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `onmouseover`\n */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-атрибут `value`.\n */\n value: T;\n }\n > {}\n\nexport interface RadioState {\n focusedByKeyboard: boolean;\n}\n\n/**\n * Радио-кнопки используются, когда может быть выбран только один вариант из нескольких.\n */\n@rootNode\nexport class Radio<T> extends React.Component<RadioProps<T>, RadioState> {\n public static __KONTUR_REACT_UI__ = 'Radio';\n\n public state = {\n focusedByKeyboard: false,\n };\n\n public static defaultProps = {\n focused: false,\n };\n\n public static contextType = RadioGroupContext;\n public context: RadioGroupContextType<T> = this.context;\n\n private inputEl = React.createRef<HTMLInputElement>();\n private setRootNode!: TSetRootNode;\n private theme!: Theme;\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\n /**\n * @public\n */\n public focus() {\n keyListener.isTabPressed = true;\n this.inputEl.current?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.inputEl.current?.blur();\n }\n\n public renderMain = (props: CommonWrapperRestProps<RadioProps<T>>) => {\n const {\n disabled = this.context.disabled,\n warning = this.context.warning,\n error = this.context.error,\n focused,\n onMouseOver,\n onMouseEnter,\n onMouseLeave,\n onValueChange,\n ...rest\n } = props;\n\n const radioProps = {\n className: cx({\n [styles.circle(this.theme)]: true,\n [styles.checked(this.theme)]: this.props.checked,\n [styles.focus(this.theme)]: this.props.focused || this.state.focusedByKeyboard,\n [styles.error(this.theme)]: error,\n [styles.warning(this.theme)]: warning,\n [styles.disabled(this.theme)]: disabled,\n [styles.checkedDisabled(this.theme)]: this.props.checked && disabled,\n [globalClasses.circle]: true,\n }),\n };\n\n let value: string | number | undefined;\n if (typeof this.props.value === 'string' || typeof this.props.value === 'number') {\n value = this.props.value;\n }\n\n const inputProps = {\n ...rest,\n type: 'radio',\n className: styles.input(),\n disabled,\n tabIndex: this.props.tabIndex,\n value,\n ref: this.inputEl,\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n };\n\n const labelProps = {\n className: cx(styles.root(this.theme), {\n [styles.rootChecked(this.theme)]: this.props.checked,\n [styles.rootIE11()]: isIE11 || isEdge,\n }),\n onMouseOver: this.handleMouseOver,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n onClick: fixFirefoxModifiedClickOnLabel(this.inputEl),\n };\n\n if (this._isInRadioGroup()) {\n const checked = this.props.value === this.context.activeItem;\n inputProps.checked = checked;\n inputProps.name = this.context.name;\n inputProps.suppressHydrationWarning = true;\n labelProps.className = cx(styles.root(this.theme), {\n [styles.rootChecked(this.theme)]: checked,\n [styles.rootIE11()]: isIE11 || isEdge,\n });\n radioProps.className = cx(radioProps.className, {\n [styles.checked(this.theme)]: checked,\n [styles.checkedDisabled(this.theme)]: checked && disabled,\n });\n }\n\n return (\n <label {...labelProps}>\n <input {...inputProps} />\n <span {...radioProps}>\n <span className={styles.placeholder()} />\n </span>\n {this.props.children && this.renderCaption()}\n </label>\n );\n };\n\n private _isInRadioGroup = () => Boolean(this.context.name);\n\n private renderCaption() {\n const captionClassNames = cx({\n [styles.caption(this.theme)]: true,\n [styles.captionDisabled(this.theme)]: !!(this.props.disabled || this.context.disabled),\n [styles.captionIE11()]: isIE11 || isEdge,\n });\n\n return <div className={captionClassNames}>{this.props.children}</div>;\n }\n\n private handleChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n this.props.onValueChange?.(this.props.value);\n\n if (this._isInRadioGroup()) {\n this.context.onSelect(this.props.value);\n }\n\n this.props.onChange?.(e);\n };\n\n private handleMouseOver: React.MouseEventHandler<HTMLLabelElement> = (e) => {\n this.props.onMouseOver?.(e);\n };\n\n private handleMouseEnter: React.MouseEventHandler<HTMLLabelElement> = (e) => {\n this.props.onMouseEnter?.(e);\n };\n\n private handleMouseLeave: React.MouseEventHandler<HTMLLabelElement> = (e) => {\n this.props.onMouseLeave?.(e);\n };\n\n private handleFocus = (e: React.FocusEvent<any>) => {\n if (!this.context.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isArrowPressed || keyListener.isTabPressed) {\n this.setState({ focusedByKeyboard: true });\n }\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(e);\n }\n }\n };\n\n private handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n this.props.onBlur?.(e);\n this.setState({ focusedByKeyboard: false });\n };\n}\n"]}
|
|
@@ -10,7 +10,7 @@ export interface RadioGroupProps<T = string | number> extends CommonProps {
|
|
|
10
10
|
defaultValue?: T;
|
|
11
11
|
/**
|
|
12
12
|
* Значение радиогруппы. Должно быть одним из значений радиокнопок.
|
|
13
|
-
* Если не указано, то компонент будет работать, как
|
|
13
|
+
* Если не указано, то компонент будет работать, как неконтролируемый
|
|
14
14
|
*/
|
|
15
15
|
value?: T;
|
|
16
16
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["RadioGroup.tsx"],"names":["RadioGroup","rootNode","props","name","getProps","defaultProps","getRadioGroupContextValue","activeItem","getValue","onSelect","handleSelect","getName","disabled","error","warning","isControlled","value","state","setState","onValueChange","renderRadio","itemValue","data","index","itemProps","key","className","styles","item","theme","itemFirst","itemInline","inline","renderItem","ref","element","node","defaultValue","render","renderMain","width","onMouseLeave","onMouseOver","onMouseEnter","onBlur","style","handlers","setRootNode","root","renderChildren","focus","radio","querySelector","items","children","mapItems","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","string","oneOfType","number","func","Prevent","_value","fn","result","entry","normalizeEntry","push","Array","isArray"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\nimport { getRandomID } from '../../lib/utils';\nimport { Radio } from '../Radio';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { FocusTrap } from '../../internal/FocusTrap';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './RadioGroup.styles';\nimport { Prevent } from './Prevent';\nimport { RadioGroupContext, RadioGroupContextType } from './RadioGroupContext';\n\nexport interface RadioGroupProps<T = string | number> extends CommonProps {\n /**\n * Значение по умолчанию. Должно быть одним из значений дочерних радиокнопок\n * или значений из параметра `items`\n */\n defaultValue?: T;\n /**\n * Значение радиогруппы. Должно быть одним из значений радиокнопок.\n * Если не указано, то компонент будет работать, как неконтроллируемый\n */\n value?: T;\n /**\n * Может быть использовано, если не передан параметр `children`\n *\n * Массив параметров радиокнопок. Может быть типа `Array<Value>` или\n * `Array<[Value, Data]>`, где тип `Value` — значение радиокнопки, а `Data`\n * — значение которое будет использовано вторым параметром в `renderItem`.\n * Если тип `items: Array<Value>`, то он будет приведен к типу\n * `Array<[Value, Value]>`\n */\n items?: T[] | [T, React.ReactNode][];\n /**\n * Аттрибут name для вложенных радиокнопок. Если не указан, то сгенерируется\n * случайное имя\n */\n name?: string;\n /**\n * Дизейблит все радиокнопки\n */\n disabled?: boolean;\n /**\n * Переводит все радиокнопки в состояние валидации: предупреждение.\n */\n warning?: boolean;\n /**\n * Переводит все радиокнопки в состояние валидации: ошибка.\n */\n error?: boolean;\n /**\n * Выравнивает элементы в строку. Не работает с `children`\n */\n inline?: boolean;\n /**\n * Ширина радиогруппы. Не работает с `children`\n */\n width?: React.CSSProperties['width'];\n /**\n * Метод отрисовки контента радиокнопки. Не работает с `children`.\n *\n * Принимает два аргумента: `(value: Value, data: Data) => React.Node`\n */\n renderItem?: (itemValue: T, data: React.ReactNode) => React.ReactNode;\n /** Вызывается при изменении `value` */\n onValueChange?: (value: T) => void;\n onBlur?: (event: FocusEvent) => void;\n onMouseLeave?: () => any;\n onMouseOver?: () => any;\n onMouseEnter?: () => any;\n}\n\nexport interface RadioGroupState<T> {\n activeItem?: T;\n}\n\n/**\n *\n * `children` может содержать любую разметку с компонентами Radio,\n * если не передан параметр `items`.\n * Каждому компоненту Radio нужно указать параметр `value`, такого же типа\n * как и параметр `value` самой радиогруппы.\n *\n * Значения активного элемента сравниваются по строгому равенству `===`\n */\n@rootNode\nexport class RadioGroup<T> extends React.Component<RadioGroupProps<T>, RadioGroupState<T>> {\n public static __KONTUR_REACT_UI__ = 'RadioGroup';\n\n public static propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n inline: PropTypes.bool,\n name: PropTypes.string,\n warning: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onBlur: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n };\n\n public static defaultProps = {\n renderItem,\n };\n\n public static Prevent = Prevent;\n\n private theme!: Theme;\n\n private node: Nullable<HTMLSpanElement>;\n private name = getRandomID();\n private getProps = createPropsGetter(RadioGroup.defaultProps);\n private setRootNode!: TSetRootNode;\n\n constructor(props: RadioGroupProps<T>) {\n super(props);\n\n this.state = {\n activeItem: this.props.defaultValue,\n };\n }\n\n private getRadioGroupContextValue = (): RadioGroupContextType<T> => {\n return {\n activeItem: this.getValue(),\n onSelect: this.handleSelect,\n name: this.getName(),\n disabled: this.props.disabled,\n error: this.props.error,\n warning: this.props.warning,\n };\n };\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n const { width, onMouseLeave, onMouseOver, onMouseEnter, onBlur } = this.props;\n const style = {\n width: width != null ? width : 'auto',\n };\n const handlers = {\n onMouseOver,\n onMouseEnter,\n onMouseLeave,\n };\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <FocusTrap onBlur={onBlur}>\n <span ref={this.ref} style={style} className={styles.root()} {...handlers}>\n <RadioGroupContext.Provider value={this.getRadioGroupContextValue()}>\n {this.renderChildren()}\n </RadioGroupContext.Provider>\n </span>\n </FocusTrap>\n </CommonWrapper>\n );\n }\n\n /**\n * @public\n */\n public focus() {\n const node = this.node;\n if (!node) {\n return;\n }\n\n let radio = node.querySelector('input[type=\"radio\"]:checked') as Nullable<HTMLInputElement>;\n\n // If no checked radios, try get first radio\n if (!radio || radio.disabled) {\n radio = node.querySelector('input[type=\"radio\"]:not([disabled])') as Nullable<HTMLInputElement>;\n }\n\n if (radio) {\n radio.focus();\n }\n }\n\n private getValue = () => (this.isControlled() ? this.props.value : this.state.activeItem);\n\n private getName = () => this.props.name || this.name;\n\n private isControlled = () => this.props.value != null;\n\n private handleSelect = (value: T) => {\n if (!this.isControlled()) {\n this.setState({ activeItem: value });\n }\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private renderChildren() {\n const { items, children } = this.props;\n invariant((!items && children) || (items && !children), 'Either items or children must be passed, not both');\n return items ? mapItems<T>(this.renderRadio, items) : children;\n }\n\n private renderRadio = (itemValue: T, data: React.ReactNode, index: number): JSX.Element => {\n const itemProps = {\n key: typeof itemValue === 'string' || typeof itemValue === 'number' ? itemValue : index,\n className: cx({\n [styles.item(this.theme)]: true,\n [styles.itemFirst()]: index === 0,\n [styles.itemInline()]: !!this.props.inline,\n }),\n };\n\n return (\n <span {...itemProps}>\n <Radio value={itemValue}>{this.getProps().renderItem<T>(itemValue, data)}</Radio>\n </span>\n );\n };\n\n private ref = (element: HTMLSpanElement) => {\n this.node = element;\n };\n}\n\nfunction renderItem<T>(_value: T, data: React.ReactNode) {\n return data;\n}\n\nfunction mapItems<T>(\n fn: (value: T, data: React.ReactNode, index: number) => React.ReactNode,\n items: T[] | [T, React.ReactNode][],\n) {\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, data] = normalizeEntry<T>(entry);\n result.push(fn(value, data, index));\n ++index;\n }\n return result;\n}\n\nfunction normalizeEntry<T>(entry: T | [T, React.ReactNode]): [T, React.ReactNode] {\n if (!Array.isArray(entry)) {\n return [entry, entry];\n }\n return entry;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["RadioGroup.tsx"],"names":["RadioGroup","rootNode","props","name","getProps","defaultProps","getRadioGroupContextValue","activeItem","getValue","onSelect","handleSelect","getName","disabled","error","warning","isControlled","value","state","setState","onValueChange","renderRadio","itemValue","data","index","itemProps","key","className","styles","item","theme","itemFirst","itemInline","inline","renderItem","ref","element","node","defaultValue","render","renderMain","width","onMouseLeave","onMouseOver","onMouseEnter","onBlur","style","handlers","setRootNode","root","renderChildren","focus","radio","querySelector","items","children","mapItems","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","string","oneOfType","number","func","Prevent","_value","fn","result","entry","normalizeEntry","push","Array","isArray"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\nimport { getRandomID } from '../../lib/utils';\nimport { Radio } from '../Radio';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { FocusTrap } from '../../internal/FocusTrap';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './RadioGroup.styles';\nimport { Prevent } from './Prevent';\nimport { RadioGroupContext, RadioGroupContextType } from './RadioGroupContext';\n\nexport interface RadioGroupProps<T = string | number> extends CommonProps {\n /**\n * Значение по умолчанию. Должно быть одним из значений дочерних радиокнопок\n * или значений из параметра `items`\n */\n defaultValue?: T;\n /**\n * Значение радиогруппы. Должно быть одним из значений радиокнопок.\n * Если не указано, то компонент будет работать, как неконтролируемый\n */\n value?: T;\n /**\n * Может быть использовано, если не передан параметр `children`\n *\n * Массив параметров радиокнопок. Может быть типа `Array<Value>` или\n * `Array<[Value, Data]>`, где тип `Value` — значение радиокнопки, а `Data`\n * — значение которое будет использовано вторым параметром в `renderItem`.\n * Если тип `items: Array<Value>`, то он будет приведен к типу\n * `Array<[Value, Value]>`\n */\n items?: T[] | [T, React.ReactNode][];\n /**\n * Аттрибут name для вложенных радиокнопок. Если не указан, то сгенерируется\n * случайное имя\n */\n name?: string;\n /**\n * Дизейблит все радиокнопки\n */\n disabled?: boolean;\n /**\n * Переводит все радиокнопки в состояние валидации: предупреждение.\n */\n warning?: boolean;\n /**\n * Переводит все радиокнопки в состояние валидации: ошибка.\n */\n error?: boolean;\n /**\n * Выравнивает элементы в строку. Не работает с `children`\n */\n inline?: boolean;\n /**\n * Ширина радиогруппы. Не работает с `children`\n */\n width?: React.CSSProperties['width'];\n /**\n * Метод отрисовки контента радиокнопки. Не работает с `children`.\n *\n * Принимает два аргумента: `(value: Value, data: Data) => React.Node`\n */\n renderItem?: (itemValue: T, data: React.ReactNode) => React.ReactNode;\n /** Вызывается при изменении `value` */\n onValueChange?: (value: T) => void;\n onBlur?: (event: FocusEvent) => void;\n onMouseLeave?: () => any;\n onMouseOver?: () => any;\n onMouseEnter?: () => any;\n}\n\nexport interface RadioGroupState<T> {\n activeItem?: T;\n}\n\n/**\n *\n * `children` может содержать любую разметку с компонентами Radio,\n * если не передан параметр `items`.\n * Каждому компоненту Radio нужно указать параметр `value`, такого же типа\n * как и параметр `value` самой радиогруппы.\n *\n * Значения активного элемента сравниваются по строгому равенству `===`\n */\n@rootNode\nexport class RadioGroup<T> extends React.Component<RadioGroupProps<T>, RadioGroupState<T>> {\n public static __KONTUR_REACT_UI__ = 'RadioGroup';\n\n public static propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n inline: PropTypes.bool,\n name: PropTypes.string,\n warning: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onBlur: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n };\n\n public static defaultProps = {\n renderItem,\n };\n\n public static Prevent = Prevent;\n\n private theme!: Theme;\n\n private node: Nullable<HTMLSpanElement>;\n private name = getRandomID();\n private getProps = createPropsGetter(RadioGroup.defaultProps);\n private setRootNode!: TSetRootNode;\n\n constructor(props: RadioGroupProps<T>) {\n super(props);\n\n this.state = {\n activeItem: this.props.defaultValue,\n };\n }\n\n private getRadioGroupContextValue = (): RadioGroupContextType<T> => {\n return {\n activeItem: this.getValue(),\n onSelect: this.handleSelect,\n name: this.getName(),\n disabled: this.props.disabled,\n error: this.props.error,\n warning: this.props.warning,\n };\n };\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n const { width, onMouseLeave, onMouseOver, onMouseEnter, onBlur } = this.props;\n const style = {\n width: width != null ? width : 'auto',\n };\n const handlers = {\n onMouseOver,\n onMouseEnter,\n onMouseLeave,\n };\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <FocusTrap onBlur={onBlur}>\n <span ref={this.ref} style={style} className={styles.root()} {...handlers}>\n <RadioGroupContext.Provider value={this.getRadioGroupContextValue()}>\n {this.renderChildren()}\n </RadioGroupContext.Provider>\n </span>\n </FocusTrap>\n </CommonWrapper>\n );\n }\n\n /**\n * @public\n */\n public focus() {\n const node = this.node;\n if (!node) {\n return;\n }\n\n let radio = node.querySelector('input[type=\"radio\"]:checked') as Nullable<HTMLInputElement>;\n\n // If no checked radios, try get first radio\n if (!radio || radio.disabled) {\n radio = node.querySelector('input[type=\"radio\"]:not([disabled])') as Nullable<HTMLInputElement>;\n }\n\n if (radio) {\n radio.focus();\n }\n }\n\n private getValue = () => (this.isControlled() ? this.props.value : this.state.activeItem);\n\n private getName = () => this.props.name || this.name;\n\n private isControlled = () => this.props.value != null;\n\n private handleSelect = (value: T) => {\n if (!this.isControlled()) {\n this.setState({ activeItem: value });\n }\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private renderChildren() {\n const { items, children } = this.props;\n invariant((!items && children) || (items && !children), 'Either items or children must be passed, not both');\n return items ? mapItems<T>(this.renderRadio, items) : children;\n }\n\n private renderRadio = (itemValue: T, data: React.ReactNode, index: number): JSX.Element => {\n const itemProps = {\n key: typeof itemValue === 'string' || typeof itemValue === 'number' ? itemValue : index,\n className: cx({\n [styles.item(this.theme)]: true,\n [styles.itemFirst()]: index === 0,\n [styles.itemInline()]: !!this.props.inline,\n }),\n };\n\n return (\n <span {...itemProps}>\n <Radio value={itemValue}>{this.getProps().renderItem<T>(itemValue, data)}</Radio>\n </span>\n );\n };\n\n private ref = (element: HTMLSpanElement) => {\n this.node = element;\n };\n}\n\nfunction renderItem<T>(_value: T, data: React.ReactNode) {\n return data;\n}\n\nfunction mapItems<T>(\n fn: (value: T, data: React.ReactNode, index: number) => React.ReactNode,\n items: T[] | [T, React.ReactNode][],\n) {\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, data] = normalizeEntry<T>(entry);\n result.push(fn(value, data, index));\n ++index;\n }\n return result;\n}\n\nfunction normalizeEntry<T>(entry: T | [T, React.ReactNode]): [T, React.ReactNode] {\n if (!Array.isArray(entry)) {\n return [entry, entry];\n }\n return entry;\n}\n"]}
|
|
@@ -24,7 +24,7 @@ export interface SelectProps<TValue, TItem> extends CommonProps {
|
|
|
24
24
|
disablePortal?: boolean;
|
|
25
25
|
disabled?: boolean;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Состояние валидации при ошибке.
|
|
28
28
|
*/
|
|
29
29
|
error?: boolean;
|
|
30
30
|
filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;
|
|
@@ -85,7 +85,7 @@ export interface SelectProps<TValue, TItem> extends CommonProps {
|
|
|
85
85
|
value?: TValue;
|
|
86
86
|
width?: number | string;
|
|
87
87
|
/**
|
|
88
|
-
*
|
|
88
|
+
* Состояние валидации при предупреждении.
|
|
89
89
|
*/
|
|
90
90
|
warning?: boolean;
|
|
91
91
|
use?: ButtonUse;
|
|
@@ -93,7 +93,7 @@ export interface SelectProps<TValue, TItem> extends CommonProps {
|
|
|
93
93
|
onFocus?: React.FocusEventHandler<HTMLElement>;
|
|
94
94
|
onBlur?: React.FocusEventHandler<HTMLElement>;
|
|
95
95
|
/**
|
|
96
|
-
* Текст заголовка
|
|
96
|
+
* Текст заголовка выпадающего меню в мобильной версии
|
|
97
97
|
*/
|
|
98
98
|
mobileMenuHeaderText?: string;
|
|
99
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Select.tsx"],"names":["PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","SelectLocaleHelper","responsiveLayout","rootNode","state","opened","value","props","defaultValue","searchPattern","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","renderLabel","label","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","noMargin","styles","search","focusInput","handleSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","React","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","dropdownContainerGetParent","input","setTimeout","refMenu","menu","e","preventDefault","up","down","enter","highlightItem","buttonRef","getButton","button","_renderButton","renderDefaultButton","Children","only","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","theme","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","root","rootMobile","setRootNode","getValue","getItemByValue","renderValue","placeholder","locale","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","hasFixedWidth","menuWidth","menuAlign","disablePortal","maxMenuHeight","isWithSearch","Boolean","mobileMenuHeaderText","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","func","any","bool","oneOfType","array","object","number","string","node","Item","SEP","static","value1","value2","Array","isArray","toString","indexOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem, MenuItemProps } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction, isReactUINode } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n /**\n * Текст заголовка выпдающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const button = this.getButton(buttonParams);\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span className={cx({ [styles.root()]: true, [styles.rootMobile(this.theme)]: isMobile })} style={style}>\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n const hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n hasFixedWidth={hasFixedWidth}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={this.props.menuAlign}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch(true) : null;\n const value = this.getValue();\n\n const isWithSearch = Boolean(search);\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n useFullHeight={isWithSearch}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu hasShadow={false} onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getSearch = (noMargin?: boolean) => {\n return (\n <div className={cx({ [styles.search()]: noMargin ? false : true })}>\n <Input value={this.state.searchPattern} ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile } as MenuItemProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Select.tsx"],"names":["PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","SelectLocaleHelper","responsiveLayout","rootNode","state","opened","value","props","defaultValue","searchPattern","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","renderLabel","label","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","noMargin","styles","search","focusInput","handleSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","React","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","dropdownContainerGetParent","input","setTimeout","refMenu","menu","e","preventDefault","up","down","enter","highlightItem","buttonRef","getButton","button","_renderButton","renderDefaultButton","Children","only","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","theme","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","root","rootMobile","setRootNode","getValue","getItemByValue","renderValue","placeholder","locale","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","hasFixedWidth","menuWidth","menuAlign","disablePortal","maxMenuHeight","isWithSearch","Boolean","mobileMenuHeaderText","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","func","any","bool","oneOfType","array","object","number","string","node","Item","SEP","static","value1","value2","Array","isArray","toString","indexOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem, MenuItemProps } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction, isReactUINode } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const button = this.getButton(buttonParams);\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span className={cx({ [styles.root()]: true, [styles.rootMobile(this.theme)]: isMobile })} style={style}>\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n const hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n hasFixedWidth={hasFixedWidth}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={this.props.menuAlign}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch(true) : null;\n const value = this.getValue();\n\n const isWithSearch = Boolean(search);\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n useFullHeight={isWithSearch}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu hasShadow={false} onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getSearch = (noMargin?: boolean) => {\n return (\n <div className={cx({ [styles.search()]: noMargin ? false : true })}>\n <Input value={this.state.searchPattern} ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile } as MenuItemProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
@@ -40,11 +40,11 @@ export interface TabProps<T extends string = string> extends CommonProps {
|
|
|
40
40
|
*/
|
|
41
41
|
disabled?: boolean;
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
43
|
+
* Состояние валидации при ошибке.
|
|
44
44
|
*/
|
|
45
45
|
error?: boolean;
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
47
|
+
* Состояние валидации при предупреждении.
|
|
48
48
|
*/
|
|
49
49
|
warning?: boolean;
|
|
50
50
|
/**
|