@skbkontur/react-ui 3.9.2 → 3.9.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 +28 -0
- package/cjs/components/Button/Button.d.ts +3 -0
- package/cjs/components/Button/Button.js +8 -1
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Checkbox/Checkbox.d.ts +0 -1
- package/cjs/components/Checkbox/Checkbox.js +21 -18
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/CurrencyInput/CurrencyInput.d.ts +2 -1
- package/cjs/components/CurrencyInput/CurrencyInput.js +29 -1
- package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
- package/cjs/components/Gapped/Gapped.d.ts +1 -0
- package/cjs/components/Gapped/Gapped.js +14 -9
- package/cjs/components/Gapped/Gapped.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +4 -0
- package/cjs/components/Input/Input.js +9 -0
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Loader/Loader.js +2 -1
- package/cjs/components/Loader/Loader.js.map +1 -1
- package/cjs/components/Radio/Radio.js +4 -1
- package/cjs/components/Radio/Radio.js.map +1 -1
- package/cjs/components/RadioGroup/RadioGroup.d.ts +9 -10
- package/cjs/components/RadioGroup/RadioGroup.js +10 -11
- package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
- package/cjs/components/Select/Select.js +3 -2
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePage.d.ts +1 -0
- package/cjs/components/SidePage/SidePage.js +3 -1
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/internal/Popup/Popup.js +5 -1
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/lib/events/fixFirefoxModifiedClickOnLabel.d.ts +2 -0
- package/cjs/lib/events/fixFirefoxModifiedClickOnLabel.js +20 -0
- package/cjs/lib/events/fixFirefoxModifiedClickOnLabel.js.map +1 -0
- package/cjs/lib/getDisplayName.d.ts +3 -0
- package/cjs/lib/getDisplayName.js +9 -0
- package/cjs/lib/getDisplayName.js.map +1 -0
- package/cjs/lib/withClassWrapper.d.ts +71 -0
- package/cjs/lib/withClassWrapper.js +59 -0
- package/cjs/lib/withClassWrapper.js.map +1 -0
- package/components/Button/Button/Button.js +10 -0
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +3 -0
- package/components/Checkbox/Checkbox/Checkbox.js +18 -20
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +0 -1
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +34 -1
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
- package/components/CurrencyInput/CurrencyInput.d.ts +2 -1
- package/components/Gapped/Gapped/Gapped.js +9 -10
- package/components/Gapped/Gapped/Gapped.js.map +1 -1
- package/components/Gapped/Gapped.d.ts +1 -0
- package/components/Input/Input/Input.js +8 -0
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +4 -0
- package/components/Loader/Loader/Loader.js +3 -2
- package/components/Loader/Loader/Loader.js.map +1 -1
- package/components/Radio/Radio/Radio.js +4 -1
- package/components/Radio/Radio/Radio.js.map +1 -1
- package/components/RadioGroup/RadioGroup/RadioGroup.js +10 -0
- package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +9 -10
- package/components/Select/Select/Select.js +6 -1
- package/components/Select/Select/Select.js.map +1 -1
- package/components/SidePage/SidePage/SidePage.js +2 -0
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/SidePage/SidePage.d.ts +1 -0
- package/internal/Popup/Popup/Popup.js +6 -1
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/lib/events/fixFirefoxModifiedClickOnLabel/fixFirefoxModifiedClickOnLabel.js +19 -0
- package/lib/events/fixFirefoxModifiedClickOnLabel/fixFirefoxModifiedClickOnLabel.js.map +1 -0
- package/lib/events/fixFirefoxModifiedClickOnLabel/package.json +6 -0
- package/lib/events/fixFirefoxModifiedClickOnLabel.d.ts +2 -0
- package/lib/getDisplayName/getDisplayName.js +3 -0
- package/lib/getDisplayName/getDisplayName.js.map +1 -0
- package/lib/getDisplayName/package.json +6 -0
- package/lib/getDisplayName.d.ts +3 -0
- package/lib/withClassWrapper/package.json +6 -0
- package/lib/withClassWrapper/withClassWrapper.js +70 -0
- package/lib/withClassWrapper/withClassWrapper.js.map +1 -0
- package/lib/withClassWrapper.d.ts +71 -0
- package/package.json +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Select.tsx"],"names":["React","PropTypes","ReactDOM","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","ThemeContext","CommonWrapper","ArrowChevronDownIcon","cx","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","state","opened","value","props","defaultValue","searchPattern","theme","menu","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","dropdownContainerGetParent","findDOMNode","focusInput","input","setTimeout","refMenu","toggle","handleKey","e","preventDefault","up","down","enter","onKeyDown","handleSearch","buttonRef","element","getButton","buttonParams","button","_renderButton","renderDefaultButton","Children","only","isValidElement","cloneElement","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","renderMain","renderLabel","label","isPlaceholder","onClick","style","width","maxWidth","undefined","root","renderMenu","getValue","item","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","search","menuAlign","disablePortal","menuWidth","maxMenuHeight","mapItems","iValue","i","comment","key","areValuesEqual","select","bind","renderItem","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","func","any","bool","oneOfType","array","object","number","string","node","SEP","value1","value2","Array","isArray","toString","indexOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private renderMain() {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const button = this.getButton(buttonParams);\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active={this.state.opened}>\n <span className={styles.root()} style={style}>\n {button}\n {!this.props.disabled && this.state.opened && this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n >\n {search}\n {this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n )}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private dropdownContainerGetParent = () => {\n return ReactDOM.findDOMNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNodeArray = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Select.tsx"],"names":["React","PropTypes","ReactDOM","invariant","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","isFunction","ThemeContext","CommonWrapper","ArrowChevronDownIcon","cx","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","Select","state","opened","value","props","defaultValue","searchPattern","theme","menu","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","dropdownContainerGetParent","findDOMNode","focusInput","input","setTimeout","refMenu","toggle","handleKey","e","preventDefault","up","down","enter","onKeyDown","handleSearch","highlightItem","buttonRef","element","getButton","buttonParams","button","_renderButton","renderDefaultButton","Children","only","isValidElement","cloneElement","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","window","addEventListener","removeEventListener","render","renderMain","renderLabel","label","isPlaceholder","onClick","style","width","maxWidth","undefined","root","renderMenu","getValue","item","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","search","menuAlign","disablePortal","menuWidth","maxMenuHeight","mapItems","iValue","i","comment","key","areValuesEqual","select","bind","renderItem","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","Component","__KONTUR_REACT_UI__","propTypes","func","any","bool","oneOfType","array","object","number","string","node","SEP","value1","value2","Array","isArray","toString","indexOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport invariant from 'invariant';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonSize, ButtonUse } from '../Button';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport interface SelectProps<TValue, TItem> extends CommonProps {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<[TValue, TItem, React.ReactNode?] | TItem | React.ReactElement | (() => React.ReactElement)>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: ButtonSize;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\n@locale('Select', SelectLocaleHelper)\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n\n public static propTypes = {\n areValuesEqual: PropTypes.func,\n defaultValue: PropTypes.any,\n disablePortal: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n filterItem: PropTypes.func,\n items: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n maxMenuHeight: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n placeholder: PropTypes.node,\n renderItem: PropTypes.func,\n renderValue: PropTypes.func,\n search: PropTypes.bool,\n value: PropTypes.any,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onValueChange: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onKeyDown: PropTypes.func,\n };\n\n public static defaultProps = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n window.addEventListener('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n window.removeEventListener('popstate', this.close);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider value={getSelectTheme(theme, this.props)}>{this.renderMain()}</ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private renderMain() {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n };\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const button = this.getButton(buttonParams);\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={this.close} onFocusOutside={this.close} active={this.state.opened}>\n <span className={styles.root()} style={style}>\n {button}\n {!this.props.disabled && this.state.opened && this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (item != null || value != null) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: ButtonSize | undefined) {\n if (this.props.use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n };\n\n const labelProps = {\n className: cx({\n [styles.label()]: this.props.use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && this.props.use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = this.props.use !== 'default';\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n <ArrowChevronDownIcon />\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.focusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n ) : null;\n\n const value = this.getValue();\n\n return (\n <DropdownContainer\n getParent={this.dropdownContainerGetParent}\n offsetY={-1}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n >\n {search}\n {this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.getProps().areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n )}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private dropdownContainerGetParent = () => {\n return ReactDOM.findDOMNode(this);\n };\n\n private focusInput = (input: Input) => {\n // fix cases when an Input is rendered in portal\n setTimeout(() => input?.focus(), 0);\n };\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (this.props.onValueChange && !this.getProps().areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNodeArray = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.getProps().areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n })\n : buttonElement;\n };\n}\n\nfunction renderValue(value: any, item: any) {\n return item;\n}\n\nfunction renderItem(value: any, item: any) {\n return item;\n}\n\nfunction areValuesEqual(value1: any, value2: any) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n } else {\n return [entry, entry, undefined];\n }\n}\n\nfunction filterItem(value: any, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n if (React.isValidElement(item) || (isFunction(item) && React.isValidElement((item = item())))) {\n item = reactGetTextContent(item);\n }\n if (typeof item === 'number') {\n item = item.toString(10);\n }\n if (typeof item !== 'string') {\n return false;\n }\n return item.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
@@ -14,6 +14,7 @@ import { ZIndex } from "../../../internal/ZIndex";
|
|
|
14
14
|
import { ThemeContext } from "../../../lib/theming/ThemeContext";
|
|
15
15
|
import { CommonWrapper } from "../../../internal/CommonWrapper";
|
|
16
16
|
import { cx } from "../../../lib/theming/Emotion";
|
|
17
|
+
import { isTestEnv } from "../../../lib/currentEnvironment";
|
|
17
18
|
import { SidePageBody } from "../SidePageBody";
|
|
18
19
|
import { SidePageContainer } from "../SidePageContainer";
|
|
19
20
|
import { SidePageContext } from "../SidePageContext";
|
|
@@ -291,6 +292,7 @@ SidePage.Body = SidePageBody;
|
|
|
291
292
|
SidePage.Footer = SidePageFooter;
|
|
292
293
|
SidePage.Container = SidePageContainer;
|
|
293
294
|
SidePage.defaultProps = {
|
|
295
|
+
disableAnimations: isTestEnv,
|
|
294
296
|
disableFocusLock: true,
|
|
295
297
|
offset: 0
|
|
296
298
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["SidePage.tsx"],"names":["React","CSSTransition","FocusLock","isKeyEscape","LayoutEvents","stopPropagation","HideBodyVerticalScroll","ModalStack","RenderContainer","RenderLayer","ZIndex","ThemeContext","CommonWrapper","cx","SidePageBody","SidePageContainer","SidePageContext","SidePageFooter","SidePageHeader","styles","TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","theme","stackSubscription","layoutRef","footer","updateLayout","update","getSidePageContextProps","requestClose","getWidth","footerRef","setHasHeader","setHasFooter","setHasPanel","clientWidth","handleStackChange","stack","sidePages","filter","x","props","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","isBlocking","setState","stackPosition","handleClickOutside","e","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","add","componentWillUnmount","removeEventListener","remove","render","renderMain","blockBackground","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","width","disableFocusLock","offset","root","emit","right","left","focusLock","wrapper","wrapperLeft","wrapperMarginLeft","wrapperMarginRight","shadow","_","children","overlay","background","backgroundGray","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","Component","__KONTUR_REACT_UI__","Header","Body","Footer","Container","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Работает только при заблокированном фоне: `blockBackground = true`\n */\n disableFocusLock: boolean;\n\n /**\n * задает отступ от края экрана\n */\n offset?: number | string;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layoutRef: HTMLElement | null = null;\n private footer: SidePageFooter | null = null;\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n if (this.footer) {\n this.footer.update();\n }\n };\n\n public static defaultProps = {\n disableFocusLock: true,\n offset: 0,\n };\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { blockBackground, disableAnimations } = this.props;\n\n return (\n <CommonWrapper {...this.props}>\n <RenderContainer>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </RenderContainer>\n </CommonWrapper>\n );\n }\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock, offset } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{\n width: width || (blockBackground ? 800 : 500),\n right: fromLeft ? 'auto' : offset,\n left: fromLeft ? offset : 'auto',\n }}\n >\n <FocusLock disabled={disableFocusLock || !blockBackground} autoFocus={false} className={styles.focusLock()}>\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.wrapperLeft()]: fromLeft,\n [styles.wrapperMarginLeft()]: this.state.hasMargin && fromLeft,\n [styles.wrapperMarginRight()]: this.state.hasMargin && !fromLeft,\n [styles.shadow(this.theme)]: this.state.hasShadow,\n })}\n ref={(_) => (this.layoutRef = _)}\n >\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </RenderLayer>\n </FocusLock>\n </ZIndex>\n );\n }\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layoutRef) {\n return 'auto';\n }\n return this.layoutRef.clientWidth;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["SidePage.tsx"],"names":["React","CSSTransition","FocusLock","isKeyEscape","LayoutEvents","stopPropagation","HideBodyVerticalScroll","ModalStack","RenderContainer","RenderLayer","ZIndex","ThemeContext","CommonWrapper","cx","isTestEnv","SidePageBody","SidePageContainer","SidePageContext","SidePageFooter","SidePageHeader","styles","TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","theme","stackSubscription","layoutRef","footer","updateLayout","update","getSidePageContextProps","requestClose","getWidth","footerRef","setHasHeader","setHasFooter","setHasPanel","clientWidth","handleStackChange","stack","sidePages","filter","x","props","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","isBlocking","setState","stackPosition","handleClickOutside","e","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","add","componentWillUnmount","removeEventListener","remove","render","renderMain","blockBackground","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","width","disableFocusLock","offset","root","emit","right","left","focusLock","wrapper","wrapperLeft","wrapperMarginLeft","wrapperMarginRight","shadow","_","children","overlay","background","backgroundGray","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","Component","__KONTUR_REACT_UI__","Header","Body","Footer","Container","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Работает только при заблокированном фоне: `blockBackground = true`\n */\n disableFocusLock: boolean;\n\n /**\n * задает отступ от края экрана\n */\n offset?: number | string;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layoutRef: HTMLElement | null = null;\n private footer: SidePageFooter | null = null;\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n if (this.footer) {\n this.footer.update();\n }\n };\n\n public static defaultProps = {\n disableAnimations: isTestEnv,\n disableFocusLock: true,\n offset: 0,\n };\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { blockBackground, disableAnimations } = this.props;\n\n return (\n <CommonWrapper {...this.props}>\n <RenderContainer>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </RenderContainer>\n </CommonWrapper>\n );\n }\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock, offset } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{\n width: width || (blockBackground ? 800 : 500),\n right: fromLeft ? 'auto' : offset,\n left: fromLeft ? offset : 'auto',\n }}\n >\n <FocusLock disabled={disableFocusLock || !blockBackground} autoFocus={false} className={styles.focusLock()}>\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.wrapperLeft()]: fromLeft,\n [styles.wrapperMarginLeft()]: this.state.hasMargin && fromLeft,\n [styles.wrapperMarginRight()]: this.state.hasMargin && !fromLeft,\n [styles.shadow(this.theme)]: this.state.hasShadow,\n })}\n ref={(_) => (this.layoutRef = _)}\n >\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </RenderLayer>\n </FocusLock>\n </ZIndex>\n );\n }\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layoutRef) {\n return 'auto';\n }\n return this.layoutRef.clientWidth;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
|
|
@@ -210,18 +210,23 @@ export var Popup = /*#__PURE__*/function (_React$Component) {
|
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
this.delayUpdateLocation();
|
|
213
|
+
} else if (this.state.location) {
|
|
214
|
+
this.setState({
|
|
215
|
+
location: DUMMY_LOCATION
|
|
216
|
+
});
|
|
213
217
|
}
|
|
214
218
|
};
|
|
215
219
|
|
|
216
220
|
_proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {
|
|
217
221
|
var hadNoLocation = prevState.location === DUMMY_LOCATION;
|
|
218
222
|
var hasLocation = this.state.location !== DUMMY_LOCATION;
|
|
223
|
+
var wasClosed = prevProps.opened && !this.props.opened;
|
|
219
224
|
|
|
220
225
|
if (hadNoLocation && hasLocation && this.props.onOpen) {
|
|
221
226
|
this.props.onOpen();
|
|
222
227
|
}
|
|
223
228
|
|
|
224
|
-
if (
|
|
229
|
+
if (wasClosed && !hasLocation && this.props.onClose) {
|
|
225
230
|
this.props.onClose();
|
|
226
231
|
}
|
|
227
232
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Popup.tsx"],"names":["React","findDOMNode","PropTypes","Transition","raf","warning","LayoutEvents","ZIndex","RenderContainer","isFunction","isNonNullable","isIE11","isEdge","isSafari","ThemeContext","isHTMLElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","DUMMY_LOCATION","position","coordinates","top","left","PopupPositions","Popup","state","location","props","opened","theme","layoutEventsToken","locationUpdateId","lastPopupElement","anchorElement","anchorInstance","refAnchorElement","instance","element","extractElement","updateAnchorElement","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","offsetWidth","parseFloat","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","zIndex","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","addListener","UNSAFE_componentWillReceiveProps","nextProps","delayUpdateLocation","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","onOpen","onClose","componentWillUnmount","removeEventListeners","remove","render","renderMain","useWrapper","child","isValidElement","undefined","renderContent","addEventListeners","addEventListener","removeEventListener","backgroundColor","disableAnimations","maxWidth","hasShadow","ignoreHover","children","renderChildren","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","content","contentInner","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","cancel","x","y","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","Math","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { findDOMNode } from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isHTMLElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nconst DUMMY_LOCATION: PopupLocation = {\n position: 'top left',\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport type PopupPosition =\n | 'top left'\n | 'top center'\n | 'top right'\n | 'right top'\n | 'right middle'\n | 'right bottom'\n | 'bottom left'\n | 'bottom center'\n | 'bottom right'\n | 'left top'\n | 'left middle'\n | 'left bottom';\n\nexport const PopupPositions: PopupPosition[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n];\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin: boolean;\n hasShadow: boolean;\n disableAnimations: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset: number;\n positions: PopupPosition[];\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n ignoreHover: boolean;\n width: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPosition;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<HTMLElement>;\n private anchorElement: Nullable<HTMLElement> = null;\n private anchorInstance: Nullable<React.ReactInstance>;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n }\n\n public UNSAFE_componentWillReceiveProps(nextProps: Readonly<PopupProps>) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (nextProps.opened) {\n if (!this.state.location) {\n this.setState({ location: DUMMY_LOCATION });\n }\n this.delayUpdateLocation();\n }\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n if (hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (!hadNoLocation && !this.state.location && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n this.removeEventListeners(this.anchorElement);\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\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 private renderMain() {\n const { location } = this.state;\n const { anchorElement, useWrapper } = this.props;\n\n let child: Nullable<React.ReactNode> = null;\n if (isHTMLElement(anchorElement)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n child = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n child = <span>{anchorElement}</span>;\n }\n\n return (\n <RenderContainer anchor={child} ref={child ? this.refAnchorElement : undefined}>\n {location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private refAnchorElement = (instance: React.ReactInstance | null) => {\n this.anchorInstance = instance;\n const element = this.extractElement(instance);\n this.updateAnchorElement(element);\n this.anchorElement = element;\n };\n\n private extractElement(instance: React.ReactInstance | null) {\n if (!instance) {\n return null;\n }\n const element = findDOMNode(instance);\n return isHTMLElement(element) ? element : null;\n }\n\n private updateAnchorElement(element: HTMLElement | null) {\n const anchorElement = this.anchorElement;\n\n if (element !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = element;\n this.addEventListeners(element);\n }\n }\n\n private addEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.addEventListener('mouseenter', this.handleMouseEnter);\n element.addEventListener('mouseleave', this.handleMouseLeave);\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private removeEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n return this.anchorElement ? (this.anchorElement.offsetWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private renderContent(location: PopupLocation) {\n const { backgroundColor, disableAnimations, maxWidth, hasShadow, ignoreHover, opened, width } = this.props;\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n >\n {(state: string) => (\n <CommonWrapper {...this.props}>\n <ZIndex\n ref={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n <div className={styles.content(this.theme)} data-tid={'PopupContent'}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={'PopupContentInner'}\n >\n {children}\n </div>\n </div>\n {this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (zIndex: ZIndex | null) => {\n if (zIndex) {\n this.lastPopupElement = zIndex && (findDOMNode(zIndex) as HTMLElement);\n }\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, hasShadow, backgroundColor, borderColor } = this.props;\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n this.props.hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n if (this.anchorInstance) {\n this.updateAnchorElement(this.extractElement(this.anchorInstance));\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (x == null || y == null) {\n return false;\n }\n\n return (\n x.coordinates.left === y.coordinates.left && x.coordinates.top === y.coordinates.top && x.position === y.position\n );\n }\n\n private getLocation(popupElement: HTMLElement, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isHTMLElement(anchorElement),\n 'Anchor element is not defined or not instance of HTMLElement',\n );\n\n if (!(anchorElement && isHTMLElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPosition;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.props.hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.props.popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Popup.tsx"],"names":["React","findDOMNode","PropTypes","Transition","raf","warning","LayoutEvents","ZIndex","RenderContainer","isFunction","isNonNullable","isIE11","isEdge","isSafari","ThemeContext","isHTMLElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","DUMMY_LOCATION","position","coordinates","top","left","PopupPositions","Popup","state","location","props","opened","theme","layoutEventsToken","locationUpdateId","lastPopupElement","anchorElement","anchorInstance","refAnchorElement","instance","element","extractElement","updateAnchorElement","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","offsetWidth","parseFloat","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","zIndex","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","addListener","UNSAFE_componentWillReceiveProps","nextProps","delayUpdateLocation","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","onOpen","onClose","componentWillUnmount","removeEventListeners","remove","render","renderMain","useWrapper","child","isValidElement","undefined","renderContent","addEventListeners","addEventListener","removeEventListener","backgroundColor","disableAnimations","maxWidth","hasShadow","ignoreHover","children","renderChildren","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","content","contentInner","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","cancel","x","y","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","Math","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { findDOMNode } from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isHTMLElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nconst DUMMY_LOCATION: PopupLocation = {\n position: 'top left',\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport type PopupPosition =\n | 'top left'\n | 'top center'\n | 'top right'\n | 'right top'\n | 'right middle'\n | 'right bottom'\n | 'bottom left'\n | 'bottom center'\n | 'bottom right'\n | 'left top'\n | 'left middle'\n | 'left bottom';\n\nexport const PopupPositions: PopupPosition[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n];\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin: boolean;\n hasShadow: boolean;\n disableAnimations: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset: number;\n positions: PopupPosition[];\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n ignoreHover: boolean;\n width: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPosition;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<HTMLElement>;\n private anchorElement: Nullable<HTMLElement> = null;\n private anchorInstance: Nullable<React.ReactInstance>;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n }\n\n public UNSAFE_componentWillReceiveProps(nextProps: Readonly<PopupProps>) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (nextProps.opened) {\n if (!this.state.location) {\n this.setState({ location: DUMMY_LOCATION });\n }\n this.delayUpdateLocation();\n } else if (this.state.location) {\n this.setState({ location: DUMMY_LOCATION });\n }\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n const wasClosed = prevProps.opened && !this.props.opened;\n\n if (hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n this.removeEventListeners(this.anchorElement);\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\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 private renderMain() {\n const { location } = this.state;\n const { anchorElement, useWrapper } = this.props;\n\n let child: Nullable<React.ReactNode> = null;\n if (isHTMLElement(anchorElement)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n child = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n child = <span>{anchorElement}</span>;\n }\n\n return (\n <RenderContainer anchor={child} ref={child ? this.refAnchorElement : undefined}>\n {location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private refAnchorElement = (instance: React.ReactInstance | null) => {\n this.anchorInstance = instance;\n const element = this.extractElement(instance);\n this.updateAnchorElement(element);\n this.anchorElement = element;\n };\n\n private extractElement(instance: React.ReactInstance | null) {\n if (!instance) {\n return null;\n }\n const element = findDOMNode(instance);\n return isHTMLElement(element) ? element : null;\n }\n\n private updateAnchorElement(element: HTMLElement | null) {\n const anchorElement = this.anchorElement;\n\n if (element !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = element;\n this.addEventListeners(element);\n }\n }\n\n private addEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.addEventListener('mouseenter', this.handleMouseEnter);\n element.addEventListener('mouseleave', this.handleMouseLeave);\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private removeEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n return this.anchorElement ? (this.anchorElement.offsetWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private renderContent(location: PopupLocation) {\n const { backgroundColor, disableAnimations, maxWidth, hasShadow, ignoreHover, opened, width } = this.props;\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n >\n {(state: string) => (\n <CommonWrapper {...this.props}>\n <ZIndex\n ref={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n <div className={styles.content(this.theme)} data-tid={'PopupContent'}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={'PopupContentInner'}\n >\n {children}\n </div>\n </div>\n {this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (zIndex: ZIndex | null) => {\n if (zIndex) {\n this.lastPopupElement = zIndex && (findDOMNode(zIndex) as HTMLElement);\n }\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, hasShadow, backgroundColor, borderColor } = this.props;\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n this.props.hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n if (this.anchorInstance) {\n this.updateAnchorElement(this.extractElement(this.anchorInstance));\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (x == null || y == null) {\n return false;\n }\n\n return (\n x.coordinates.left === y.coordinates.left && x.coordinates.top === y.coordinates.top && x.position === y.position\n );\n }\n\n private getLocation(popupElement: HTMLElement, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isHTMLElement(anchorElement),\n 'Anchor element is not defined or not instance of HTMLElement',\n );\n\n if (!(anchorElement && isHTMLElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPosition;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.props.hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.props.popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { isFirefox } from "../../client"; // Checkbox not checked in Firefox if key of modifier was active
|
|
2
|
+
// shift+click, ctrl+click on Win and cmd+click on Mac
|
|
3
|
+
// https://bugzilla.mozilla.org/show_bug.cgi?id=559506
|
|
4
|
+
|
|
5
|
+
export var fixFirefoxModifiedClickOnLabel = function fixFirefoxModifiedClickOnLabel(ref) {
|
|
6
|
+
return function (e) {
|
|
7
|
+
var input = ref.current;
|
|
8
|
+
|
|
9
|
+
if (input && !input.disabled && isFirefox && (e.shiftKey || e.ctrlKey || e.metaKey)) {
|
|
10
|
+
// Currently only valid for Radio and Checkbox
|
|
11
|
+
input.checked = !input.checked;
|
|
12
|
+
var type = input.type;
|
|
13
|
+
input.type = 'text';
|
|
14
|
+
e.persist();
|
|
15
|
+
input.dispatchEvent(new MouseEvent('change', e.nativeEvent));
|
|
16
|
+
input.type = type;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["fixFirefoxModifiedClickOnLabel.ts"],"names":["isFirefox","fixFirefoxModifiedClickOnLabel","ref","e","input","current","disabled","shiftKey","ctrlKey","metaKey","checked","type","persist","dispatchEvent","MouseEvent","nativeEvent"],"mappings":";;AAEA,SAASA,SAAT,QAA0B,WAA1B;;AAEA;AACA;AACA;AACA,OAAO,IAAMC,8BAA8B;AACzC,SADWA,8BACX,CAACC,GAAD,UAA4C,UAACC,CAAD,EAA2C;AACrF,QAAMC,KAAK,GAAGF,GAAG,CAACG,OAAlB;AACA,QAAID,KAAK,IAAI,CAACA,KAAK,CAACE,QAAhB,IAA4BN,SAA5B,KAA0CG,CAAC,CAACI,QAAF,IAAcJ,CAAC,CAACK,OAAhB,IAA2BL,CAAC,CAACM,OAAvE,CAAJ,EAAqF;AACnF;AACAL,MAAAA,KAAK,CAACM,OAAN,GAAgB,CAACN,KAAK,CAACM,OAAvB;AACA,UAAMC,IAAI,GAAGP,KAAK,CAACO,IAAnB;AACAP,MAAAA,KAAK,CAACO,IAAN,GAAa,MAAb;AACAR,MAAAA,CAAC,CAACS,OAAF;AACAR,MAAAA,KAAK,CAACS,aAAN,CAAoB,IAAIC,UAAJ,CAAe,QAAf,EAAyBX,CAAC,CAACY,WAA3B,CAApB;AACAX,MAAAA,KAAK,CAACO,IAAN,GAAaA,IAAb;AACD;AACF,GAXD,EADK","sourcesContent":["import React from 'react';\n\nimport { isFirefox } from '../client';\n\n// Checkbox not checked in Firefox if key of modifier was active\n// shift+click, ctrl+click on Win and cmd+click on Mac\n// https://bugzilla.mozilla.org/show_bug.cgi?id=559506\nexport const fixFirefoxModifiedClickOnLabel =\n (ref: React.RefObject<HTMLInputElement>) => (e: React.MouseEvent<HTMLLabelElement>) => {\n const input = ref.current;\n if (input && !input.disabled && isFirefox && (e.shiftKey || e.ctrlKey || e.metaKey)) {\n // Currently only valid for Radio and Checkbox\n input.checked = !input.checked;\n const type = input.type;\n input.type = 'text';\n e.persist();\n input.dispatchEvent(new MouseEvent('change', e.nativeEvent));\n input.type = type;\n }\n };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["getDisplayName.ts"],"names":["getDisplayName","RC","displayName","name"],"mappings":";;;;AAIA,OAAO,SAASA,cAAT;AACLC,EADK;AAEG;AACR,SAAOA,EAAE,CAACC,WAAH,IAAkBD,EAAE,CAACE,IAArB,IAA6B,WAApC;AACD","sourcesContent":["import React from 'react';\n\nimport { ReactUIComponentWithRef } from './forwardRefAndName';\n\nexport function getDisplayName<P>(\n RC: React.ComponentType<P> | React.FunctionComponent<P> | ReactUIComponentWithRef<any, P>,\n): string {\n return RC.displayName || RC.name || 'Anonymous';\n}\n"]}
|