@skbkontur/react-ui 3.8.5 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/cjs/components/Button/Button.d.ts +66 -10
  3. package/cjs/components/Button/Button.js +55 -0
  4. package/cjs/components/Button/Button.js.map +1 -1
  5. package/cjs/components/Button/Button.md +42 -30
  6. package/cjs/components/Checkbox/Checkbox.d.ts +2 -2
  7. package/cjs/components/Checkbox/Checkbox.js.map +1 -1
  8. package/cjs/components/ComboBox/ComboBox.d.ts +6 -0
  9. package/cjs/components/ComboBox/ComboBox.js +4 -0
  10. package/cjs/components/ComboBox/ComboBox.js.map +1 -1
  11. package/cjs/components/DateInput/DateInput.d.ts +6 -0
  12. package/cjs/components/DateInput/DateInput.js +6 -0
  13. package/cjs/components/DateInput/DateInput.js.map +1 -1
  14. package/cjs/components/DatePicker/DatePicker.d.ts +6 -0
  15. package/cjs/components/DatePicker/DatePicker.js +6 -0
  16. package/cjs/components/DatePicker/DatePicker.js.map +1 -1
  17. package/cjs/components/Dropdown/Dropdown.d.ts +2 -2
  18. package/cjs/components/Dropdown/Dropdown.js.map +1 -1
  19. package/cjs/components/Hint/Hint.d.ts +5 -0
  20. package/cjs/components/Hint/Hint.js +5 -0
  21. package/cjs/components/Hint/Hint.js.map +1 -1
  22. package/cjs/components/Input/Input.d.ts +6 -2
  23. package/cjs/components/Input/Input.js +4 -0
  24. package/cjs/components/Input/Input.js.map +1 -1
  25. package/cjs/components/Link/Link.js +3 -6
  26. package/cjs/components/Link/Link.js.map +1 -1
  27. package/cjs/components/Link/Link.mixins.js +2 -1
  28. package/cjs/components/Link/Link.mixins.js.map +1 -1
  29. package/cjs/components/Radio/Radio.d.ts +27 -11
  30. package/cjs/components/Radio/Radio.js +19 -6
  31. package/cjs/components/Radio/Radio.js.map +1 -1
  32. package/cjs/components/Radio/Radio.md +36 -12
  33. package/cjs/components/RadioGroup/RadioGroup.d.ts +2 -2
  34. package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
  35. package/cjs/components/Select/Select.d.ts +4 -1
  36. package/cjs/components/Select/Select.js +3 -0
  37. package/cjs/components/Select/Select.js.map +1 -1
  38. package/cjs/components/Tabs/Tab.d.ts +2 -2
  39. package/cjs/components/Tabs/Tab.js.map +1 -1
  40. package/cjs/components/Textarea/Textarea.d.ts +6 -2
  41. package/cjs/components/Textarea/Textarea.js +4 -0
  42. package/cjs/components/Textarea/Textarea.js.map +1 -1
  43. package/cjs/components/Toggle/Toggle.d.ts +2 -2
  44. package/cjs/components/Toggle/Toggle.js.map +1 -1
  45. package/cjs/components/Token/Token.d.ts +6 -0
  46. package/cjs/components/Token/Token.js +6 -0
  47. package/cjs/components/Token/Token.js.map +1 -1
  48. package/cjs/components/TokenInput/TokenInput.d.ts +6 -0
  49. package/cjs/components/TokenInput/TokenInput.js +6 -0
  50. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  51. package/cjs/components/TokenInput/TokenInputMenu.js +1 -1
  52. package/cjs/components/TokenInput/TokenInputMenu.js.map +1 -1
  53. package/cjs/components/Tooltip/Tooltip.d.ts +3 -3
  54. package/cjs/components/Tooltip/Tooltip.js +2 -1
  55. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  56. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +6 -0
  57. package/cjs/internal/CustomComboBox/ComboBoxView.js +6 -0
  58. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  59. package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +6 -0
  60. package/cjs/internal/CustomComboBox/CustomComboBox.js +6 -0
  61. package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  62. package/cjs/internal/Popup/Popup.d.ts +13 -0
  63. package/cjs/internal/Popup/Popup.js +25 -3
  64. package/cjs/internal/Popup/Popup.js.map +1 -1
  65. package/cjs/internal/Popup/PopupHelper.js +1 -0
  66. package/cjs/internal/Popup/PopupHelper.js.map +1 -1
  67. package/components/Button/Button/Button.js.map +1 -1
  68. package/components/Button/Button.d.ts +66 -10
  69. package/components/Button/Button.md +42 -30
  70. package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
  71. package/components/Checkbox/Checkbox.d.ts +2 -2
  72. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  73. package/components/ComboBox/ComboBox.d.ts +6 -0
  74. package/components/DateInput/DateInput/DateInput.js.map +1 -1
  75. package/components/DateInput/DateInput.d.ts +6 -0
  76. package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
  77. package/components/DatePicker/DatePicker.d.ts +6 -0
  78. package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
  79. package/components/Dropdown/Dropdown.d.ts +2 -2
  80. package/components/Hint/Hint/Hint.js.map +1 -1
  81. package/components/Hint/Hint.d.ts +5 -0
  82. package/components/Input/Input/Input.js.map +1 -1
  83. package/components/Input/Input.d.ts +6 -2
  84. package/components/Link/Link/Link.js +4 -8
  85. package/components/Link/Link/Link.js.map +1 -1
  86. package/components/Link/Link.mixins/Link.mixins.js +1 -1
  87. package/components/Link/Link.mixins/Link.mixins.js.map +1 -1
  88. package/components/Radio/Radio/Radio.js +6 -5
  89. package/components/Radio/Radio/Radio.js.map +1 -1
  90. package/components/Radio/Radio.d.ts +27 -11
  91. package/components/Radio/Radio.md +36 -12
  92. package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
  93. package/components/RadioGroup/RadioGroup.d.ts +2 -2
  94. package/components/Select/Select/Select.js.map +1 -1
  95. package/components/Select/Select.d.ts +4 -1
  96. package/components/Tabs/Tab/Tab.js.map +1 -1
  97. package/components/Tabs/Tab.d.ts +2 -2
  98. package/components/Textarea/Textarea/Textarea.js.map +1 -1
  99. package/components/Textarea/Textarea.d.ts +6 -2
  100. package/components/Toggle/Toggle/Toggle.js.map +1 -1
  101. package/components/Toggle/Toggle.d.ts +2 -2
  102. package/components/Token/Token/Token.js.map +1 -1
  103. package/components/Token/Token.d.ts +6 -0
  104. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  105. package/components/TokenInput/TokenInput.d.ts +6 -0
  106. package/components/TokenInput/TokenInputMenu/TokenInputMenu.js +1 -1
  107. package/components/TokenInput/TokenInputMenu/TokenInputMenu.js.map +1 -1
  108. package/components/Tooltip/Tooltip/Tooltip.js +2 -1
  109. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  110. package/components/Tooltip/Tooltip.d.ts +3 -3
  111. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  112. package/internal/CustomComboBox/ComboBoxView.d.ts +6 -0
  113. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
  114. package/internal/CustomComboBox/CustomComboBox.d.ts +6 -0
  115. package/internal/Popup/Popup/Popup.js +9 -2
  116. package/internal/Popup/Popup/Popup.js.map +1 -1
  117. package/internal/Popup/Popup.d.ts +13 -0
  118. package/internal/Popup/PopupHelper/PopupHelper.js +2 -1
  119. package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
  120. package/package.json +2 -2
@@ -104,9 +104,9 @@ export interface TooltipProps extends CommonProps {
104
104
  */
105
105
  disableAnimations: boolean;
106
106
  /**
107
- * Добавить обертку над children в виде \<span />.
108
- * Требуется для корректного позиционирования в случае
109
- * передачи в корень тултипа нескольких элементов вместо одного.
107
+ * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.
108
+ *
109
+ * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.
110
110
  */
111
111
  useWrapper: boolean;
112
112
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["ComboBoxView.tsx"],"names":["React","findDOMNode","isNonNullable","DropdownContainer","Input","InputLikeText","RenderLayer","Spinner","ArrowChevronDownIcon","CommonWrapper","ComboBoxMenu","ComboBoxRequestStatus","styles","ComboBoxView","input","renderAddButton","props","textValue","handleItemSelect","item","onValueChange","refInput","renderSpinner","spinnerWrapper","getRightIcon","loading","items","drawArrow","rightIcon","length","rightIconWrapper","componentDidMount","autoFocus","onFocus","componentDidUpdate","prevProps","editing","focus","render","menuAlign","onClickOutside","onFocusOutside","onMouseEnter","onMouseLeave","onMouseOver","opened","refMenu","maxMenuHeight","renderTotalCount","renderItem","renderNotFound","repeatRequest","requestStatus","totalCount","size","width","renderInput","topOffsets","spinner","arrow","root","disablePortal","align","borderless","disabled","error","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","placeholder","renderValue","value","warning","refInputLikeText","leftIcon","inputMode","maxLength","Component","__KONTUR_REACT_UI__","defaultProps","undefined","Unknown"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { findDOMNode } from 'react-dom';\n\nimport { isNonNullable } from '../../lib/utils';\nimport { DropdownContainer } from '../DropdownContainer';\nimport { Input, InputIconType } from '../../components/Input';\nimport { InputLikeText } from '../InputLikeText';\nimport { Menu } from '../Menu';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { RenderLayer } from '../RenderLayer';\nimport { Spinner } from '../../components/Spinner';\nimport { Nullable } from '../../typings/utility-types';\nimport { ArrowChevronDownIcon } from '../icons/16px';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\n\nimport { ComboBoxMenu } from './ComboBoxMenu';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { styles } from './CustomComboBox.styles';\n\ninterface ComboBoxViewProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n editing?: boolean;\n error?: boolean;\n items?: Nullable<T[]>;\n loading?: boolean;\n menuAlign?: 'left' | 'right';\n opened?: boolean;\n drawArrow?: boolean;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n textValue?: string;\n totalCount?: number;\n value?: Nullable<T>;\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 onValueChange?: (value: T) => void;\n onClickOutside?: (e: Event) => void;\n onFocus?: () => void;\n onFocusOutside?: () => void;\n onInputBlur?: () => void;\n onInputValueChange?: (value: string) => void;\n onInputFocus?: () => void;\n onInputClick?: () => 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 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>) => void;\n refMenu?: (menu: Nullable<Menu>) => void;\n refInputLikeText?: (inputLikeText: Nullable<InputLikeText>) => void;\n}\n\nexport class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxView';\n\n public static defaultProps = {\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 size: 'small',\n width: 250,\n };\n\n private input: Nullable<Input>;\n\n public componentDidMount() {\n if (this.props.autoFocus && this.props.onFocus) {\n this.props.onFocus();\n }\n }\n\n public componentDidUpdate(prevProps: ComboBoxViewProps<T>) {\n const { input, props } = this;\n if (props.editing && !prevProps.editing && input) {\n input.focus();\n }\n }\n\n public render() {\n const {\n items,\n loading,\n menuAlign,\n onClickOutside,\n onFocusOutside,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n opened,\n refMenu,\n maxMenuHeight,\n renderTotalCount,\n renderItem,\n renderNotFound,\n repeatRequest,\n requestStatus,\n totalCount,\n size,\n width,\n } = this.props;\n\n const input = this.renderInput();\n\n const topOffsets = {\n spinner: 6,\n arrow: 15,\n };\n if (size === 'medium') {\n topOffsets.spinner += 4;\n topOffsets.arrow += 4;\n }\n if (size === 'large') {\n topOffsets.spinner += 6;\n topOffsets.arrow += 6;\n }\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={onClickOutside} onFocusOutside={onFocusOutside} active={opened}>\n <span\n style={{ width }}\n className={styles.root()}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n >\n {input}\n {opened && (\n <DropdownContainer\n align={menuAlign}\n getParent={() => findDOMNode(this)}\n offsetY={1}\n disablePortal={this.props.disablePortal}\n >\n <ComboBoxMenu\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 renderAddButton={this.renderAddButton}\n repeatRequest={repeatRequest}\n requestStatus={requestStatus}\n totalCount={totalCount}\n />\n </DropdownContainer>\n )}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderAddButton = (): React.ReactNode => {\n return this.props.renderAddButton(this.props.textValue);\n };\n\n private renderInput(): React.ReactNode {\n const {\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 renderValue,\n size,\n textValue,\n value,\n warning,\n refInputLikeText,\n leftIcon,\n inputMode,\n } = this.props;\n\n const rightIcon = this.getRightIcon();\n\n if (editing) {\n return (\n <Input\n align={align}\n borderless={borderless}\n disabled={disabled}\n error={error}\n maxLength={this.props.maxLength}\n onBlur={onInputBlur}\n onValueChange={onInputValueChange}\n onFocus={onInputFocus}\n onClick={onInputClick}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n value={textValue || ''}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n width=\"100%\"\n size={size}\n ref={this.refInput}\n warning={warning}\n inputMode={inputMode}\n />\n );\n }\n\n return (\n <InputLikeText\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={size}\n width=\"100%\"\n ref={refInputLikeText}\n >\n {isNonNullable(value) && renderValue ? renderValue(value) : null}\n </InputLikeText>\n );\n }\n\n private handleItemSelect = (item: T) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(item);\n }\n };\n\n private refInput = (input: Nullable<Input>) => {\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\n if (loading && items && !!items.length) {\n return this.renderSpinner();\n }\n\n if (rightIcon || drawArrow) {\n return <span className={styles.rightIconWrapper()}>{rightIcon ?? <ArrowChevronDownIcon />}</span>;\n }\n\n return null;\n };\n}\n"]}
1
+ {"version":3,"sources":["ComboBoxView.tsx"],"names":["React","findDOMNode","isNonNullable","DropdownContainer","Input","InputLikeText","RenderLayer","Spinner","ArrowChevronDownIcon","CommonWrapper","ComboBoxMenu","ComboBoxRequestStatus","styles","ComboBoxView","input","renderAddButton","props","textValue","handleItemSelect","item","onValueChange","refInput","renderSpinner","spinnerWrapper","getRightIcon","loading","items","drawArrow","rightIcon","length","rightIconWrapper","componentDidMount","autoFocus","onFocus","componentDidUpdate","prevProps","editing","focus","render","menuAlign","onClickOutside","onFocusOutside","onMouseEnter","onMouseLeave","onMouseOver","opened","refMenu","maxMenuHeight","renderTotalCount","renderItem","renderNotFound","repeatRequest","requestStatus","totalCount","size","width","renderInput","topOffsets","spinner","arrow","root","disablePortal","align","borderless","disabled","error","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","placeholder","renderValue","value","warning","refInputLikeText","leftIcon","inputMode","maxLength","Component","__KONTUR_REACT_UI__","defaultProps","undefined","Unknown"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { findDOMNode } from 'react-dom';\n\nimport { isNonNullable } from '../../lib/utils';\nimport { DropdownContainer } from '../DropdownContainer';\nimport { Input, InputIconType } from '../../components/Input';\nimport { InputLikeText } from '../InputLikeText';\nimport { Menu } from '../Menu';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { RenderLayer } from '../RenderLayer';\nimport { Spinner } from '../../components/Spinner';\nimport { Nullable } from '../../typings/utility-types';\nimport { ArrowChevronDownIcon } from '../icons/16px';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\n\nimport { ComboBoxMenu } from './ComboBoxMenu';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { styles } from './CustomComboBox.styles';\n\ninterface ComboBoxViewProps<T> extends CommonProps {\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<T[]>;\n loading?: boolean;\n menuAlign?: 'left' | 'right';\n opened?: boolean;\n drawArrow?: boolean;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n textValue?: string;\n totalCount?: number;\n value?: Nullable<T>;\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 onValueChange?: (value: T) => void;\n onClickOutside?: (e: Event) => void;\n onFocus?: () => void;\n onFocusOutside?: () => void;\n onInputBlur?: () => void;\n onInputValueChange?: (value: string) => void;\n onInputFocus?: () => void;\n onInputClick?: () => 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 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>) => void;\n refMenu?: (menu: Nullable<Menu>) => void;\n refInputLikeText?: (inputLikeText: Nullable<InputLikeText>) => void;\n}\n\nexport class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxView';\n\n public static defaultProps = {\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 size: 'small',\n width: 250,\n };\n\n private input: Nullable<Input>;\n\n public componentDidMount() {\n if (this.props.autoFocus && this.props.onFocus) {\n this.props.onFocus();\n }\n }\n\n public componentDidUpdate(prevProps: ComboBoxViewProps<T>) {\n const { input, props } = this;\n if (props.editing && !prevProps.editing && input) {\n input.focus();\n }\n }\n\n public render() {\n const {\n items,\n loading,\n menuAlign,\n onClickOutside,\n onFocusOutside,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n opened,\n refMenu,\n maxMenuHeight,\n renderTotalCount,\n renderItem,\n renderNotFound,\n repeatRequest,\n requestStatus,\n totalCount,\n size,\n width,\n } = this.props;\n\n const input = this.renderInput();\n\n const topOffsets = {\n spinner: 6,\n arrow: 15,\n };\n if (size === 'medium') {\n topOffsets.spinner += 4;\n topOffsets.arrow += 4;\n }\n if (size === 'large') {\n topOffsets.spinner += 6;\n topOffsets.arrow += 6;\n }\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={onClickOutside} onFocusOutside={onFocusOutside} active={opened}>\n <span\n style={{ width }}\n className={styles.root()}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n >\n {input}\n {opened && (\n <DropdownContainer\n align={menuAlign}\n getParent={() => findDOMNode(this)}\n offsetY={1}\n disablePortal={this.props.disablePortal}\n >\n <ComboBoxMenu\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 renderAddButton={this.renderAddButton}\n repeatRequest={repeatRequest}\n requestStatus={requestStatus}\n totalCount={totalCount}\n />\n </DropdownContainer>\n )}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderAddButton = (): React.ReactNode => {\n return this.props.renderAddButton(this.props.textValue);\n };\n\n private renderInput(): React.ReactNode {\n const {\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 renderValue,\n size,\n textValue,\n value,\n warning,\n refInputLikeText,\n leftIcon,\n inputMode,\n } = this.props;\n\n const rightIcon = this.getRightIcon();\n\n if (editing) {\n return (\n <Input\n align={align}\n borderless={borderless}\n disabled={disabled}\n error={error}\n maxLength={this.props.maxLength}\n onBlur={onInputBlur}\n onValueChange={onInputValueChange}\n onFocus={onInputFocus}\n onClick={onInputClick}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n value={textValue || ''}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n width=\"100%\"\n size={size}\n ref={this.refInput}\n warning={warning}\n inputMode={inputMode}\n />\n );\n }\n\n return (\n <InputLikeText\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={size}\n width=\"100%\"\n ref={refInputLikeText}\n >\n {isNonNullable(value) && renderValue ? renderValue(value) : null}\n </InputLikeText>\n );\n }\n\n private handleItemSelect = (item: T) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(item);\n }\n };\n\n private refInput = (input: Nullable<Input>) => {\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\n if (loading && items && !!items.length) {\n return this.renderSpinner();\n }\n\n if (rightIcon || drawArrow) {\n return <span className={styles.rightIconWrapper()}>{rightIcon ?? <ArrowChevronDownIcon />}</span>;\n }\n\n return null;\n };\n}\n"]}
@@ -13,6 +13,9 @@ interface ComboBoxViewProps<T> extends CommonProps {
13
13
  disablePortal?: boolean;
14
14
  disabled?: boolean;
15
15
  editing?: boolean;
16
+ /**
17
+ * Cостояние валидации при ошибке.
18
+ */
16
19
  error?: boolean;
17
20
  items?: Nullable<T[]>;
18
21
  loading?: boolean;
@@ -24,6 +27,9 @@ interface ComboBoxViewProps<T> extends CommonProps {
24
27
  textValue?: string;
25
28
  totalCount?: number;
26
29
  value?: Nullable<T>;
30
+ /**
31
+ * Cостояние валидации при предупреждении.
32
+ */
27
33
  warning?: boolean;
28
34
  width?: string | number;
29
35
  maxLength?: number;
@@ -1 +1 @@
1
- {"version":3,"sources":["CustomComboBox.tsx"],"names":["React","CancelationError","taskWithDelay","fixClickFocusIE","CommonWrapper","isFirefox","isIE11","ComboBoxRequestStatus","reducer","ComboBoxView","DELAY_BEFORE_SHOW_LOADER","LOADER_SHOW_TIME","DefaultState","inputChanged","editing","items","loading","opened","focused","textValue","repeatRequest","undefined","requestStatus","Unknown","CustomComboBox","state","input","menu","inputLikeText","requestId","loaderShowDelay","cancelationToken","cancelLoaderDelay","focus","props","disabled","selectInputText","selectAll","blur","handleBlur","dispatch","action","effects","nextState","setState","stateAndEffect","Array","forEach","handleEffect","effect","getState","getProps","handleValueChange","value","type","keepFocus","handleFocus","handleClickOutside","e","close","setTimeout","handleInputBlur","handleInputClick","search","query","getItems","cancelPromise","Promise","_","reject","expectingId","resolve","cancelLoader","race","code","cancelSearch","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","placeholder","size","totalCount","warning","width","maxLength","maxMenuHeight","leftIcon","rightIcon","inputMode","onValueChange","onClickOutside","onFocus","onFocusOutside","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","event","persist","onMouseEnter","onMouseOver","onMouseLeave","renderItem","renderNotFound","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","refInputLikeText","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Input, InputIconType } from '../../components/Input';\nimport { Menu } from '../Menu';\nimport { InputLikeText } from '../InputLikeText';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { CancelationError, taskWithDelay } from '../../lib/utils';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { isFirefox, isIE11 } from '../../lib/client';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n error?: boolean;\n maxLength?: number;\n menuAlign?: 'left' | 'right';\n drawArrow?: boolean;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n searchOnFocus?: boolean;\n onValueChange?: (value: T) => void;\n onInputValueChange?: (value: string) => Nullable<string> | void;\n onUnexpectedInput?: (value: string) => void | null | T;\n onFocus?: () => void;\n onBlur?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n totalCount?: number;\n value?: Nullable<T>;\n warning?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderItem: (item: T, state?: MenuItemState) => React.ReactNode;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToValue: (item: T) => string | number;\n getItems: (query: string) => Promise<T[]>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<T[]>;\n inputChanged: boolean;\n focused: boolean;\n repeatRequest: () => void;\n requestStatus: ComboBoxRequestStatus;\n}\n\nexport const DELAY_BEFORE_SHOW_LOADER = 300;\nexport const LOADER_SHOW_TIME = 1000;\n\nexport const DefaultState = {\n inputChanged: false,\n editing: false,\n items: null,\n loading: false,\n opened: false,\n focused: false,\n textValue: '',\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n};\n\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = () => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.input) {\n this.input.focus();\n } else if (this.inputLikeText) {\n this.inputLikeText.focus();\n }\n };\n\n /**\n * @public\n */\n public selectInputText = () => {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.selectAll();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n\n /**\n * @public\n */\n public async search(query: string = this.state.textValue) {\n const { getItems } = this.props;\n\n const cancelPromise: Promise<never> = new Promise((_, reject) => (this.cancelationToken = reject));\n const expectingId = (this.requestId += 1);\n\n if (!this.loaderShowDelay) {\n this.loaderShowDelay = new Promise<void>((resolve) => {\n const cancelLoader = taskWithDelay(() => {\n this.dispatch({ type: 'RequestItems' });\n setTimeout(resolve, LOADER_SHOW_TIME);\n }, DELAY_BEFORE_SHOW_LOADER);\n\n cancelPromise.catch(() => cancelLoader());\n\n this.cancelLoaderDelay = () => {\n cancelLoader();\n resolve();\n };\n });\n }\n\n try {\n const items = await Promise.race([getItems(query), cancelPromise]);\n if (this.state.loading) {\n await Promise.race([this.loaderShowDelay, cancelPromise]);\n }\n if (expectingId === this.requestId) {\n this.dispatch({\n type: 'ReceiveItems',\n items,\n });\n }\n } catch (error) {\n if (error && error.code === 'CancelationError') {\n this.dispatch({ type: 'CancelRequest' });\n } else if (expectingId === this.requestId) {\n this.dispatch({\n type: 'RequestFailure',\n repeatRequest: () => {\n this.search(query);\n if (this.input) {\n this.input.focus();\n }\n },\n });\n }\n } finally {\n if (expectingId === this.requestId) {\n if (!this.state.loading) {\n this.cancelLoaderDelay();\n }\n this.cancelationToken = null;\n this.loaderShowDelay = null;\n }\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.cancelationToken) {\n this.cancelationToken(new CancelationError());\n }\n }\n\n /**\n * @public\n */\n public open() {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close() {\n this.dispatch({ type: 'Close' });\n }\n\n public render() {\n const viewProps = {\n align: this.props.align,\n borderless: this.props.borderless,\n disabled: this.props.disabled,\n disablePortal: this.props.disablePortal,\n editing: this.state.editing,\n error: this.props.error,\n items: this.state.items,\n loading: this.state.loading,\n menuAlign: this.props.menuAlign,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n placeholder: this.props.placeholder,\n size: this.props.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n warning: this.props.warning,\n width: this.props.width,\n maxLength: this.props.maxLength,\n maxMenuHeight: this.props.maxMenuHeight,\n leftIcon: this.props.leftIcon,\n rightIcon: this.props.rightIcon,\n inputMode: this.props.inputMode,\n\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\n onFocusOutside: this.handleBlur,\n onInputBlur: this.handleInputBlur,\n onInputValueChange: (value: string) => this.dispatch({ type: 'TextChange', value }),\n onInputFocus: this.handleFocus,\n onInputClick: this.handleInputClick,\n onInputKeyDown: (event: React.KeyboardEvent) => {\n event.persist();\n this.dispatch({ type: 'KeyPress', event });\n },\n onMouseEnter: this.props.onMouseEnter,\n onMouseOver: this.props.onMouseOver,\n onMouseLeave: this.props.onMouseLeave,\n renderItem: this.props.renderItem,\n renderNotFound: this.props.renderNotFound,\n renderValue: this.props.renderValue,\n renderTotalCount: this.props.renderTotalCount,\n renderAddButton: this.props.renderAddButton,\n repeatRequest: this.state.repeatRequest,\n requestStatus: this.state.requestStatus,\n\n refInput: (input: Nullable<Input>) => {\n this.input = input;\n },\n refMenu: (menu: Nullable<Menu>) => {\n this.menu = menu;\n },\n refInputLikeText: (inputLikeText: Nullable<InputLikeText>) => {\n this.inputLikeText = inputLikeText;\n },\n };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} />\n </CommonWrapper>\n );\n }\n\n public componentDidMount() {\n this.dispatch({ type: 'Mount' });\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate(prevProps: CustomComboBoxProps<T>, prevState: CustomComboBoxState<T>) {\n if (prevState.editing && !this.state.editing) {\n this.handleBlur();\n }\n this.dispatch({ type: 'DidUpdate', prevProps, prevState });\n }\n\n /**\n * @public\n */\n public reset() {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this);\n };\n\n private getProps = () => this.props;\n\n private getState = () => this.state;\n\n private handleValueChange = (value: T) => {\n this.dispatch({\n type: 'ValueChange',\n value,\n keepFocus: true,\n });\n };\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n this.focused = true;\n this.dispatch({ type: 'Focus' });\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n if (this.state.opened) {\n this.close();\n }\n return;\n }\n this.focused = false;\n if (isFirefox || isIE11) {\n // workaround for the Firefox focusout bug\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1363964\n setTimeout(() => {\n this.dispatch({ type: 'Blur' });\n });\n } else {\n this.dispatch({ type: 'Blur' });\n }\n };\n\n private handleInputBlur = () => {\n // If menu opened, RenderLayer is active and\n // it would call handleFocusOutside\n // In that way handleBlur would be called\n if (this.state.opened) {\n return;\n }\n this.handleBlur();\n };\n\n private handleInputClick = () => {\n if (!this.cancelationToken) {\n this.dispatch({ type: 'InputClick' });\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["CustomComboBox.tsx"],"names":["React","CancelationError","taskWithDelay","fixClickFocusIE","CommonWrapper","isFirefox","isIE11","ComboBoxRequestStatus","reducer","ComboBoxView","DELAY_BEFORE_SHOW_LOADER","LOADER_SHOW_TIME","DefaultState","inputChanged","editing","items","loading","opened","focused","textValue","repeatRequest","undefined","requestStatus","Unknown","CustomComboBox","state","input","menu","inputLikeText","requestId","loaderShowDelay","cancelationToken","cancelLoaderDelay","focus","props","disabled","selectInputText","selectAll","blur","handleBlur","dispatch","action","effects","nextState","setState","stateAndEffect","Array","forEach","handleEffect","effect","getState","getProps","handleValueChange","value","type","keepFocus","handleFocus","handleClickOutside","e","close","setTimeout","handleInputBlur","handleInputClick","search","query","getItems","cancelPromise","Promise","_","reject","expectingId","resolve","cancelLoader","race","code","cancelSearch","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","placeholder","size","totalCount","warning","width","maxLength","maxMenuHeight","leftIcon","rightIcon","inputMode","onValueChange","onClickOutside","onFocus","onFocusOutside","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","event","persist","onMouseEnter","onMouseOver","onMouseLeave","renderItem","renderNotFound","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","refInputLikeText","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Input, InputIconType } from '../../components/Input';\nimport { Menu } from '../Menu';\nimport { InputLikeText } from '../InputLikeText';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { CancelationError, taskWithDelay } from '../../lib/utils';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { isFirefox, isIE11 } from '../../lib/client';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n maxLength?: number;\n menuAlign?: 'left' | 'right';\n drawArrow?: boolean;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n searchOnFocus?: boolean;\n onValueChange?: (value: T) => void;\n onInputValueChange?: (value: string) => Nullable<string> | void;\n onUnexpectedInput?: (value: string) => void | null | T;\n onFocus?: () => void;\n onBlur?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n totalCount?: number;\n value?: Nullable<T>;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderItem: (item: T, state?: MenuItemState) => React.ReactNode;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToValue: (item: T) => string | number;\n getItems: (query: string) => Promise<T[]>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<T[]>;\n inputChanged: boolean;\n focused: boolean;\n repeatRequest: () => void;\n requestStatus: ComboBoxRequestStatus;\n}\n\nexport const DELAY_BEFORE_SHOW_LOADER = 300;\nexport const LOADER_SHOW_TIME = 1000;\n\nexport const DefaultState = {\n inputChanged: false,\n editing: false,\n items: null,\n loading: false,\n opened: false,\n focused: false,\n textValue: '',\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n};\n\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = () => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.input) {\n this.input.focus();\n } else if (this.inputLikeText) {\n this.inputLikeText.focus();\n }\n };\n\n /**\n * @public\n */\n public selectInputText = () => {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.selectAll();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n\n /**\n * @public\n */\n public async search(query: string = this.state.textValue) {\n const { getItems } = this.props;\n\n const cancelPromise: Promise<never> = new Promise((_, reject) => (this.cancelationToken = reject));\n const expectingId = (this.requestId += 1);\n\n if (!this.loaderShowDelay) {\n this.loaderShowDelay = new Promise<void>((resolve) => {\n const cancelLoader = taskWithDelay(() => {\n this.dispatch({ type: 'RequestItems' });\n setTimeout(resolve, LOADER_SHOW_TIME);\n }, DELAY_BEFORE_SHOW_LOADER);\n\n cancelPromise.catch(() => cancelLoader());\n\n this.cancelLoaderDelay = () => {\n cancelLoader();\n resolve();\n };\n });\n }\n\n try {\n const items = await Promise.race([getItems(query), cancelPromise]);\n if (this.state.loading) {\n await Promise.race([this.loaderShowDelay, cancelPromise]);\n }\n if (expectingId === this.requestId) {\n this.dispatch({\n type: 'ReceiveItems',\n items,\n });\n }\n } catch (error) {\n if (error && error.code === 'CancelationError') {\n this.dispatch({ type: 'CancelRequest' });\n } else if (expectingId === this.requestId) {\n this.dispatch({\n type: 'RequestFailure',\n repeatRequest: () => {\n this.search(query);\n if (this.input) {\n this.input.focus();\n }\n },\n });\n }\n } finally {\n if (expectingId === this.requestId) {\n if (!this.state.loading) {\n this.cancelLoaderDelay();\n }\n this.cancelationToken = null;\n this.loaderShowDelay = null;\n }\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.cancelationToken) {\n this.cancelationToken(new CancelationError());\n }\n }\n\n /**\n * @public\n */\n public open() {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close() {\n this.dispatch({ type: 'Close' });\n }\n\n public render() {\n const viewProps = {\n align: this.props.align,\n borderless: this.props.borderless,\n disabled: this.props.disabled,\n disablePortal: this.props.disablePortal,\n editing: this.state.editing,\n error: this.props.error,\n items: this.state.items,\n loading: this.state.loading,\n menuAlign: this.props.menuAlign,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n placeholder: this.props.placeholder,\n size: this.props.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n warning: this.props.warning,\n width: this.props.width,\n maxLength: this.props.maxLength,\n maxMenuHeight: this.props.maxMenuHeight,\n leftIcon: this.props.leftIcon,\n rightIcon: this.props.rightIcon,\n inputMode: this.props.inputMode,\n\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\n onFocusOutside: this.handleBlur,\n onInputBlur: this.handleInputBlur,\n onInputValueChange: (value: string) => this.dispatch({ type: 'TextChange', value }),\n onInputFocus: this.handleFocus,\n onInputClick: this.handleInputClick,\n onInputKeyDown: (event: React.KeyboardEvent) => {\n event.persist();\n this.dispatch({ type: 'KeyPress', event });\n },\n onMouseEnter: this.props.onMouseEnter,\n onMouseOver: this.props.onMouseOver,\n onMouseLeave: this.props.onMouseLeave,\n renderItem: this.props.renderItem,\n renderNotFound: this.props.renderNotFound,\n renderValue: this.props.renderValue,\n renderTotalCount: this.props.renderTotalCount,\n renderAddButton: this.props.renderAddButton,\n repeatRequest: this.state.repeatRequest,\n requestStatus: this.state.requestStatus,\n\n refInput: (input: Nullable<Input>) => {\n this.input = input;\n },\n refMenu: (menu: Nullable<Menu>) => {\n this.menu = menu;\n },\n refInputLikeText: (inputLikeText: Nullable<InputLikeText>) => {\n this.inputLikeText = inputLikeText;\n },\n };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} />\n </CommonWrapper>\n );\n }\n\n public componentDidMount() {\n this.dispatch({ type: 'Mount' });\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate(prevProps: CustomComboBoxProps<T>, prevState: CustomComboBoxState<T>) {\n if (prevState.editing && !this.state.editing) {\n this.handleBlur();\n }\n this.dispatch({ type: 'DidUpdate', prevProps, prevState });\n }\n\n /**\n * @public\n */\n public reset() {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this);\n };\n\n private getProps = () => this.props;\n\n private getState = () => this.state;\n\n private handleValueChange = (value: T) => {\n this.dispatch({\n type: 'ValueChange',\n value,\n keepFocus: true,\n });\n };\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n this.focused = true;\n this.dispatch({ type: 'Focus' });\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n if (this.state.opened) {\n this.close();\n }\n return;\n }\n this.focused = false;\n if (isFirefox || isIE11) {\n // workaround for the Firefox focusout bug\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1363964\n setTimeout(() => {\n this.dispatch({ type: 'Blur' });\n });\n } else {\n this.dispatch({ type: 'Blur' });\n }\n };\n\n private handleInputBlur = () => {\n // If menu opened, RenderLayer is active and\n // it would call handleFocusOutside\n // In that way handleBlur would be called\n if (this.state.opened) {\n return;\n }\n this.handleBlur();\n };\n\n private handleInputClick = () => {\n if (!this.cancelationToken) {\n this.dispatch({ type: 'InputClick' });\n }\n };\n}\n"]}
@@ -12,6 +12,9 @@ export interface CustomComboBoxProps<T> extends CommonProps {
12
12
  borderless?: boolean;
13
13
  disablePortal?: boolean;
14
14
  disabled?: boolean;
15
+ /**
16
+ * Cостояние валидации при ошибке.
17
+ */
15
18
  error?: boolean;
16
19
  maxLength?: number;
17
20
  menuAlign?: 'left' | 'right';
@@ -32,6 +35,9 @@ export interface CustomComboBoxProps<T> extends CommonProps {
32
35
  size?: 'small' | 'medium' | 'large';
33
36
  totalCount?: number;
34
37
  value?: Nullable<T>;
38
+ /**
39
+ * Cостояние валидации при предупреждении.
40
+ */
35
41
  warning?: boolean;
36
42
  width?: string | number;
37
43
  maxMenuHeight?: number | string;
@@ -417,7 +417,9 @@ export var Popup = /*#__PURE__*/function (_React$Component) {
417
417
  };
418
418
 
419
419
  _proto.getLocation = function getLocation(popupElement, location) {
420
- var positions = this.props.positions;
420
+ var _this$props4 = this.props,
421
+ positions = _this$props4.positions,
422
+ tryPreserveFirstRenderedPosition = _this$props4.tryPreserveFirstRenderedPosition;
421
423
  var anchorElement = this.anchorElement;
422
424
  warning(anchorElement && isHTMLElement(anchorElement), 'Anchor element is not defined or not instance of HTMLElement');
423
425
 
@@ -436,7 +438,12 @@ export var Popup = /*#__PURE__*/function (_React$Component) {
436
438
  var isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);
437
439
  var canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);
438
440
 
439
- if (isFullyVisible || canBecomeVisible) {
441
+ if ( // если нужно сохранить первоначальную позицию и Попап целиком
442
+ // находится в пределах вьюпорта (или может быть проскроллен в него)
443
+ tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible) || // если Попап целиком во вьюпорте и в самой приоритетной позиции
444
+ // (иначе нужно попытаться позицию сменить)
445
+ isFullyVisible && position === positions[0]) {
446
+ // сохраняем текущую позицию
440
447
  return {
441
448
  coordinates: coordinates,
442
449
  position: position
@@ -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","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 useWrapper: boolean;\n ignoreHover: boolean;\n width: React.CSSProperties['width'];\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 = this.props.positions;\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 if (isFullyVisible || canBecomeVisible) {\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","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"]}
@@ -29,9 +29,22 @@ export interface PopupProps extends CommonProps, PopupHandlerProps {
29
29
  pinSize?: number;
30
30
  popupOffset: number;
31
31
  positions: PopupPosition[];
32
+ /**
33
+ * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.
34
+ *
35
+ * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.
36
+ */
32
37
  useWrapper: boolean;
33
38
  ignoreHover: boolean;
34
39
  width: React.CSSProperties['width'];
40
+ /**
41
+ * При очередном рендере пытаться сохранить первоначальную позицию попапа
42
+ * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).
43
+ *
44
+ * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.
45
+ * @see https://github.com/skbkontur/retail-ui/pull/1195
46
+ */
47
+ tryPreserveFirstRenderedPosition?: boolean;
35
48
  }
36
49
  interface PopupLocation {
37
50
  coordinates: {
@@ -23,7 +23,8 @@ function isAbsoluteRectFullyVisible(coordinates, popupRect) {
23
23
  width: popupRect.width
24
24
  };
25
25
  return _rectContainsRect(windowAbsoluteRect, absoluteRect);
26
- }
26
+ } // Can become fully visible by scrolling into viewport
27
+
27
28
 
28
29
  function canBecomeFullyVisible(positionName, coordinates) {
29
30
  var position = getPositionObject(positionName);
@@ -1 +1 @@
1
- {"version":3,"sources":["PopupHelper.tsx"],"names":["getPositionObject","position","x","split","direction","align","getElementAbsoluteRect","element","rect","_getElementRelativeRect","convertRectToAbsolute","isAbsoluteRectFullyVisible","coordinates","popupRect","windowRelativeRect","_getWindowRelativeRect","windowAbsoluteRect","absoluteRect","top","left","height","width","_rectContainsRect","canBecomeFullyVisible","positionName","availableScrollDistances","getBoundingClientRect","right","bottom","_getViewProperty","clientWidth","window","innerWidth","clientHeight","innerHeight","offset","_getAbsoluteOffset","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","outerRect","innerRect","getProperty","views","document","documentElement","body","map","find","Boolean","PopupHelper","isFullyVisible"],"mappings":"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","sourcesContent":["import { PopupPosition } from './Popup';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: HTMLElement): Rect {\n const rect = _getElementRelativeRect(element);\n return convertRectToAbsolute(rect);\n}\n\nfunction isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect): boolean {\n const windowRelativeRect = _getWindowRelativeRect();\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect);\n const absoluteRect = {\n top: coordinates.top,\n left: coordinates.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\nfunction canBecomeFullyVisible(positionName: PopupPosition, coordinates: Offset) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: for bottom/right cases browser will always expand document size\n return true;\n}\n\nfunction _getElementRelativeRect(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth) || window.innerWidth,\n height: _getViewProperty((x) => x.clientHeight) || window.innerHeight,\n };\n}\n\nfunction convertRectToAbsolute(rect: Rect): Rect {\n const offset = _getAbsoluteOffset();\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(): Offset {\n const scrollTop = window.pageYOffset || _getViewProperty((x) => x.scrollTop);\n const scrollLeft = window.pageXOffset || _getViewProperty((x) => x.scrollLeft);\n\n const clientTop = _getViewProperty((x) => x.clientTop);\n const clientLeft = _getViewProperty((x) => x.clientLeft);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\nfunction _getViewProperty(getProperty: (e: HTMLElement) => number): number {\n const views = [document.documentElement, document.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n canBecomeFullyVisible,\n};\n"]}
1
+ {"version":3,"sources":["PopupHelper.tsx"],"names":["getPositionObject","position","x","split","direction","align","getElementAbsoluteRect","element","rect","_getElementRelativeRect","convertRectToAbsolute","isAbsoluteRectFullyVisible","coordinates","popupRect","windowRelativeRect","_getWindowRelativeRect","windowAbsoluteRect","absoluteRect","top","left","height","width","_rectContainsRect","canBecomeFullyVisible","positionName","availableScrollDistances","getBoundingClientRect","right","bottom","_getViewProperty","clientWidth","window","innerWidth","clientHeight","innerHeight","offset","_getAbsoluteOffset","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","outerRect","innerRect","getProperty","views","document","documentElement","body","map","find","Boolean","PopupHelper","isFullyVisible"],"mappings":"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","sourcesContent":["import { PopupPosition } from './Popup';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: HTMLElement): Rect {\n const rect = _getElementRelativeRect(element);\n return convertRectToAbsolute(rect);\n}\n\nfunction isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect): boolean {\n const windowRelativeRect = _getWindowRelativeRect();\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect);\n const absoluteRect = {\n top: coordinates.top,\n left: coordinates.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\n// Can become fully visible by scrolling into viewport\nfunction canBecomeFullyVisible(positionName: PopupPosition, coordinates: Offset) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: for bottom/right cases browser will always expand document size\n return true;\n}\n\nfunction _getElementRelativeRect(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth) || window.innerWidth,\n height: _getViewProperty((x) => x.clientHeight) || window.innerHeight,\n };\n}\n\nfunction convertRectToAbsolute(rect: Rect): Rect {\n const offset = _getAbsoluteOffset();\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(): Offset {\n const scrollTop = window.pageYOffset || _getViewProperty((x) => x.scrollTop);\n const scrollLeft = window.pageXOffset || _getViewProperty((x) => x.scrollLeft);\n\n const clientTop = _getViewProperty((x) => x.clientTop);\n const clientLeft = _getViewProperty((x) => x.clientLeft);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\nfunction _getViewProperty(getProperty: (e: HTMLElement) => number): number {\n const views = [document.documentElement, document.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n canBecomeFullyVisible,\n};\n"]}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "3.8.5",
3
+ "version": "3.9.0",
4
4
  "description": "UI Components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "index.js",
7
7
  "sideEffects": false,
8
- "homepage": "https://tech.skbkontur.ru/react-ui/3.8.5/",
8
+ "homepage": "https://tech.skbkontur.ru/react-ui/3.9.0/",
9
9
  "repository": {
10
10
  "type": "git",
11
11
  "url": "git@github.com:skbkontur/retail-ui.git"