@skbkontur/react-ui 5.6.8 → 5.6.9

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.
Files changed (40) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/cjs/components/FileUploader/FileUploader.js +2 -1
  3. package/cjs/components/FileUploader/FileUploader.js.map +1 -1
  4. package/cjs/components/FileUploader/FileUploader.styles.d.ts +2 -1
  5. package/cjs/components/FileUploader/FileUploader.styles.js +15 -8
  6. package/cjs/components/FileUploader/FileUploader.styles.js.map +1 -1
  7. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +1 -4
  8. package/cjs/internal/CustomComboBox/ComboBoxView.js +1 -0
  9. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  10. package/cjs/internal/MobilePopup/MobilePopup.d.ts +3 -0
  11. package/cjs/internal/MobilePopup/MobilePopup.js +20 -2
  12. package/cjs/internal/MobilePopup/MobilePopup.js.map +1 -1
  13. package/cjs/internal/MobilePopup/MobilePopup.styles.js +1 -2
  14. package/cjs/internal/MobilePopup/MobilePopup.styles.js.map +1 -1
  15. package/cjs/internal/Popup/Popup.d.ts +13 -1
  16. package/cjs/internal/Popup/Popup.js +183 -11
  17. package/cjs/internal/Popup/Popup.js.map +1 -1
  18. package/cjs/internal/Popup/PopupHelper.d.ts +25 -0
  19. package/cjs/internal/Popup/PopupHelper.js +116 -4
  20. package/cjs/internal/Popup/PopupHelper.js.map +1 -1
  21. package/components/FileUploader/FileUploader/FileUploader.js +2 -2
  22. package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
  23. package/components/FileUploader/FileUploader.styles/FileUploader.styles.js +11 -8
  24. package/components/FileUploader/FileUploader.styles/FileUploader.styles.js.map +1 -1
  25. package/components/FileUploader/FileUploader.styles.d.ts +2 -1
  26. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +1 -0
  27. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  28. package/internal/CustomComboBox/ComboBoxView.d.ts +1 -4
  29. package/internal/MobilePopup/MobilePopup/MobilePopup.js +16 -2
  30. package/internal/MobilePopup/MobilePopup/MobilePopup.js.map +1 -1
  31. package/internal/MobilePopup/MobilePopup.d.ts +3 -0
  32. package/internal/MobilePopup/MobilePopup.styles/MobilePopup.styles.js +1 -1
  33. package/internal/MobilePopup/MobilePopup.styles/MobilePopup.styles.js.map +1 -1
  34. package/internal/Popup/Popup/Popup.js +121 -29
  35. package/internal/Popup/Popup/Popup.js.map +1 -1
  36. package/internal/Popup/Popup.d.ts +13 -1
  37. package/internal/Popup/PopupHelper/PopupHelper.js +106 -3
  38. package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
  39. package/internal/Popup/PopupHelper.d.ts +25 -0
  40. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["React","getRandomID","isNonNullable","Input","InputLikeText","RenderLayer","Spinner","CommonWrapper","MobilePopup","responsiveLayout","rootNode","getRootNode","createPropsGetter","ThemeContext","LoadingIcon","Popup","getMenuPositions","ZIndex","MaskedInput","styles","MaskedInputStyles","cx","InternalTextareaWithLayout","withSize","ArrowDownIcon","ComboBoxMenu","ComboBoxRequestStatus","CustomComboBoxDataTids","getComboBoxTheme","ComboBoxViewIds","menu","ComboBoxView","_class","_ComboBoxView","_React$Component","_this$props$value","_this","_len","arguments","length","args","Array","_key","call","apply","concat","getProps","defaultProps","mobileInput","dropdownContainerRef","createRef","menuId","state","anchorElement","clearCrossShowed","props","showClearIcon","value","toString","getComboBoxMenu","_this$props","items","loading","opened","refMenu","maxMenuHeight","renderTotalCount","renderNotFound","totalCount","_this$getProps","repeatRequest","requestStatus","renderItem","itemWrapper","createElement","hasMargin","onValueChange","handleItemSelect","renderAddButton","isMobile","isMobileLayout","size","renderMenu","_this$getProps2","menuPos","menuAlign","hasShadow","minWidth","priority","priorities","PopupMenu","positions","disablePortal","margin","parseInt","theme","menuOffsetY","ref","renderMobileMenu","rightIcon","_this$props2","onFocus","onInputValueChange","onInputKeyDown","placeholder","textValue","renderSpinner","inputProps","autoComplete","autoFocus","width","onKeyDown","headerChildComponent","_extends","refMobileInput","onCloseRequest","onMobileClose","getParent","handleMobileFocus","_this$mobileInput","onInputClick","focus","item","refInput","input","className","spinnerWrapper","type","caption","dimmed","getRightIcon","_this$props3","drawArrow","_inheritsLoose","_proto","prototype","componentDidMount","updateAnchorElement","parent","setState","componentDidUpdate","prevProps","editing","render","_this2","Consumer","viewMode","Provider","renderMain","_this$props4","onMouseEnter","onMouseLeave","onMouseOver","_this$getProps3","onClickOutside","onFocusOutside","renderInput","active","comboBoxView","style","root","setRootNode","_this$props5","id","align","borderless","disabled","error","onInputBlur","onInputFocus","warning","refInputLikeText","leftIcon","inputMode","ariaDescribedby","ariaLabel","mask","maskChar","formatChars","onBeforePasteInMask","maxLength","onBlur","undefined","onClick","multilineTextareaProps","autoResize","rows","extraRow","maxRows","onBeforePasteValue","_this$getProps4","renderValue","onClearCrossClick","Component","__KONTUR_REACT_UI__","displayName","Unknown"],"sources":["ComboBoxView.tsx"],"sourcesContent":["import type { AriaAttributes, HTMLAttributes } from 'react';\nimport React from 'react';\n\nimport { getRandomID, isNonNullable } from '../../lib/utils';\nimport type { InputIconType, InputProps, ShowClearIcon } from '../../components/Input';\nimport { Input } from '../../components/Input';\nimport { InputLikeText } from '../InputLikeText';\nimport type { Menu } from '../Menu';\nimport type { MenuItemState } from '../../components/MenuItem';\nimport { RenderLayer } from '../RenderLayer';\nimport { Spinner } from '../../components/Spinner';\nimport type { Nullable } from '../../typings/utility-types';\nimport type { CommonProps } from '../CommonWrapper';\nimport { CommonWrapper } from '../CommonWrapper';\nimport { MobilePopup } from '../MobilePopup';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode';\nimport { rootNode, getRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport type { Theme } from '../../lib/theming/Theme';\nimport { LoadingIcon } from '../icons2022/LoadingIcon';\nimport type { ComboBoxExtendedItem, ComboBoxViewMode } from '../../components/ComboBox';\nimport type { SizeProp } from '../../lib/types/props';\nimport { Popup } from '../Popup';\nimport { getMenuPositions } from '../../lib/getMenuPositions';\nimport { ZIndex } from '../ZIndex';\nimport type { MaskedInputOnBeforePasteValue, MaskedInputProps } from '../../components/MaskedInput';\nimport { MaskedInput } from '../../components/MaskedInput';\nimport { styles as MaskedInputStyles } from '../../components/MaskedInput/MaskedInput.styles';\nimport { cx } from '../../lib/theming/Emotion';\nimport { InternalTextareaWithLayout } from '../InternalTextareaWithLayout/InternalTextareaWithLayout';\nimport { withSize } from '../../lib/size/SizeDecorator';\n\nimport { ArrowDownIcon } from './ArrowDownIcon';\nimport { ComboBoxMenu } from './ComboBoxMenu';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { styles } from './CustomComboBox.styles';\nimport { CustomComboBoxDataTids } from './CustomComboBox';\nimport { getComboBoxTheme } from './getComboBoxTheme';\n\ninterface ComboBoxViewProps<T>\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n CommonProps,\n Partial<Pick<MaskedInputProps, 'mask' | 'maskChar' | 'formatChars'>> {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n editing?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n items?: Nullable<Array<ComboBoxExtendedItem<T>>>;\n loading?: boolean;\n /**\n * Позволяет вручную задать текущую позицию выпадающего окна\n */\n menuPos?: 'top' | 'bottom';\n menuAlign?: 'left' | 'right';\n opened?: boolean;\n drawArrow?: boolean;\n placeholder?: string;\n size?: SizeProp;\n textValue?: string;\n totalCount?: number;\n value?: Nullable<T>;\n showClearIcon?: ShowClearIcon;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: string | number;\n maxLength?: number;\n maxMenuHeight?: number | string;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n\n onBeforePasteInMask?: MaskedInputOnBeforePasteValue;\n onValueChange?: (value: T) => void;\n onClickOutside?: (e: Event) => void;\n onFocus?: () => void;\n onMobileClose?: () => void;\n onFocusOutside?: () => void;\n onInputBlur?: () => void;\n onInputValueChange?: (value: string) => void;\n onInputFocus?: () => void;\n onInputClick?: () => void;\n onClearCrossClick?: () => void;\n onInputKeyDown?: (e: React.KeyboardEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n renderItem?: (item: T, state: MenuItemState) => React.ReactNode;\n itemWrapper?: (item: T) => React.ComponentType;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderValue?: (item: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n repeatRequest?: () => void;\n requestStatus?: ComboBoxRequestStatus;\n refInput?: (input: Nullable<Input | InternalTextareaWithLayout>) => void;\n refMenu?: (menu: Nullable<Menu>) => void;\n refInputLikeText?: (inputLikeText: Nullable<InputLikeText>) => void;\n viewMode?: ComboBoxViewMode;\n maxRows?: number;\n}\n\ntype DefaultProps<T> = Required<\n Pick<\n ComboBoxViewProps<T>,\n | 'renderItem'\n | 'renderValue'\n | 'renderAddButton'\n | 'repeatRequest'\n | 'requestStatus'\n | 'onClickOutside'\n | 'onFocusOutside'\n | 'width'\n | 'showClearIcon'\n >\n>;\n\nexport const ComboBoxViewIds = {\n menu: 'ComboBoxView__menu',\n};\n\ninterface ComboBoxViewState {\n anchorElement: Nullable<Element>;\n clearCrossShowed: boolean;\n}\n\n@responsiveLayout\n@rootNode\n@withSize\nexport class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T>, ComboBoxViewState> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxView';\n public static displayName = 'ComboBoxView';\n\n public static defaultProps: DefaultProps<unknown> = {\n renderItem: (item: any) => item,\n renderValue: (item: any) => item,\n renderAddButton: () => null,\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n onClickOutside: () => {\n /**/\n },\n onFocusOutside: () => {\n /**/\n },\n width: 250,\n showClearIcon: 'never',\n };\n\n private getProps = createPropsGetter(ComboBoxView.defaultProps);\n\n public getRootNode!: TGetRootNode;\n private input: Nullable<Input | InternalTextareaWithLayout>;\n private setRootNode!: TSetRootNode;\n private mobileInput: Nullable<Input> = null;\n private isMobileLayout!: boolean;\n private dropdownContainerRef = React.createRef<Popup>();\n private theme!: Theme;\n private size!: SizeProp;\n private menuId = ComboBoxViewIds.menu + getRandomID();\n\n public state = {\n anchorElement: null,\n clearCrossShowed: this.props.showClearIcon === 'always' && !!this.props.value?.toString(),\n };\n\n public componentDidMount() {\n this.updateAnchorElement();\n\n if (this.props.autoFocus && this.props.onFocus) {\n this.props.onFocus();\n }\n }\n\n updateAnchorElement() {\n const parent = this.getParent();\n const anchorElement = this.state.anchorElement;\n\n if (anchorElement !== parent) {\n this.setState({\n anchorElement: parent,\n });\n }\n }\n\n public componentDidUpdate(prevProps: ComboBoxViewProps<T>) {\n const { input, props } = this;\n\n this.updateAnchorElement();\n\n if (props.editing && !prevProps.editing && input) {\n input.focus();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getComboBoxTheme(theme, this.props.viewMode);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n const { onMouseEnter, onMouseLeave, onMouseOver, opened } = this.props;\n const { onClickOutside, onFocusOutside, width } = this.getProps();\n\n const isMobile = this.isMobileLayout;\n\n const input = this.renderInput();\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={onClickOutside} onFocusOutside={onFocusOutside} active={opened}>\n <span\n data-tid={CustomComboBoxDataTids.comboBoxView}\n style={{ width }}\n className={styles.root()}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n ref={this.setRootNode}\n >\n {input}\n {isMobile ? this.renderMobileMenu() : this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getComboBoxMenu = () => {\n const { items, loading, opened, refMenu, maxMenuHeight, renderTotalCount, renderNotFound, totalCount } = this.props;\n\n const { repeatRequest, requestStatus, renderItem, itemWrapper } = this.getProps();\n return (\n <ComboBoxMenu\n hasMargin={false}\n menuId={this.menuId}\n items={items}\n loading={loading}\n maxMenuHeight={maxMenuHeight}\n onValueChange={this.handleItemSelect}\n opened={opened}\n refMenu={refMenu}\n renderTotalCount={renderTotalCount}\n renderItem={renderItem}\n renderNotFound={renderNotFound}\n itemWrapper={itemWrapper}\n renderAddButton={this.renderAddButton}\n repeatRequest={repeatRequest}\n requestStatus={requestStatus}\n totalCount={totalCount}\n isMobile={this.isMobileLayout}\n size={this.size}\n />\n );\n };\n\n private renderMenu = () => {\n const { opened, menuPos, menuAlign } = this.getProps();\n const { anchorElement } = this.state;\n\n return (\n opened &&\n anchorElement && (\n <Popup\n opened\n hasShadow\n minWidth=\"100%\"\n anchorElement={anchorElement}\n priority={ZIndex.priorities.PopupMenu}\n positions={getMenuPositions(menuPos, menuAlign)}\n disablePortal={this.props.disablePortal}\n margin={parseInt(this.theme.menuOffsetY) - 1}\n ref={this.dropdownContainerRef}\n >\n {this.getComboBoxMenu()}\n </Popup>\n )\n );\n };\n\n private renderMobileMenu = () => {\n let rightIcon = null;\n\n const { loading, items, opened, onFocus, onInputValueChange, onInputKeyDown, placeholder, textValue } = this.props;\n if (loading && items && !!items.length) {\n rightIcon = this.renderSpinner();\n }\n\n const inputProps: InputProps = {\n autoComplete: 'off',\n autoFocus: true,\n width: '100%',\n onFocus,\n onValueChange: onInputValueChange,\n onKeyDown: onInputKeyDown,\n value: textValue,\n placeholder,\n rightIcon,\n };\n\n return (\n opened && (\n <MobilePopup\n headerChildComponent={<Input ref={this.refMobileInput} {...inputProps} />}\n onCloseRequest={this.props.onMobileClose}\n opened\n >\n {this.getComboBoxMenu()}\n </MobilePopup>\n )\n );\n };\n\n private getParent = () => {\n return getRootNode(this);\n };\n\n private renderAddButton = (): React.ReactNode => {\n return this.getProps().renderAddButton(this.props.textValue);\n };\n\n private renderInput(): React.ReactNode {\n const isMobile = this.isMobileLayout;\n\n const {\n id,\n align,\n borderless,\n disabled,\n editing,\n error,\n onFocus,\n onInputBlur,\n onInputValueChange,\n onInputFocus,\n onInputClick,\n onInputKeyDown,\n placeholder,\n textValue,\n value,\n warning,\n refInputLikeText,\n leftIcon,\n inputMode,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n showClearIcon,\n mask,\n maskChar,\n formatChars,\n onBeforePasteInMask,\n } = this.props;\n\n const rightIcon = this.getRightIcon();\n\n const inputProps = {\n id,\n align,\n borderless,\n disabled,\n error,\n maxLength: this.props.maxLength,\n onBlur: isMobile ? undefined : onInputBlur,\n onValueChange: onInputValueChange,\n onFocus: onInputFocus,\n onClick: isMobile ? this.handleMobileFocus : onInputClick,\n leftIcon,\n rightIcon,\n value: textValue || '',\n onKeyDown: onInputKeyDown,\n placeholder,\n width: '100%',\n ref: this.refInput,\n warning,\n inputMode,\n autoComplete: 'off',\n 'aria-describedby': ariaDescribedby,\n 'aria-controls': this.menuId,\n 'aria-label': ariaLabel,\n showClearIcon,\n size: this.size,\n };\n\n const multilineTextareaProps = {\n autoResize: true,\n rows: 1,\n extraRow: false,\n maxRows: this.props.maxRows,\n };\n\n if (this.props.viewMode === 'multiline' && !mask) {\n return <InternalTextareaWithLayout {...inputProps} {...multilineTextareaProps} />;\n }\n\n if (editing) {\n if (mask) {\n return (\n <MaskedInput\n {...inputProps}\n type=\"text\"\n mask={mask}\n maskChar={maskChar}\n formatChars={formatChars}\n onBeforePasteValue={onBeforePasteInMask}\n />\n );\n }\n\n if (this.props.viewMode === 'multiline-editing') {\n return <InternalTextareaWithLayout {...inputProps} {...multilineTextareaProps} />;\n }\n\n return <Input {...inputProps} />;\n }\n\n const { renderValue } = this.getProps();\n return (\n <InputLikeText\n id={id}\n align={align}\n borderless={borderless}\n error={error}\n onFocus={onFocus}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n disabled={disabled}\n warning={warning}\n placeholder={placeholder}\n size={this.size}\n width=\"100%\"\n ref={refInputLikeText}\n aria-describedby={ariaDescribedby}\n aria-controls={this.menuId}\n showClearIcon={showClearIcon}\n className={cx(mask && MaskedInputStyles.root(this.theme))}\n onClearCrossClick={this.props.onClearCrossClick}\n >\n {isNonNullable(value) && renderValue ? renderValue(value) : null}\n </InputLikeText>\n );\n }\n\n private handleMobileFocus = () => {\n this.props.onInputClick?.();\n\n this.mobileInput?.focus();\n };\n\n private handleItemSelect = (item: T) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(item);\n }\n\n if (this.isMobileLayout) {\n this.props.onMobileClose?.();\n }\n };\n\n private refInput = (input: Nullable<Input | InternalTextareaWithLayout>) => {\n if (this.props.refInput) {\n this.props.refInput(input);\n }\n this.input = input;\n };\n\n private renderSpinner = () => (\n <span className={styles.spinnerWrapper()}>\n <Spinner type=\"mini\" caption=\"\" dimmed />\n </span>\n );\n\n private getRightIcon = () => {\n const { loading, items, drawArrow, rightIcon } = this.props;\n const size = this.size;\n\n if (loading && items && !!items.length) {\n return <LoadingIcon size={size} />;\n }\n\n if (rightIcon || drawArrow) {\n return rightIcon || <ArrowDownIcon size={size} />;\n }\n\n return null;\n };\n\n private refMobileInput = (input: Nullable<Input>) => {\n this.mobileInput = input;\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","getRandomID","isNonNullable","Input","InputLikeText","RenderLayer","Spinner","CommonWrapper","MobilePopup","responsiveLayout","rootNode","getRootNode","createPropsGetter","ThemeContext","LoadingIcon","Popup","getMenuPositions","ZIndex","MaskedInput","styles","MaskedInputStyles","cx","InternalTextareaWithLayout","withSize","ArrowDownIcon","ComboBoxMenu","ComboBoxRequestStatus","CustomComboBoxDataTids","getComboBoxTheme","ComboBoxViewIds","menu","ComboBoxView","_class","_ComboBoxView","_React$Component","_this$props$value","_this","_len","arguments","length","args","Array","_key","call","apply","concat","getProps","defaultProps","mobileInput","dropdownContainerRef","createRef","menuId","state","anchorElement","clearCrossShowed","props","showClearIcon","value","toString","getComboBoxMenu","_this$props","items","loading","opened","refMenu","maxMenuHeight","renderTotalCount","renderNotFound","totalCount","_this$getProps","repeatRequest","requestStatus","renderItem","itemWrapper","createElement","hasMargin","onValueChange","handleItemSelect","renderAddButton","isMobile","isMobileLayout","size","renderMenu","_this$getProps2","menuPos","menuAlign","hasShadow","tryBestFallbackPosition","minWidth","priority","priorities","PopupMenu","positions","disablePortal","margin","parseInt","theme","menuOffsetY","ref","renderMobileMenu","rightIcon","_this$props2","onFocus","onInputValueChange","onInputKeyDown","placeholder","textValue","renderSpinner","inputProps","autoComplete","autoFocus","width","onKeyDown","headerChildComponent","_extends","refMobileInput","onCloseRequest","onMobileClose","getParent","handleMobileFocus","_this$mobileInput","onInputClick","focus","item","refInput","input","className","spinnerWrapper","type","caption","dimmed","getRightIcon","_this$props3","drawArrow","_inheritsLoose","_proto","prototype","componentDidMount","updateAnchorElement","parent","setState","componentDidUpdate","prevProps","editing","render","_this2","Consumer","viewMode","Provider","renderMain","_this$props4","onMouseEnter","onMouseLeave","onMouseOver","_this$getProps3","onClickOutside","onFocusOutside","renderInput","active","comboBoxView","style","root","setRootNode","_this$props5","id","align","borderless","disabled","error","onInputBlur","onInputFocus","warning","refInputLikeText","leftIcon","inputMode","ariaDescribedby","ariaLabel","mask","maskChar","formatChars","onBeforePasteInMask","maxLength","onBlur","undefined","onClick","multilineTextareaProps","autoResize","rows","extraRow","maxRows","onBeforePasteValue","_this$getProps4","renderValue","onClearCrossClick","Component","__KONTUR_REACT_UI__","displayName","Unknown"],"sources":["ComboBoxView.tsx"],"sourcesContent":["import type { AriaAttributes, HTMLAttributes } from 'react';\nimport React from 'react';\n\nimport { getRandomID, isNonNullable } from '../../lib/utils';\nimport type { InputIconType, InputProps, ShowClearIcon } from '../../components/Input';\nimport { Input } from '../../components/Input';\nimport { InputLikeText } from '../InputLikeText';\nimport type { Menu } from '../Menu';\nimport type { MenuItemState } from '../../components/MenuItem';\nimport { RenderLayer } from '../RenderLayer';\nimport { Spinner } from '../../components/Spinner';\nimport type { Nullable } from '../../typings/utility-types';\nimport type { CommonProps } from '../CommonWrapper';\nimport { CommonWrapper } from '../CommonWrapper';\nimport { MobilePopup } from '../MobilePopup';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode';\nimport { rootNode, getRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport type { Theme } from '../../lib/theming/Theme';\nimport { LoadingIcon } from '../icons2022/LoadingIcon';\nimport type { ComboBoxExtendedItem, ComboBoxViewMode } from '../../components/ComboBox';\nimport type { SizeProp } from '../../lib/types/props';\nimport { Popup } from '../Popup';\nimport { getMenuPositions } from '../../lib/getMenuPositions';\nimport { ZIndex } from '../ZIndex';\nimport type { MaskedInputOnBeforePasteValue, MaskedInputProps } from '../../components/MaskedInput';\nimport { MaskedInput } from '../../components/MaskedInput';\nimport { styles as MaskedInputStyles } from '../../components/MaskedInput/MaskedInput.styles';\nimport { cx } from '../../lib/theming/Emotion';\nimport { InternalTextareaWithLayout } from '../InternalTextareaWithLayout/InternalTextareaWithLayout';\nimport { withSize } from '../../lib/size/SizeDecorator';\n\nimport { ArrowDownIcon } from './ArrowDownIcon';\nimport { ComboBoxMenu } from './ComboBoxMenu';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { styles } from './CustomComboBox.styles';\nimport { CustomComboBoxDataTids } from './CustomComboBox';\nimport { getComboBoxTheme } from './getComboBoxTheme';\n\ninterface ComboBoxViewProps<T>\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n CommonProps,\n Partial<Pick<MaskedInputProps, 'mask' | 'maskChar' | 'formatChars'>> {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n editing?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n items?: Nullable<Array<ComboBoxExtendedItem<T>>>;\n loading?: boolean;\n /**\n * Позволяет вручную задать текущую позицию выпадающего окна\n */\n menuPos?: 'top' | 'bottom';\n menuAlign?: 'left' | 'right';\n opened?: boolean;\n drawArrow?: boolean;\n placeholder?: string;\n size?: SizeProp;\n textValue?: string;\n totalCount?: number;\n value?: Nullable<T>;\n showClearIcon?: ShowClearIcon;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: string | number;\n maxLength?: number;\n maxMenuHeight?: number | string;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n\n onBeforePasteInMask?: MaskedInputOnBeforePasteValue;\n onValueChange?: (value: T) => void;\n onClickOutside?: (e: Event) => void;\n onFocus?: () => void;\n onMobileClose?: () => void;\n onFocusOutside?: () => void;\n onInputBlur?: () => void;\n onInputValueChange?: (value: string) => void;\n onInputFocus?: () => void;\n onInputClick?: () => void;\n onClearCrossClick?: () => void;\n onInputKeyDown?: (e: React.KeyboardEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n renderItem?: (item: T, state: MenuItemState) => React.ReactNode;\n itemWrapper?: (item: T) => React.ComponentType;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderValue?: (item: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n repeatRequest?: () => void;\n requestStatus?: ComboBoxRequestStatus;\n refInput?: (input: Nullable<Input | InternalTextareaWithLayout>) => void;\n refMenu?: (menu: Nullable<Menu>) => void;\n refInputLikeText?: (inputLikeText: Nullable<InputLikeText>) => void;\n viewMode?: ComboBoxViewMode;\n maxRows?: number;\n}\n\ntype DefaultProps<T> = Required<\n Pick<\n ComboBoxViewProps<T>,\n | 'renderItem'\n | 'renderValue'\n | 'renderAddButton'\n | 'repeatRequest'\n | 'requestStatus'\n | 'onClickOutside'\n | 'onFocusOutside'\n | 'width'\n | 'showClearIcon'\n >\n>;\n\nexport const ComboBoxViewIds = {\n menu: 'ComboBoxView__menu',\n};\n\ninterface ComboBoxViewState {\n anchorElement: Nullable<Element>;\n clearCrossShowed: boolean;\n}\n\n@responsiveLayout\n@rootNode\n@withSize\nexport class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T>, ComboBoxViewState> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxView';\n public static displayName = 'ComboBoxView';\n\n public static defaultProps: DefaultProps<unknown> = {\n renderItem: (item: any) => item,\n renderValue: (item: any) => item,\n renderAddButton: () => null,\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n onClickOutside: () => {\n /**/\n },\n onFocusOutside: () => {\n /**/\n },\n width: 250,\n showClearIcon: 'never',\n };\n\n private getProps = createPropsGetter(ComboBoxView.defaultProps);\n\n public getRootNode!: TGetRootNode;\n private input: Nullable<Input | InternalTextareaWithLayout>;\n private setRootNode!: TSetRootNode;\n private mobileInput: Nullable<Input> = null;\n private isMobileLayout!: boolean;\n private dropdownContainerRef = React.createRef<Popup>();\n private theme!: Theme;\n private size!: SizeProp;\n private menuId = ComboBoxViewIds.menu + getRandomID();\n\n public state: ComboBoxViewState = {\n anchorElement: null,\n clearCrossShowed: this.props.showClearIcon === 'always' && !!this.props.value?.toString(),\n };\n\n public componentDidMount() {\n this.updateAnchorElement();\n\n if (this.props.autoFocus && this.props.onFocus) {\n this.props.onFocus();\n }\n }\n\n updateAnchorElement() {\n const parent = this.getParent();\n const anchorElement = this.state.anchorElement;\n\n if (anchorElement !== parent) {\n this.setState({\n anchorElement: parent,\n });\n }\n }\n\n public componentDidUpdate(prevProps: ComboBoxViewProps<T>) {\n const { input, props } = this;\n\n this.updateAnchorElement();\n\n if (props.editing && !prevProps.editing && input) {\n input.focus();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getComboBoxTheme(theme, this.props.viewMode);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n const { onMouseEnter, onMouseLeave, onMouseOver, opened } = this.props;\n const { onClickOutside, onFocusOutside, width } = this.getProps();\n\n const isMobile = this.isMobileLayout;\n\n const input = this.renderInput();\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={onClickOutside} onFocusOutside={onFocusOutside} active={opened}>\n <span\n data-tid={CustomComboBoxDataTids.comboBoxView}\n style={{ width }}\n className={styles.root()}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n ref={this.setRootNode}\n >\n {input}\n {isMobile ? this.renderMobileMenu() : this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getComboBoxMenu = () => {\n const { items, loading, opened, refMenu, maxMenuHeight, renderTotalCount, renderNotFound, totalCount } = this.props;\n\n const { repeatRequest, requestStatus, renderItem, itemWrapper } = this.getProps();\n return (\n <ComboBoxMenu\n hasMargin={false}\n menuId={this.menuId}\n items={items}\n loading={loading}\n maxMenuHeight={maxMenuHeight}\n onValueChange={this.handleItemSelect}\n opened={opened}\n refMenu={refMenu}\n renderTotalCount={renderTotalCount}\n renderItem={renderItem}\n renderNotFound={renderNotFound}\n itemWrapper={itemWrapper}\n renderAddButton={this.renderAddButton}\n repeatRequest={repeatRequest}\n requestStatus={requestStatus}\n totalCount={totalCount}\n isMobile={this.isMobileLayout}\n size={this.size}\n />\n );\n };\n\n private renderMenu = () => {\n const { opened, menuPos, menuAlign } = this.getProps();\n const { anchorElement } = this.state;\n\n return (\n opened &&\n anchorElement && (\n <Popup\n opened\n hasShadow\n tryBestFallbackPosition\n minWidth=\"100%\"\n anchorElement={anchorElement}\n priority={ZIndex.priorities.PopupMenu}\n positions={getMenuPositions(menuPos, menuAlign)}\n disablePortal={this.props.disablePortal}\n margin={parseInt(this.theme.menuOffsetY) - 1}\n ref={this.dropdownContainerRef}\n >\n {this.getComboBoxMenu()}\n </Popup>\n )\n );\n };\n\n private renderMobileMenu = () => {\n let rightIcon = null;\n\n const { loading, items, opened, onFocus, onInputValueChange, onInputKeyDown, placeholder, textValue } = this.props;\n if (loading && items && !!items.length) {\n rightIcon = this.renderSpinner();\n }\n\n const inputProps: InputProps = {\n autoComplete: 'off',\n autoFocus: true,\n width: '100%',\n onFocus,\n onValueChange: onInputValueChange,\n onKeyDown: onInputKeyDown,\n value: textValue,\n placeholder,\n rightIcon,\n };\n\n return (\n opened && (\n <MobilePopup\n headerChildComponent={<Input ref={this.refMobileInput} {...inputProps} />}\n onCloseRequest={this.props.onMobileClose}\n opened\n >\n {this.getComboBoxMenu()}\n </MobilePopup>\n )\n );\n };\n\n private getParent = () => {\n return getRootNode(this);\n };\n\n private renderAddButton = (): React.ReactNode => {\n return this.getProps().renderAddButton(this.props.textValue);\n };\n\n private renderInput(): React.ReactNode {\n const isMobile = this.isMobileLayout;\n\n const {\n id,\n align,\n borderless,\n disabled,\n editing,\n error,\n onFocus,\n onInputBlur,\n onInputValueChange,\n onInputFocus,\n onInputClick,\n onInputKeyDown,\n placeholder,\n textValue,\n value,\n warning,\n refInputLikeText,\n leftIcon,\n inputMode,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n showClearIcon,\n mask,\n maskChar,\n formatChars,\n onBeforePasteInMask,\n } = this.props;\n\n const rightIcon = this.getRightIcon();\n\n const inputProps = {\n id,\n align,\n borderless,\n disabled,\n error,\n maxLength: this.props.maxLength,\n onBlur: isMobile ? undefined : onInputBlur,\n onValueChange: onInputValueChange,\n onFocus: onInputFocus,\n onClick: isMobile ? this.handleMobileFocus : onInputClick,\n leftIcon,\n rightIcon,\n value: textValue || '',\n onKeyDown: onInputKeyDown,\n placeholder,\n width: '100%',\n ref: this.refInput,\n warning,\n inputMode,\n autoComplete: 'off',\n 'aria-describedby': ariaDescribedby,\n 'aria-controls': this.menuId,\n 'aria-label': ariaLabel,\n showClearIcon,\n size: this.size,\n };\n\n const multilineTextareaProps = {\n autoResize: true,\n rows: 1,\n extraRow: false,\n maxRows: this.props.maxRows,\n };\n\n if (this.props.viewMode === 'multiline' && !mask) {\n return <InternalTextareaWithLayout {...inputProps} {...multilineTextareaProps} />;\n }\n\n if (editing) {\n if (mask) {\n return (\n <MaskedInput\n {...inputProps}\n type=\"text\"\n mask={mask}\n maskChar={maskChar}\n formatChars={formatChars}\n onBeforePasteValue={onBeforePasteInMask}\n />\n );\n }\n\n if (this.props.viewMode === 'multiline-editing') {\n return <InternalTextareaWithLayout {...inputProps} {...multilineTextareaProps} />;\n }\n\n return <Input {...inputProps} />;\n }\n\n const { renderValue } = this.getProps();\n return (\n <InputLikeText\n id={id}\n align={align}\n borderless={borderless}\n error={error}\n onFocus={onFocus}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n disabled={disabled}\n warning={warning}\n placeholder={placeholder}\n size={this.size}\n width=\"100%\"\n ref={refInputLikeText}\n aria-describedby={ariaDescribedby}\n aria-controls={this.menuId}\n showClearIcon={showClearIcon}\n className={cx(mask && MaskedInputStyles.root(this.theme))}\n onClearCrossClick={this.props.onClearCrossClick}\n >\n {isNonNullable(value) && renderValue ? renderValue(value) : null}\n </InputLikeText>\n );\n }\n\n private handleMobileFocus = () => {\n this.props.onInputClick?.();\n\n this.mobileInput?.focus();\n };\n\n private handleItemSelect = (item: T) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(item);\n }\n\n if (this.isMobileLayout) {\n this.props.onMobileClose?.();\n }\n };\n\n private refInput = (input: Nullable<Input | InternalTextareaWithLayout>) => {\n if (this.props.refInput) {\n this.props.refInput(input);\n }\n this.input = input;\n };\n\n private renderSpinner = () => (\n <span className={styles.spinnerWrapper()}>\n <Spinner type=\"mini\" caption=\"\" dimmed />\n </span>\n );\n\n private getRightIcon = () => {\n const { loading, items, drawArrow, rightIcon } = this.props;\n const size = this.size;\n\n if (loading && items && !!items.length) {\n return <LoadingIcon size={size} />;\n }\n\n if (rightIcon || drawArrow) {\n return rightIcon || <ArrowDownIcon size={size} />;\n }\n\n return null;\n };\n\n private refMobileInput = (input: Nullable<Input>) => {\n this.mobileInput = input;\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -100,10 +100,7 @@ export declare class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T
100
100
  private theme;
101
101
  private size;
102
102
  private menuId;
103
- state: {
104
- anchorElement: null;
105
- clearCrossShowed: boolean;
106
- };
103
+ state: ComboBoxViewState;
107
104
  componentDidMount(): void;
108
105
  updateAnchorElement(): void;
109
106
  componentDidUpdate(prevProps: ComboBoxViewProps<T>): void;
@@ -13,7 +13,8 @@ import { MobilePopupHeader } from "../MobilePopupHeader";
13
13
  import { MobilePopupFooter } from "../MobilePopupFooter";
14
14
  export var MobilePopupDataTids = {
15
15
  root: 'MobilePopup__root',
16
- container: 'MobilePopup__container'
16
+ container: 'MobilePopup__container',
17
+ backdrop: 'MobilePopup__backdrop'
17
18
  };
18
19
  export var MobilePopup = rootNode(_class = (_MobilePopup = /*#__PURE__*/function (_React$Component) {
19
20
  function MobilePopup() {
@@ -27,6 +28,16 @@ export var MobilePopup = rootNode(_class = (_MobilePopup = /*#__PURE__*/function
27
28
  _this.props.onCloseRequest();
28
29
  }
29
30
  };
31
+ _this.handleBackdropClick = function (event) {
32
+ event.preventDefault();
33
+ event.stopPropagation();
34
+ _this.close();
35
+ };
36
+ _this.handleBackdropMouseDown = function (event) {
37
+ // NOTE: prevent double close event from backdrop and RenderLayer
38
+ event.preventDefault();
39
+ event.stopPropagation();
40
+ };
30
41
  return _this;
31
42
  }
32
43
  _inheritsLoose(MobilePopup, _React$Component);
@@ -68,7 +79,10 @@ export var MobilePopup = rootNode(_class = (_MobilePopup = /*#__PURE__*/function
68
79
  onClick: this.close,
69
80
  className: jsStyles.bottomIndent()
70
81
  }))), /*#__PURE__*/React.createElement("div", {
71
- className: jsStyles.bg()
82
+ "data-tid": MobilePopupDataTids.backdrop,
83
+ className: jsStyles.bg(),
84
+ onMouseDown: this.handleBackdropMouseDown,
85
+ onClick: this.handleBackdropClick
72
86
  }), /*#__PURE__*/React.createElement(HideBodyVerticalScroll, null))));
73
87
  if (this.props.withoutRenderContainer) {
74
88
  return content;
@@ -1 +1 @@
1
- {"version":3,"names":["React","Transition","ThemeContext","RenderContainer","HideBodyVerticalScroll","ZIndex","RenderLayer","rootNode","jsStyles","MobilePopupHeader","MobilePopupFooter","MobilePopupDataTids","root","container","MobilePopup","_class","_MobilePopup","_React$Component","_this","_len","arguments","length","args","Array","_key","call","apply","concat","close","props","onCloseRequest","_inheritsLoose","_proto","prototype","render","_this2","createElement","Consumer","theme","renderMain","content","id","className","zIndex","priority","opened","onExited","onClose","mountOnEnter","unmountOnExit","timeout","wrapper","onClickOutside","ref","setRootNode","caption","headerChildComponent","children","footerChildComponent","onClick","bottomIndent","bg","withoutRenderContainer","Component","__KONTUR_REACT_UI__","displayName","defaultRootNode"],"sources":["MobilePopup.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\nimport React from 'react';\nimport { Transition } from 'react-transition-group';\n\nimport type { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { RenderContainer } from '../RenderContainer';\nimport { HideBodyVerticalScroll } from '../HideBodyVerticalScroll';\nimport { ZIndex } from '../ZIndex';\nimport { RenderLayer } from '../RenderLayer';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode';\nimport { rootNode } from '../../lib/rootNode';\n\nimport { jsStyles } from './MobilePopup.styles';\nimport { MobilePopupHeader } from './MobilePopupHeader';\nimport { MobilePopupFooter } from './MobilePopupFooter';\n\ninterface MobilePopupProps extends Pick<HTMLAttributes<HTMLDivElement>, 'id'> {\n /**\n * Функция, вызываемая при закрытии всплывающего окна\n */\n onClose?: () => void;\n /**\n * Заголовок всплывающего окна, располагается в шапке\n */\n caption?: string;\n /**\n * Шапка всплывающего окна\n */\n headerChildComponent?: React.ReactNode;\n /**\n * Подвал всплывающего окна\n */\n footerChildComponent?: React.ReactNode;\n /**\n * Позволяет получить контент всплывающего окна без обёртки в виде `RenderContainer`\n */\n withoutRenderContainer?: boolean;\n /**\n * Функция, вызываемая при клике по вуали\n */\n onCloseRequest?: () => void;\n /**\n * Позволяет контролировать текущее состояние всплывающего окна\n */\n opened: boolean;\n children?: React.ReactNode;\n}\n\nexport const MobilePopupDataTids = {\n root: 'MobilePopup__root',\n container: 'MobilePopup__container',\n} as const;\n\n@rootNode\nexport class MobilePopup extends React.Component<MobilePopupProps> {\n public static __KONTUR_REACT_UI__ = 'MobileMenuHeader';\n public static displayName = 'MobileMenuHeader';\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n\n private theme!: Theme;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n const content = (\n <ZIndex id={this.props.id} className={jsStyles.zIndex()} priority={'MobilePopup'}>\n <Transition in={this.props.opened} onExited={this.props.onClose} mountOnEnter unmountOnExit timeout={0}>\n <div className={jsStyles.wrapper()}>\n <RenderLayer onClickOutside={this.close}>\n <div\n ref={this.setRootNode}\n data-tid={MobilePopupDataTids.container}\n className={jsStyles.container(this.theme)}\n >\n <div data-tid={MobilePopupDataTids.root} className={jsStyles.root(this.theme)}>\n <MobilePopupHeader caption={this.props.caption}>{this.props.headerChildComponent}</MobilePopupHeader>\n <div className={jsStyles.content(this.theme)}>{this.props.children}</div>\n <MobilePopupFooter>{this.props.footerChildComponent}</MobilePopupFooter>\n </div>\n <div onClick={this.close} className={jsStyles.bottomIndent()} />\n </div>\n </RenderLayer>\n <div className={jsStyles.bg()} />\n <HideBodyVerticalScroll />\n </div>\n </Transition>\n </ZIndex>\n );\n\n if (this.props.withoutRenderContainer) {\n return content;\n }\n\n return <RenderContainer>{content}</RenderContainer>;\n }\n\n public close = () => {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Transition","ThemeContext","RenderContainer","HideBodyVerticalScroll","ZIndex","RenderLayer","rootNode","jsStyles","MobilePopupHeader","MobilePopupFooter","MobilePopupDataTids","root","container","backdrop","MobilePopup","_class","_MobilePopup","_React$Component","_this","_len","arguments","length","args","Array","_key","call","apply","concat","close","props","onCloseRequest","handleBackdropClick","event","preventDefault","stopPropagation","handleBackdropMouseDown","_inheritsLoose","_proto","prototype","render","_this2","createElement","Consumer","theme","renderMain","content","id","className","zIndex","priority","opened","onExited","onClose","mountOnEnter","unmountOnExit","timeout","wrapper","onClickOutside","ref","setRootNode","caption","headerChildComponent","children","footerChildComponent","onClick","bottomIndent","bg","onMouseDown","withoutRenderContainer","Component","__KONTUR_REACT_UI__","displayName","defaultRootNode"],"sources":["MobilePopup.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\nimport React from 'react';\nimport { Transition } from 'react-transition-group';\n\nimport type { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { RenderContainer } from '../RenderContainer';\nimport { HideBodyVerticalScroll } from '../HideBodyVerticalScroll';\nimport { ZIndex } from '../ZIndex';\nimport { RenderLayer } from '../RenderLayer';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode';\nimport { rootNode } from '../../lib/rootNode';\n\nimport { jsStyles } from './MobilePopup.styles';\nimport { MobilePopupHeader } from './MobilePopupHeader';\nimport { MobilePopupFooter } from './MobilePopupFooter';\n\ninterface MobilePopupProps extends Pick<HTMLAttributes<HTMLDivElement>, 'id'> {\n /**\n * Функция, вызываемая при закрытии всплывающего окна\n */\n onClose?: () => void;\n /**\n * Заголовок всплывающего окна, располагается в шапке\n */\n caption?: string;\n /**\n * Шапка всплывающего окна\n */\n headerChildComponent?: React.ReactNode;\n /**\n * Подвал всплывающего окна\n */\n footerChildComponent?: React.ReactNode;\n /**\n * Позволяет получить контент всплывающего окна без обёртки в виде `RenderContainer`\n */\n withoutRenderContainer?: boolean;\n /**\n * Функция, вызываемая при клике по вуали\n */\n onCloseRequest?: () => void;\n /**\n * Позволяет контролировать текущее состояние всплывающего окна\n */\n opened: boolean;\n children?: React.ReactNode;\n}\n\nexport const MobilePopupDataTids = {\n root: 'MobilePopup__root',\n container: 'MobilePopup__container',\n backdrop: 'MobilePopup__backdrop',\n} as const;\n\n@rootNode\nexport class MobilePopup extends React.Component<MobilePopupProps> {\n public static __KONTUR_REACT_UI__ = 'MobileMenuHeader';\n public static displayName = 'MobileMenuHeader';\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n\n private theme!: Theme;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n const content = (\n <ZIndex id={this.props.id} className={jsStyles.zIndex()} priority={'MobilePopup'}>\n <Transition in={this.props.opened} onExited={this.props.onClose} mountOnEnter unmountOnExit timeout={0}>\n <div className={jsStyles.wrapper()}>\n <RenderLayer onClickOutside={this.close}>\n <div\n ref={this.setRootNode}\n data-tid={MobilePopupDataTids.container}\n className={jsStyles.container(this.theme)}\n >\n <div data-tid={MobilePopupDataTids.root} className={jsStyles.root(this.theme)}>\n <MobilePopupHeader caption={this.props.caption}>{this.props.headerChildComponent}</MobilePopupHeader>\n <div className={jsStyles.content(this.theme)}>{this.props.children}</div>\n <MobilePopupFooter>{this.props.footerChildComponent}</MobilePopupFooter>\n </div>\n <div onClick={this.close} className={jsStyles.bottomIndent()} />\n </div>\n </RenderLayer>\n <div\n data-tid={MobilePopupDataTids.backdrop}\n className={jsStyles.bg()}\n onMouseDown={this.handleBackdropMouseDown}\n onClick={this.handleBackdropClick}\n />\n <HideBodyVerticalScroll />\n </div>\n </Transition>\n </ZIndex>\n );\n\n if (this.props.withoutRenderContainer) {\n return content;\n }\n\n return <RenderContainer>{content}</RenderContainer>;\n }\n\n public close = () => {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n };\n\n private handleBackdropClick = (event: React.MouseEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n };\n\n private handleBackdropMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n // NOTE: prevent double close event from backdrop and RenderLayer\n event.preventDefault();\n event.stopPropagation();\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -35,6 +35,7 @@ interface MobilePopupProps extends Pick<HTMLAttributes<HTMLDivElement>, 'id'> {
35
35
  export declare const MobilePopupDataTids: {
36
36
  readonly root: "MobilePopup__root";
37
37
  readonly container: "MobilePopup__container";
38
+ readonly backdrop: "MobilePopup__backdrop";
38
39
  };
39
40
  export declare class MobilePopup extends React.Component<MobilePopupProps> {
40
41
  static __KONTUR_REACT_UI__: string;
@@ -46,5 +47,7 @@ export declare class MobilePopup extends React.Component<MobilePopupProps> {
46
47
  render(): React.JSX.Element;
47
48
  renderMain(): React.JSX.Element;
48
49
  close: () => void;
50
+ private handleBackdropClick;
51
+ private handleBackdropMouseDown;
49
52
  }
50
53
  export {};
@@ -15,7 +15,7 @@ var styles = {
15
15
  return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n position: absolute;\n top: ", ";\n left: ", ";\n right: ", ";\n z-index: 100000;\n "])), t.mobilePopupTopPadding, t.mobilePopupOuterIndentY, t.mobilePopupOuterIndentY);
16
16
  },
17
17
  bg: function bg() {
18
- return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n position: fixed;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n z-index: 9999;\n background: #333333;\n pointer-events: none;\n opacity: 50%;\n "])));
18
+ return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n position: fixed;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n z-index: 9999;\n background: #333333;\n opacity: 50%;\n "])));
19
19
  },
20
20
  bottomIndent: function bottomIndent() {
21
21
  return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n height: 80px;\n "])));
@@ -1 +1 @@
1
- {"version":3,"names":["css","memoizeStyle","styles","root","t","_templateObject","_taggedTemplateLiteralLoose","mobilePopupContainerBorderRadius","mobilePopupContainerBottomPadding","menuBgDefault","wrapper","_templateObject2","content","_templateObject3","bgDefault","container","_templateObject4","mobilePopupTopPadding","mobilePopupOuterIndentY","bg","_templateObject5","bottomIndent","_templateObject6","zIndex","_templateObject7","jsStyles"],"sources":["MobilePopup.styles.ts"],"sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport type { Theme } from '../../lib/theming/Theme';\n\nconst styles = {\n root(t: Theme) {\n return css`\n width: 100%;\n height: 100%;\n flex-direction: column;\n display: flex;\n justify-content: flex-end;\n border-radius: ${t.mobilePopupContainerBorderRadius};\n overflow: hidden;\n padding-bottom: ${t.mobilePopupContainerBottomPadding};\n background: ${t.menuBgDefault};\n `;\n },\n\n wrapper() {\n return css`\n position: fixed;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n overflow: auto;\n `;\n },\n\n content(t: Theme) {\n return css`\n background-color: ${t.bgDefault};\n `;\n },\n\n container(t: Theme) {\n return css`\n position: absolute;\n top: ${t.mobilePopupTopPadding};\n left: ${t.mobilePopupOuterIndentY};\n right: ${t.mobilePopupOuterIndentY};\n z-index: 100000;\n `;\n },\n\n bg() {\n return css`\n position: fixed;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n z-index: 9999;\n background: #333333;\n pointer-events: none;\n opacity: 50%;\n `;\n },\n\n bottomIndent() {\n return css`\n height: 80px;\n `;\n },\n\n zIndex() {\n return css`\n position: relative;\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"],"mappings":"gOAAA,SAASA,GAAG,EAAEC,YAAY,QAAQ,2BAA2B;;;AAG7D,IAAMC,MAAM,GAAG;EACbC,IAAI,WAAAA,KAACC,CAAQ,EAAE;IACb,OAAOJ,GAAG,CAAAK,eAAA,KAAAA,eAAA,GAAAC,2BAAA;;;;;;IAMSF,CAAC,CAACG,gCAAgC;;IAEjCH,CAAC,CAACI,iCAAiC;IACvCJ,CAAC,CAACK,aAAa;;EAEjC,CAAC;;EAEDC,OAAO,WAAAA,QAAA,EAAG;IACR,OAAOV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAL,2BAAA;;;;;;;;EAQZ,CAAC;;EAEDM,OAAO,WAAAA,QAACR,CAAQ,EAAE;IAChB,OAAOJ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAP,2BAAA;IACYF,CAAC,CAACU,SAAS;;EAEnC,CAAC;;EAEDC,SAAS,WAAAA,UAACX,CAAQ,EAAE;IAClB,OAAOJ,GAAG,CAAAgB,gBAAA,KAAAA,gBAAA,GAAAV,2BAAA;;IAEDF,CAAC,CAACa,qBAAqB;IACtBb,CAAC,CAACc,uBAAuB;IACxBd,CAAC,CAACc,uBAAuB;;;EAGtC,CAAC;;EAEDC,EAAE,WAAAA,GAAA,EAAG;IACH,OAAOnB,GAAG,CAAAoB,gBAAA,KAAAA,gBAAA,GAAAd,2BAAA;;;;;;;;;;;EAWZ,CAAC;;EAEDe,YAAY,WAAAA,aAAA,EAAG;IACb,OAAOrB,GAAG,CAAAsB,gBAAA,KAAAA,gBAAA,GAAAhB,2BAAA;;;EAGZ,CAAC;;EAEDiB,MAAM,WAAAA,OAAA,EAAG;IACP,OAAOvB,GAAG,CAAAwB,gBAAA,KAAAA,gBAAA,GAAAlB,2BAAA;;;EAGZ;AACF,CAAC;;AAED,OAAO,IAAMmB,QAAQ,GAAGxB,YAAY,CAACC,MAAM,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["css","memoizeStyle","styles","root","t","_templateObject","_taggedTemplateLiteralLoose","mobilePopupContainerBorderRadius","mobilePopupContainerBottomPadding","menuBgDefault","wrapper","_templateObject2","content","_templateObject3","bgDefault","container","_templateObject4","mobilePopupTopPadding","mobilePopupOuterIndentY","bg","_templateObject5","bottomIndent","_templateObject6","zIndex","_templateObject7","jsStyles"],"sources":["MobilePopup.styles.ts"],"sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport type { Theme } from '../../lib/theming/Theme';\n\nconst styles = {\n root(t: Theme) {\n return css`\n width: 100%;\n height: 100%;\n flex-direction: column;\n display: flex;\n justify-content: flex-end;\n border-radius: ${t.mobilePopupContainerBorderRadius};\n overflow: hidden;\n padding-bottom: ${t.mobilePopupContainerBottomPadding};\n background: ${t.menuBgDefault};\n `;\n },\n\n wrapper() {\n return css`\n position: fixed;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n overflow: auto;\n `;\n },\n\n content(t: Theme) {\n return css`\n background-color: ${t.bgDefault};\n `;\n },\n\n container(t: Theme) {\n return css`\n position: absolute;\n top: ${t.mobilePopupTopPadding};\n left: ${t.mobilePopupOuterIndentY};\n right: ${t.mobilePopupOuterIndentY};\n z-index: 100000;\n `;\n },\n\n bg() {\n return css`\n position: fixed;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n z-index: 9999;\n background: #333333;\n opacity: 50%;\n `;\n },\n\n bottomIndent() {\n return css`\n height: 80px;\n `;\n },\n\n zIndex() {\n return css`\n position: relative;\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"],"mappings":"gOAAA,SAASA,GAAG,EAAEC,YAAY,QAAQ,2BAA2B;;;AAG7D,IAAMC,MAAM,GAAG;EACbC,IAAI,WAAAA,KAACC,CAAQ,EAAE;IACb,OAAOJ,GAAG,CAAAK,eAAA,KAAAA,eAAA,GAAAC,2BAAA;;;;;;IAMSF,CAAC,CAACG,gCAAgC;;IAEjCH,CAAC,CAACI,iCAAiC;IACvCJ,CAAC,CAACK,aAAa;;EAEjC,CAAC;;EAEDC,OAAO,WAAAA,QAAA,EAAG;IACR,OAAOV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAL,2BAAA;;;;;;;;EAQZ,CAAC;;EAEDM,OAAO,WAAAA,QAACR,CAAQ,EAAE;IAChB,OAAOJ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAP,2BAAA;IACYF,CAAC,CAACU,SAAS;;EAEnC,CAAC;;EAEDC,SAAS,WAAAA,UAACX,CAAQ,EAAE;IAClB,OAAOJ,GAAG,CAAAgB,gBAAA,KAAAA,gBAAA,GAAAV,2BAAA;;IAEDF,CAAC,CAACa,qBAAqB;IACtBb,CAAC,CAACc,uBAAuB;IACxBd,CAAC,CAACc,uBAAuB;;;EAGtC,CAAC;;EAEDC,EAAE,WAAAA,GAAA,EAAG;IACH,OAAOnB,GAAG,CAAAoB,gBAAA,KAAAA,gBAAA,GAAAd,2BAAA;;;;;;;;;;EAUZ,CAAC;;EAEDe,YAAY,WAAAA,aAAA,EAAG;IACb,OAAOrB,GAAG,CAAAsB,gBAAA,KAAAA,gBAAA,GAAAhB,2BAAA;;;EAGZ,CAAC;;EAEDiB,MAAM,WAAAA,OAAA,EAAG;IACP,OAAOvB,GAAG,CAAAwB,gBAAA,KAAAA,gBAAA,GAAAlB,2BAAA;;;EAGZ;AACF,CAAC;;AAED,OAAO,IAAMmB,QAAQ,GAAGxB,YAAY,CAACC,MAAM,CAAC","ignoreList":[]}
@@ -440,7 +440,7 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_Popup = /*#__PU
440
440
  // уйти в бесконечный ререндер
441
441
  return x.position === y.position && Math.abs(x.coordinates.top - y.coordinates.top) <= 1 && Math.abs(x.coordinates.left - y.coordinates.left) <= 1;
442
442
  };
443
- _proto.reorderPropsPositionsWithPriorityPos = function reorderPropsPositionsWithPriorityPos() {
443
+ _proto.getOrderedPositions = function getOrderedPositions() {
444
444
  var positions = this.props.positions ? this.props.positions : PopupPinnablePositions;
445
445
  var pos_ = '';
446
446
  if (this.props.pos) {
@@ -459,8 +459,8 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_Popup = /*#__PU
459
459
  };
460
460
  _proto.getLocation = function getLocation(popupElement, location) {
461
461
  var _this$getProps4 = this.getProps(),
462
- tryPreserveFirstRenderedPosition = _this$getProps4.tryPreserveFirstRenderedPosition;
463
- var positions = this.reorderPropsPositionsWithPriorityPos();
462
+ tryBestFallbackPosition = _this$getProps4.tryBestFallbackPosition;
463
+ var positions = this.getOrderedPositions();
464
464
  var anchorElement = this.anchorElement;
465
465
  warning(anchorElement && isInstanceOf(anchorElement, globalObject.Element), 'Anchor element is not defined or not instance of Element');
466
466
  if (!(anchorElement && isInstanceOf(anchorElement, globalObject.Element))) {
@@ -468,31 +468,46 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_Popup = /*#__PU
468
468
  }
469
469
  var anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);
470
470
  var popupRect = PopupHelper.getElementAbsoluteRect(popupElement);
471
- var position;
472
- var coordinates;
473
- if (location && location !== DUMMY_LOCATION && location.position) {
474
- position = location.position;
475
- coordinates = this.getCoordinates(anchorRect, popupRect, position);
476
- var isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);
477
- var canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);
478
- if (
479
- // если нужно сохранить первоначальную позицию и Попап целиком
480
- // находится в пределах вьюпорта (или может быть проскроллен в него)
481
- tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible) ||
482
- // если Попап целиком во вьюпорте и в самой приоритетной позиции
483
- // (иначе нужно попытаться позицию сменить)
484
- isFullyVisible && position === positions[0]) {
485
- // сохраняем текущую позицию
486
- return {
487
- coordinates: coordinates,
488
- position: position,
489
- isFullyVisible: true
490
- };
491
- }
471
+ var reusedLocation = this.tryReuseCurrentLocation(location, positions, anchorRect, popupRect);
472
+ if (reusedLocation) {
473
+ return reusedLocation;
474
+ }
475
+ var fullyVisibleLocation = this.tryGetFirstFullyVisibleLocation(positions, anchorRect, popupRect);
476
+ if (fullyVisibleLocation) {
477
+ return fullyVisibleLocation;
478
+ }
479
+ return this.getFallbackLocation(positions, anchorRect, popupRect, Boolean(tryBestFallbackPosition));
480
+ };
481
+ _proto.tryReuseCurrentLocation = function tryReuseCurrentLocation(location, positions, anchorRect, popupRect) {
482
+ var _this$getProps5 = this.getProps(),
483
+ tryPreserveFirstRenderedPosition = _this$getProps5.tryPreserveFirstRenderedPosition;
484
+ if (!(location && location !== DUMMY_LOCATION && location.position)) {
485
+ return null;
486
+ }
487
+ var position = location.position;
488
+ var coordinates = this.getCoordinates(anchorRect, popupRect, position);
489
+ var isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);
490
+ var canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);
491
+ var shouldReuseCurrentLocation =
492
+ // если нужно сохранить первоначальную позицию и Попап целиком
493
+ // находится в пределах вьюпорта (или может быть проскроллен в него)
494
+ tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible) ||
495
+ // если Попап целиком во вьюпорте и в самой приоритетной позиции
496
+ // (иначе нужно попытаться позицию сменить)
497
+ isFullyVisible && position === positions[0];
498
+ if (!shouldReuseCurrentLocation) {
499
+ return null;
492
500
  }
501
+ return {
502
+ coordinates: coordinates,
503
+ position: position,
504
+ isFullyVisible: true
505
+ };
506
+ };
507
+ _proto.tryGetFirstFullyVisibleLocation = function tryGetFirstFullyVisibleLocation(positions, anchorRect, popupRect) {
493
508
  for (var _iterator = _createForOfIteratorHelperLoose(positions), _step; !(_step = _iterator()).done;) {
494
- position = _step.value;
495
- coordinates = this.getCoordinates(anchorRect, popupRect, position);
509
+ var position = _step.value;
510
+ var coordinates = this.getCoordinates(anchorRect, popupRect, position);
496
511
  if (PopupHelper.isFullyVisible(coordinates, popupRect)) {
497
512
  return {
498
513
  coordinates: coordinates,
@@ -501,14 +516,91 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_Popup = /*#__PU
501
516
  };
502
517
  }
503
518
  }
504
- position = positions[0];
505
- coordinates = this.getCoordinates(anchorRect, popupRect, position);
519
+ return null;
520
+ };
521
+ _proto.getFallbackLocation = function getFallbackLocation(positions, anchorRect, popupRect, tryBestFallbackPosition) {
522
+ var position = tryBestFallbackPosition ? this.pickBestFallbackPosition(positions, anchorRect, popupRect) : positions[0];
523
+ var coordinates = this.getCoordinates(anchorRect, popupRect, position);
506
524
  return {
507
525
  coordinates: coordinates,
508
526
  position: position,
509
- isFullyVisible: false
527
+ isFullyVisible: PopupHelper.isFullyVisible(coordinates, popupRect)
510
528
  };
511
529
  };
530
+ _proto.pickBestFallbackPosition = function pickBestFallbackPosition(positions, anchorRect, popupRect) {
531
+ var _this5 = this;
532
+ var defaultPosition = positions[0];
533
+ var coords = this.getCoordinates(anchorRect, popupRect, defaultPosition);
534
+ var overflow = PopupHelper.getOverflowEdges(coords, popupRect);
535
+ var preferredDirection = PopupHelper.getPreferredDirection(overflow, defaultPosition);
536
+ var preferredAlignOrder = overflow.left || overflow.right ? ['right', 'center', 'left'] : ['center', 'left', 'right'];
537
+ var candidates = PopupHelper.getOrderedFallbackCandidates(positions, overflow, preferredDirection, preferredAlignOrder, PopupPinnablePositions);
538
+ var positionsSet = new Set(positions);
539
+ var viewport = PopupHelper.getViewportAbsoluteRect();
540
+ var evaluatedCandidates = candidates.map(function (position) {
541
+ return _this5.evaluateFallbackCandidate(position, anchorRect, popupRect, viewport);
542
+ });
543
+ var bestAreaCandidate = this.pickBestAreaCandidate(evaluatedCandidates, positionsSet);
544
+ var bestOverflowCandidate = this.pickBestOverflowCandidate(evaluatedCandidates, positionsSet); // Если есть хотя бы одна позиция с ненулевой видимой площадью,
545
+ // выбираем её (с приоритетом полностью видимых вариантов).
546
+ // Иначе — используем старую эвристику по количеству переполненных сторон.
547
+ return bestAreaCandidate && bestAreaCandidate.visibleArea > 0 ? bestAreaCandidate.position : bestOverflowCandidate.position;
548
+ };
549
+ _proto.evaluateFallbackCandidate = function evaluateFallbackCandidate(position, anchorRect, popupRect, viewport) {
550
+ var coordinates = this.getCoordinates(anchorRect, popupRect, position);
551
+ var popupAbsolute = {
552
+ top: coordinates.top,
553
+ left: coordinates.left,
554
+ width: popupRect.width,
555
+ height: popupRect.height
556
+ };
557
+ var overlapWidth = Math.min(popupAbsolute.left + popupAbsolute.width, viewport.left + viewport.width) - Math.max(popupAbsolute.left, viewport.left);
558
+ var overlapHeight = Math.min(popupAbsolute.top + popupAbsolute.height, viewport.top + viewport.height) - Math.max(popupAbsolute.top, viewport.top);
559
+ var visibleWidth = Math.max(0, overlapWidth);
560
+ var visibleHeight = Math.max(0, overlapHeight);
561
+ var overflow = PopupHelper.getOverflowEdges(coordinates, popupRect);
562
+ var isFullyVisible = visibleWidth === popupAbsolute.width && visibleHeight === popupAbsolute.height;
563
+ var isAreaEligible = PopupHelper.getPositionObject(position).direction !== 'left' || isFullyVisible;
564
+ return {
565
+ position: position,
566
+ coordinates: coordinates,
567
+ overflowCount: PopupHelper.getOverflowCount(overflow),
568
+ visibleArea: visibleWidth * visibleHeight,
569
+ isFullyVisible: isFullyVisible,
570
+ isAreaEligible: isAreaEligible
571
+ };
572
+ };
573
+ _proto.pickBestAreaCandidate = function pickBestAreaCandidate(candidates, positionsSet) {
574
+ var bestCandidate = null;
575
+ for (var _iterator2 = _createForOfIteratorHelperLoose(candidates), _step2; !(_step2 = _iterator2()).done;) {
576
+ var candidate = _step2.value;
577
+ if (!candidate.isAreaEligible || candidate.visibleArea <= 0) {
578
+ continue;
579
+ }
580
+ var isBetterArea = !bestCandidate ||
581
+ // предпочитаем любые полностью видимые позиции
582
+ candidate.isFullyVisible && !bestCandidate.isFullyVisible ||
583
+ // среди одинаковых по полноте — большую видимую площадь
584
+ candidate.isFullyVisible === bestCandidate.isFullyVisible && candidate.visibleArea > bestCandidate.visibleArea ||
585
+ // при равной площади — ту, что указана в props.positions
586
+ candidate.visibleArea === bestCandidate.visibleArea && positionsSet.has(candidate.position) && !positionsSet.has(bestCandidate.position);
587
+ if (isBetterArea) {
588
+ bestCandidate = candidate;
589
+ }
590
+ }
591
+ return bestCandidate;
592
+ };
593
+ _proto.pickBestOverflowCandidate = function pickBestOverflowCandidate(candidates, positionsSet) {
594
+ var bestCandidate = candidates[0];
595
+ for (var _iterator3 = _createForOfIteratorHelperLoose(candidates), _step3; !(_step3 = _iterator3()).done;) {
596
+ var candidate = _step3.value;
597
+ var isBetterOverflow = candidate.overflowCount < bestCandidate.overflowCount || candidate.overflowCount === bestCandidate.overflowCount && positionsSet.has(candidate.position) && !positionsSet.has(bestCandidate.position);
598
+ if (isBetterOverflow) {
599
+ bestCandidate = candidate;
600
+ }
601
+ }
602
+ return bestCandidate;
603
+ };
512
604
  _proto.getPinnedPopupOffset = function getPinnedPopupOffset(anchorRect, position) {
513
605
  if (!this.getProps().hasPin || /center|middle/.test(position.align)) {
514
606
  return 0;