@skbkontur/react-ui 4.18.0 → 4.19.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/components/Button/Button.styles.d.ts +1 -1
- package/cjs/components/Button/Button.styles.js +10 -3
- package/cjs/components/Button/Button.styles.js.map +1 -1
- package/cjs/components/Button/ButtonIcon.js +1 -4
- package/cjs/components/Button/ButtonIcon.js.map +1 -1
- package/cjs/components/GlobalLoader/GlobalLoader.d.ts +1 -2
- package/cjs/components/GlobalLoader/GlobalLoader.js +7 -11
- package/cjs/components/GlobalLoader/GlobalLoader.js.map +1 -1
- package/cjs/components/Input/InputLayout/InputLayout.styles.js +7 -2
- package/cjs/components/Input/InputLayout/InputLayout.styles.js.map +1 -1
- package/cjs/components/Input/InputLayout/InputLayoutAside.js +1 -7
- package/cjs/components/Input/InputLayout/InputLayoutAside.js.map +1 -1
- package/cjs/components/PasswordInput/PasswordInput.js +1 -0
- package/cjs/components/PasswordInput/PasswordInput.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollBar.d.ts +4 -7
- package/cjs/components/ScrollContainer/ScrollBar.js +7 -39
- package/cjs/components/ScrollContainer/ScrollBar.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.constants.js +1 -2
- package/cjs/components/ScrollContainer/ScrollContainer.constants.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.d.ts +19 -3
- package/cjs/components/ScrollContainer/ScrollContainer.js +92 -19
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.md +29 -2
- package/cjs/components/ScrollContainer/ScrollContainer.styles.d.ts +0 -4
- package/cjs/components/ScrollContainer/ScrollContainer.styles.js +8 -30
- package/cjs/components/ScrollContainer/ScrollContainer.styles.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +2 -0
- package/cjs/components/TokenInput/TokenInput.js +37 -5
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/index.d.ts +2 -1
- package/cjs/index.js +2 -1
- package/cjs/index.js.map +1 -1
- package/cjs/internal/icons2022/BaseIcon.js +3 -7
- package/cjs/internal/icons2022/BaseIcon.js.map +1 -1
- package/cjs/internal/icons2022/BaseIcon.styles.d.ts +3 -0
- package/cjs/internal/icons2022/BaseIcon.styles.js +14 -0
- package/cjs/internal/icons2022/BaseIcon.styles.js.map +1 -0
- package/cjs/internal/themes/Theme2022Dark.d.ts +1 -1
- package/cjs/internal/themes/Theme2022Dark.js +4 -2
- package/cjs/internal/themes/Theme2022Dark.js.map +1 -1
- package/cjs/lib/chars.d.ts +1 -1
- package/cjs/lib/chars.js +2 -2
- package/cjs/lib/chars.js.map +1 -1
- package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +50 -0
- package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +4 -0
- package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.js +5 -0
- package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.js.map +1 -0
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +6 -0
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +12 -0
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -0
- package/cjs/lib/featureFlagsContext/index.d.ts +2 -0
- package/cjs/lib/featureFlagsContext/index.js +3 -0
- package/cjs/lib/featureFlagsContext/index.js.map +1 -0
- package/components/Button/Button.styles/Button.styles.js +5 -2
- package/components/Button/Button.styles/Button.styles.js.map +1 -1
- package/components/Button/Button.styles.d.ts +1 -1
- package/components/Button/ButtonIcon/ButtonIcon.js +2 -4
- package/components/Button/ButtonIcon/ButtonIcon.js.map +1 -1
- package/components/GlobalLoader/GlobalLoader/GlobalLoader.js +20 -25
- package/components/GlobalLoader/GlobalLoader/GlobalLoader.js.map +1 -1
- package/components/GlobalLoader/GlobalLoader.d.ts +1 -2
- package/components/Input/InputLayout/InputLayout.styles/InputLayout.styles.js +2 -1
- package/components/Input/InputLayout/InputLayout.styles/InputLayout.styles.js.map +1 -1
- package/components/Input/InputLayout/InputLayoutAside/InputLayoutAside.js +1 -2
- package/components/Input/InputLayout/InputLayoutAside/InputLayoutAside.js.map +1 -1
- package/components/PasswordInput/PasswordInput/PasswordInput.js +1 -0
- package/components/PasswordInput/PasswordInput/PasswordInput.js.map +1 -1
- package/components/ScrollContainer/ScrollBar/ScrollBar.js +9 -44
- package/components/ScrollContainer/ScrollBar/ScrollBar.js.map +1 -1
- package/components/ScrollContainer/ScrollBar.d.ts +4 -7
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +96 -21
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.constants/ScrollContainer.constants.js +1 -2
- package/components/ScrollContainer/ScrollContainer.constants/ScrollContainer.constants.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +19 -3
- package/components/ScrollContainer/ScrollContainer.md +29 -2
- package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js +6 -18
- package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.styles.d.ts +0 -4
- package/components/TokenInput/TokenInput/TokenInput.js +40 -5
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +2 -0
- package/index.d.ts +2 -1
- package/index.js +2 -1
- package/index.js.map +1 -1
- package/internal/icons2022/BaseIcon/BaseIcon.js +3 -6
- package/internal/icons2022/BaseIcon/BaseIcon.js.map +1 -1
- package/internal/icons2022/BaseIcon.styles/BaseIcon.styles.js +11 -0
- package/internal/icons2022/BaseIcon.styles/BaseIcon.styles.js.map +1 -0
- package/internal/icons2022/BaseIcon.styles/package.json +6 -0
- package/internal/icons2022/BaseIcon.styles.d.ts +3 -0
- package/internal/themes/Theme2022Dark/Theme2022Dark.js +5 -1
- package/internal/themes/Theme2022Dark/Theme2022Dark.js.map +1 -1
- package/internal/themes/Theme2022Dark.d.ts +1 -1
- package/lib/chars/chars.js +1 -1
- package/lib/chars/chars.js.map +1 -1
- package/lib/chars.d.ts +1 -1
- package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +50 -0
- package/lib/featureFlagsContext/FeatureFlagsHelpers/FeatureFlagsHelpers.js +5 -0
- package/lib/featureFlagsContext/FeatureFlagsHelpers/FeatureFlagsHelpers.js.map +1 -0
- package/lib/featureFlagsContext/FeatureFlagsHelpers/package.json +6 -0
- package/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +4 -0
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js +6 -0
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -0
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/package.json +6 -0
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +6 -0
- package/lib/featureFlagsContext/index/index.js +2 -0
- package/lib/featureFlagsContext/index/index.js.map +1 -0
- package/lib/featureFlagsContext/index/package.json +6 -0
- package/lib/featureFlagsContext/index.d.ts +2 -0
- package/lib/featureFlagsContext/package.json +6 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["PasswordInput.tsx"],"names":["PasswordInputDataTids","root","capsLockDetector","eyeIcon","PasswordInput","PasswordInputLocaleHelper","rootNode","getProps","defaultProps","state","visible","capsLockEnabled","focus","input","blur","handleBlur","handleKeyPress","e","props","onKeyPress","detectCapsLock","getModifierState","Codes","CapsLock","setState","handleKeydown","onKeyDown","handleToggleVisibility","prevState","handleFocus","renderEye","styles","iconWrapper","toggleVisibility","theme","getEyeWrapperClassname","disabled","locale","eyeClosedAriaLabel","eyeOpenedAriaLabel","icon","size","refInput","element","hideSymbols","renderMain","rest","inputProps","rightIcon","componentDidMount","isIE11","globalObject","document","msCapsLockWarningOff","getDerivedStateFromProps","render","setRootNode","eyeWrapperLarge","eyeWrapperMedium","eyeWrapperSmall","React","PureComponent","__KONTUR_REACT_UI__","propTypes","PropTypes","bool"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { locale } from '../../lib/locale/decorators';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { isNonNullable } from '../../lib/utils';\nimport { isKeyCapsLock } from '../../lib/events/keyboard/identifiers';\nimport { KeyboardEventCodes as Codes } from '../../lib/events/keyboard/KeyboardEventCodes';\nimport { Input, InputProps } from '../Input';\nimport { Nullable } from '../../typings/utility-types';\nimport { isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\n\nimport { styles } from './PasswordInput.styles';\nimport { PasswordInputIcon } from './PasswordInputIcon';\nimport { PasswordInputLocale, PasswordInputLocaleHelper } from './locale';\n\nexport interface PasswordInputProps extends Pick<AriaAttributes, 'aria-label'>, CommonProps, InputProps {\n detectCapsLock?: boolean;\n}\n\nexport interface PasswordInputState {\n visible: boolean;\n capsLockEnabled?: boolean | null;\n}\n\nexport const PasswordInputDataTids = {\n root: 'PasswordInput',\n capsLockDetector: 'PasswordInputCapsLockDetector',\n eyeIcon: 'PasswordInputEyeIcon',\n} as const;\n\ntype DefaultProps = Required<Pick<PasswordInputProps, 'size'>>;\n\n/**\n * Компонент для ввода пароля\n */\n@rootNode\n@locale('PasswordInput', PasswordInputLocaleHelper)\nexport class PasswordInput extends React.PureComponent<PasswordInputProps, PasswordInputState> {\n public static __KONTUR_REACT_UI__ = 'PasswordInput';\n\n public static propTypes = {\n /**\n * Включает CapsLock детектор\n */\n detectCapsLock: PropTypes.bool,\n };\n\n public static defaultProps: DefaultProps = {\n size: 'small',\n };\n\n private getProps = createPropsGetter(PasswordInput.defaultProps);\n\n public state: PasswordInputState = {\n visible: false,\n capsLockEnabled: false,\n };\n\n private theme!: Theme;\n\n private input: Nullable<Input>;\n private setRootNode!: TSetRootNode;\n private readonly locale!: PasswordInputLocale;\n\n public componentDidMount() {\n if (this.props.detectCapsLock) {\n this.setState({ capsLockEnabled: null });\n }\n\n // @ts-expect-error: IE-specific API.\n if (isIE11 && isBrowser(globalObject) && !globalObject.document.msCapsLockWarningOff) {\n // @ts-expect-error: Read the comment above.\n // turns off default ie capslock warning\n globalObject.document.msCapsLockWarningOff = true;\n }\n }\n\n public static getDerivedStateFromProps(props: PasswordInputProps, state: PasswordInputState) {\n if (props.disabled) {\n return { visible: false };\n }\n\n return state;\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public focus = () => {\n if (this.input) {\n this.input.focus();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n this.handleBlur();\n };\n\n private handleKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const { onKeyPress, detectCapsLock } = this.props;\n\n if (onKeyPress) {\n onKeyPress(e);\n }\n\n if (!detectCapsLock) {\n return;\n }\n\n const capsLockEnabled = e.getModifierState(Codes.CapsLock);\n\n this.setState({ capsLockEnabled });\n };\n\n private handleKeydown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const {\n props: { detectCapsLock, onKeyDown },\n state: { capsLockEnabled },\n } = this;\n\n if (onKeyDown) {\n onKeyDown(e);\n }\n\n if (!detectCapsLock) {\n return;\n }\n\n if (isKeyCapsLock(e) && isNonNullable(capsLockEnabled)) {\n this.setState({ capsLockEnabled: !capsLockEnabled });\n }\n };\n\n private handleToggleVisibility = () => {\n this.setState((prevState) => ({ visible: !prevState.visible }), this.handleFocus);\n };\n\n private handleFocus = () => {\n if (this.input) {\n this.input.focus();\n }\n };\n\n private handleBlur = () => {\n if (this.input) {\n this.input.blur();\n }\n };\n\n private getEyeWrapperClassname() {\n switch (this.getProps().size) {\n case 'large':\n return styles.eyeWrapperLarge(this.theme);\n case 'medium':\n return styles.eyeWrapperMedium(this.theme);\n case 'small':\n default:\n return styles.eyeWrapperSmall(this.theme);\n }\n }\n\n private renderEye = () => {\n const { capsLockEnabled } = this.state;\n\n return (\n <span className={styles.iconWrapper()}>\n {capsLockEnabled && (\n <span className={styles.capsLockDetector()} data-tid={PasswordInputDataTids.capsLockDetector} />\n )}\n <span className={cx(styles.toggleVisibility(this.theme), this.getEyeWrapperClassname())}>\n {!this.props.disabled && (\n <button\n aria-label={this.state.visible ? this.locale.eyeClosedAriaLabel : this.locale.eyeOpenedAriaLabel}\n onClick={this.handleToggleVisibility}\n className={styles.icon()}\n data-tid={PasswordInputDataTids.eyeIcon}\n >\n <PasswordInputIcon\n size={this.props.size}\n visible={this.state.visible}\n isTheme2022={isTheme2022(this.theme)}\n />\n </button>\n )}\n </span>\n </span>\n );\n };\n\n private refInput = (element: Input) => {\n this.input = element;\n };\n\n private hideSymbols = () => {\n this.setState({ visible: false });\n };\n\n private renderMain = (props: CommonWrapperRestProps<PasswordInputProps>) => {\n const { detectCapsLock, ...rest } = props;\n const inputProps = {\n ...rest,\n onKeyDown: this.handleKeydown,\n onKeyPress: this.handleKeyPress,\n rightIcon: this.renderEye(),\n };\n\n return (\n <RenderLayer onFocusOutside={this.hideSymbols} onClickOutside={this.hideSymbols}>\n <div data-tid={PasswordInputDataTids.root} className={styles.root()}>\n <Input ref={this.refInput} type={this.state.visible ? 'text' : 'password'} {...inputProps} />\n </div>\n </RenderLayer>\n );\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["PasswordInput.tsx"],"names":["PasswordInputDataTids","root","capsLockDetector","eyeIcon","PasswordInput","PasswordInputLocaleHelper","rootNode","getProps","defaultProps","state","visible","capsLockEnabled","focus","input","blur","handleBlur","handleKeyPress","e","props","onKeyPress","detectCapsLock","getModifierState","Codes","CapsLock","setState","handleKeydown","onKeyDown","handleToggleVisibility","prevState","handleFocus","renderEye","styles","iconWrapper","toggleVisibility","theme","getEyeWrapperClassname","disabled","locale","eyeClosedAriaLabel","eyeOpenedAriaLabel","icon","size","refInput","element","hideSymbols","renderMain","rest","inputProps","rightIcon","componentDidMount","isIE11","globalObject","document","msCapsLockWarningOff","getDerivedStateFromProps","render","setRootNode","eyeWrapperLarge","eyeWrapperMedium","eyeWrapperSmall","React","PureComponent","__KONTUR_REACT_UI__","propTypes","PropTypes","bool"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { locale } from '../../lib/locale/decorators';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { isNonNullable } from '../../lib/utils';\nimport { isKeyCapsLock } from '../../lib/events/keyboard/identifiers';\nimport { KeyboardEventCodes as Codes } from '../../lib/events/keyboard/KeyboardEventCodes';\nimport { Input, InputProps } from '../Input';\nimport { Nullable } from '../../typings/utility-types';\nimport { isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\n\nimport { styles } from './PasswordInput.styles';\nimport { PasswordInputIcon } from './PasswordInputIcon';\nimport { PasswordInputLocale, PasswordInputLocaleHelper } from './locale';\n\nexport interface PasswordInputProps extends Pick<AriaAttributes, 'aria-label'>, CommonProps, InputProps {\n detectCapsLock?: boolean;\n}\n\nexport interface PasswordInputState {\n visible: boolean;\n capsLockEnabled?: boolean | null;\n}\n\nexport const PasswordInputDataTids = {\n root: 'PasswordInput',\n capsLockDetector: 'PasswordInputCapsLockDetector',\n eyeIcon: 'PasswordInputEyeIcon',\n} as const;\n\ntype DefaultProps = Required<Pick<PasswordInputProps, 'size'>>;\n\n/**\n * Компонент для ввода пароля\n */\n@rootNode\n@locale('PasswordInput', PasswordInputLocaleHelper)\nexport class PasswordInput extends React.PureComponent<PasswordInputProps, PasswordInputState> {\n public static __KONTUR_REACT_UI__ = 'PasswordInput';\n\n public static propTypes = {\n /**\n * Включает CapsLock детектор\n */\n detectCapsLock: PropTypes.bool,\n };\n\n public static defaultProps: DefaultProps = {\n size: 'small',\n };\n\n private getProps = createPropsGetter(PasswordInput.defaultProps);\n\n public state: PasswordInputState = {\n visible: false,\n capsLockEnabled: false,\n };\n\n private theme!: Theme;\n\n private input: Nullable<Input>;\n private setRootNode!: TSetRootNode;\n private readonly locale!: PasswordInputLocale;\n\n public componentDidMount() {\n if (this.props.detectCapsLock) {\n this.setState({ capsLockEnabled: null });\n }\n\n // @ts-expect-error: IE-specific API.\n if (isIE11 && isBrowser(globalObject) && !globalObject.document.msCapsLockWarningOff) {\n // @ts-expect-error: Read the comment above.\n // turns off default ie capslock warning\n globalObject.document.msCapsLockWarningOff = true;\n }\n }\n\n public static getDerivedStateFromProps(props: PasswordInputProps, state: PasswordInputState) {\n if (props.disabled) {\n return { visible: false };\n }\n\n return state;\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public focus = () => {\n if (this.input) {\n this.input.focus();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n this.handleBlur();\n };\n\n private handleKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const { onKeyPress, detectCapsLock } = this.props;\n\n if (onKeyPress) {\n onKeyPress(e);\n }\n\n if (!detectCapsLock) {\n return;\n }\n\n const capsLockEnabled = e.getModifierState(Codes.CapsLock);\n\n this.setState({ capsLockEnabled });\n };\n\n private handleKeydown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const {\n props: { detectCapsLock, onKeyDown },\n state: { capsLockEnabled },\n } = this;\n\n if (onKeyDown) {\n onKeyDown(e);\n }\n\n if (!detectCapsLock) {\n return;\n }\n\n if (isKeyCapsLock(e) && isNonNullable(capsLockEnabled)) {\n this.setState({ capsLockEnabled: !capsLockEnabled });\n }\n };\n\n private handleToggleVisibility = () => {\n this.setState((prevState) => ({ visible: !prevState.visible }), this.handleFocus);\n };\n\n private handleFocus = () => {\n if (this.input) {\n this.input.focus();\n }\n };\n\n private handleBlur = () => {\n if (this.input) {\n this.input.blur();\n }\n };\n\n private getEyeWrapperClassname() {\n switch (this.getProps().size) {\n case 'large':\n return styles.eyeWrapperLarge(this.theme);\n case 'medium':\n return styles.eyeWrapperMedium(this.theme);\n case 'small':\n default:\n return styles.eyeWrapperSmall(this.theme);\n }\n }\n\n private renderEye = () => {\n const { capsLockEnabled } = this.state;\n\n return (\n <span className={styles.iconWrapper()}>\n {capsLockEnabled && (\n <span className={styles.capsLockDetector()} data-tid={PasswordInputDataTids.capsLockDetector} />\n )}\n <span className={cx(styles.toggleVisibility(this.theme), this.getEyeWrapperClassname())}>\n {!this.props.disabled && (\n <button\n type=\"button\"\n aria-label={this.state.visible ? this.locale.eyeClosedAriaLabel : this.locale.eyeOpenedAriaLabel}\n onClick={this.handleToggleVisibility}\n className={styles.icon()}\n data-tid={PasswordInputDataTids.eyeIcon}\n >\n <PasswordInputIcon\n size={this.props.size}\n visible={this.state.visible}\n isTheme2022={isTheme2022(this.theme)}\n />\n </button>\n )}\n </span>\n </span>\n );\n };\n\n private refInput = (element: Input) => {\n this.input = element;\n };\n\n private hideSymbols = () => {\n this.setState({ visible: false });\n };\n\n private renderMain = (props: CommonWrapperRestProps<PasswordInputProps>) => {\n const { detectCapsLock, ...rest } = props;\n const inputProps = {\n ...rest,\n onKeyDown: this.handleKeydown,\n onKeyPress: this.handleKeyPress,\n rightIcon: this.renderEye(),\n };\n\n return (\n <RenderLayer onFocusOutside={this.hideSymbols} onClickOutside={this.hideSymbols}>\n <div data-tid={PasswordInputDataTids.root} className={styles.root()}>\n <Input ref={this.refInput} type={this.state.visible ? 'text' : 'password'} {...inputProps} />\n </div>\n </RenderLayer>\n );\n };\n}\n"]}
|
|
@@ -10,17 +10,15 @@ export interface ScrollBarState {
|
|
|
10
10
|
size: number;
|
|
11
11
|
pos: number;
|
|
12
12
|
scrollState: ScrollBarScrollState;
|
|
13
|
-
scrollingByMouseWheel: boolean;
|
|
14
13
|
}
|
|
15
14
|
export interface ScrollBarProps {
|
|
16
15
|
invert: boolean;
|
|
17
16
|
axis: ScrollAxis;
|
|
18
17
|
className?: string;
|
|
19
|
-
|
|
18
|
+
onScroll?: (axis: ScrollAxis, state: ScrollBarScrollState, prevState: ScrollBarScrollState) => void;
|
|
20
19
|
offset: ScrollContainerProps['offsetY'] | ScrollContainerProps['offsetX'];
|
|
21
|
-
hideScrollBar?: boolean;
|
|
22
|
-
hideScrollBarDelay?: number;
|
|
23
20
|
disableAnimations?: boolean;
|
|
21
|
+
isVisible: boolean;
|
|
24
22
|
}
|
|
25
23
|
export declare class ScrollBar extends React.Component<ScrollBarProps, ScrollBarState> {
|
|
26
24
|
private inner;
|
|
@@ -32,9 +30,10 @@ export declare class ScrollBar extends React.Component<ScrollBarProps, ScrollBar
|
|
|
32
30
|
componentDidUpdate(): void;
|
|
33
31
|
render(): JSX.Element;
|
|
34
32
|
private renderMain;
|
|
35
|
-
reflow: (
|
|
33
|
+
reflow: () => void;
|
|
36
34
|
setInnerElement: (inner: Nullable<HTMLElement>) => void;
|
|
37
35
|
setHover(hover: boolean): void;
|
|
36
|
+
getHover(): boolean;
|
|
38
37
|
get scrollBarState(): ScrollBarScrollState;
|
|
39
38
|
private get scrollBarStyles();
|
|
40
39
|
private get scrollBarContainerClassNames();
|
|
@@ -42,6 +41,4 @@ export declare class ScrollBar extends React.Component<ScrollBarProps, ScrollBar
|
|
|
42
41
|
private handleScrollMouseDown;
|
|
43
42
|
private handleScrollWheel;
|
|
44
43
|
private getImmediateScrollState;
|
|
45
|
-
private setScrollingByMouseWheel;
|
|
46
|
-
private readonly hideScrollBar;
|
|
47
44
|
}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.ScrollBar = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
|
|
2
|
-
var _reactTransitionGroup = require("react-transition-group");
|
|
3
|
-
var _lodash = _interopRequireDefault(require("lodash.debounce"));
|
|
4
2
|
var _globalObject = require("@skbkontur/global-object");
|
|
5
3
|
|
|
6
4
|
|
|
@@ -32,8 +30,6 @@ var _ScrollContainer3 = require("./ScrollContainer.helpers");var
|
|
|
32
30
|
|
|
33
31
|
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
33
|
|
|
38
34
|
|
|
39
35
|
|
|
@@ -78,7 +74,7 @@ ScrollBar = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.defaul
|
|
|
78
74
|
|
|
79
75
|
var classNames = (0, _Emotion.cx)(props.className, _ScrollContainer2.styles.scrollBar(_this.theme), _this.scrollBarStyles, (_cx = {}, _cx[
|
|
80
76
|
_ScrollContainer2.styles.scrollBarInvert(_this.theme)] = props.invert, _cx[
|
|
81
|
-
_ScrollContainer2.styles.visibleScrollBar()] =
|
|
77
|
+
_ScrollContainer2.styles.visibleScrollBar()] = props.isVisible, _cx));
|
|
82
78
|
|
|
83
79
|
|
|
84
80
|
var inlineStyles = (_inlineStyles = {}, _inlineStyles[
|
|
@@ -88,34 +84,18 @@ ScrollBar = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.defaul
|
|
|
88
84
|
|
|
89
85
|
return /*#__PURE__*/(
|
|
90
86
|
_react.default.createElement("div", { ref: _this.containerRef, className: _this.scrollBarContainerClassNames, style: props.offset }, /*#__PURE__*/
|
|
91
|
-
_react.default.createElement(_reactTransitionGroup.CSSTransition, {
|
|
92
|
-
appear: !props.disableAnimations,
|
|
93
|
-
exit: !props.disableAnimations,
|
|
94
|
-
in: _this.state.scrollingByMouseWheel,
|
|
95
|
-
classNames: {
|
|
96
|
-
enter: _ScrollContainer2.styles.transition(),
|
|
97
|
-
enterActive: _ScrollContainer2.styles.transitionActive(),
|
|
98
|
-
exit: _ScrollContainer2.styles.transitionLeave(),
|
|
99
|
-
exitActive: _ScrollContainer2.styles.transitionLeaveActive() },
|
|
100
|
-
|
|
101
|
-
timeout: {
|
|
102
|
-
enter: 100,
|
|
103
|
-
exit: 300 } }, /*#__PURE__*/
|
|
104
|
-
|
|
105
|
-
|
|
106
87
|
_react.default.createElement("div", {
|
|
107
88
|
ref: _this.refScroll,
|
|
108
89
|
style: inlineStyles,
|
|
109
90
|
className: classNames,
|
|
110
91
|
onMouseDown: _this.handleScrollMouseDown,
|
|
111
|
-
"data-tid": "ScrollContainer__ScrollBar-" + props.axis })))
|
|
112
|
-
|
|
92
|
+
"data-tid": "ScrollContainer__ScrollBar-" + props.axis })));
|
|
113
93
|
|
|
114
94
|
|
|
115
95
|
|
|
116
96
|
};_this.
|
|
117
97
|
|
|
118
|
-
reflow = function (
|
|
98
|
+
reflow = function () {
|
|
119
99
|
if (!_this.inner) {
|
|
120
100
|
return;
|
|
121
101
|
}
|
|
@@ -132,8 +112,8 @@ ScrollBar = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.defaul
|
|
|
132
112
|
if (state.active !== scrollActive || state.size !== scrollSize || state.pos !== scrollPos) {
|
|
133
113
|
var scrollState = _this.getImmediateScrollState();
|
|
134
114
|
|
|
135
|
-
if (
|
|
136
|
-
_this.props.
|
|
115
|
+
if (state.pos !== scrollPos) {
|
|
116
|
+
_this.props.onScroll == null ? void 0 : _this.props.onScroll(props.axis, scrollState, state.scrollState);
|
|
137
117
|
}
|
|
138
118
|
|
|
139
119
|
_this.setState((0, _extends2.default)({},
|
|
@@ -143,7 +123,6 @@ ScrollBar = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.defaul
|
|
|
143
123
|
pos: scrollPos,
|
|
144
124
|
scrollState: scrollState }));
|
|
145
125
|
|
|
146
|
-
event && event.type === 'scroll' && props.hideScrollBar && _this.setScrollingByMouseWheel();
|
|
147
126
|
}
|
|
148
127
|
};_this.
|
|
149
128
|
|
|
@@ -187,6 +166,7 @@ ScrollBar = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.defaul
|
|
|
187
166
|
|
|
188
167
|
|
|
189
168
|
|
|
169
|
+
|
|
190
170
|
|
|
191
171
|
|
|
192
172
|
refScroll = function (element) {
|
|
@@ -243,7 +223,6 @@ ScrollBar = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.defaul
|
|
|
243
223
|
target == null ? void 0 : target.removeEventListener('mousemove', mouseMove);
|
|
244
224
|
target == null ? void 0 : target.removeEventListener('mouseup', mouseUp);
|
|
245
225
|
_this.setState((0, _extends2.default)({}, _this.state, { scrollingByMouseDrag: false }));
|
|
246
|
-
_this.hideScrollBar();
|
|
247
226
|
};
|
|
248
227
|
|
|
249
228
|
target == null ? void 0 : target.addEventListener('mousemove', mouseMove);
|
|
@@ -290,15 +269,4 @@ ScrollBar = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.defaul
|
|
|
290
269
|
}
|
|
291
270
|
|
|
292
271
|
return 'middle';
|
|
293
|
-
};_this.
|
|
294
|
-
|
|
295
|
-
setScrollingByMouseWheel = function () {
|
|
296
|
-
if (!_this.state.scrollingByMouseWheel) {
|
|
297
|
-
_this.setState({ scrollingByMouseWheel: true });
|
|
298
|
-
}
|
|
299
|
-
_this.hideScrollBar();
|
|
300
|
-
};_this.
|
|
301
|
-
|
|
302
|
-
hideScrollBar = (0, _lodash.default)(function () {
|
|
303
|
-
!_this.state.scrollingByMouseDrag && !_this.state.hover && _this.setState({ scrollingByMouseWheel: false });
|
|
304
|
-
}, _this.props.hideScrollBarDelay);return _this;}var _proto = ScrollBar.prototype;_proto.componentDidMount = function componentDidMount() {this.reflow();};_proto.componentDidUpdate = function componentDidUpdate() {this.reflow();};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.setHover = function setHover(hover) {if (this.state.active && this.state.hover !== hover) {this.setState((0, _extends2.default)({}, this.state, { hover: hover }));if (!hover) {this.props.hideScrollBar && this.hideScrollBar();}}};(0, _createClass2.default)(ScrollBar, [{ key: "scrollBarState", get: function get() {return this.state.scrollState;} }, { key: "scrollBarStyles", get: function get() {var _cx3;var state = this.state;if (this.props.axis === 'x') {var _cx2;return (0, _Emotion.cx)(_ScrollContainer2.styles.scrollBarX(this.theme), _ScrollContainer2.globalClasses.scrollbarX, (_cx2 = {}, _cx2[_ScrollContainer2.styles.scrollBarXHover(this.theme)] = state.hover || state.scrollingByMouseDrag, _cx2));}return (0, _Emotion.cx)(_ScrollContainer2.styles.scrollBarY(this.theme), _ScrollContainer2.globalClasses.scrollbarY, (_cx3 = {}, _cx3[_ScrollContainer2.styles.scrollBarYHover(this.theme)] = state.hover || state.scrollingByMouseDrag, _cx3));} }, { key: "scrollBarContainerClassNames", get: function get() {var axis = this.props.axis;if (axis === 'x') {return (0, _Emotion.cx)(_ScrollContainer2.globalClasses.scrollbarContainerX, _ScrollContainer2.styles.scrollBarContainerX(this.theme));}return (0, _Emotion.cx)(_ScrollContainer2.globalClasses.scrollbarContainerY, _ScrollContainer2.styles.scrollBarContainerY());} }]);return ScrollBar;}(_react.default.Component);exports.ScrollBar = ScrollBar;
|
|
272
|
+
};return _this;}var _proto = ScrollBar.prototype;_proto.componentDidMount = function componentDidMount() {this.reflow();};_proto.componentDidUpdate = function componentDidUpdate() {this.reflow();};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.setHover = function setHover(hover) {if (this.state.active && this.state.hover !== hover) {this.setState((0, _extends2.default)({}, this.state, { hover: hover }));}};_proto.getHover = function getHover() {return this.state.hover;};(0, _createClass2.default)(ScrollBar, [{ key: "scrollBarState", get: function get() {return this.state.scrollState;} }, { key: "scrollBarStyles", get: function get() {var _cx3;var state = this.state;if (this.props.axis === 'x') {var _cx2;return (0, _Emotion.cx)(_ScrollContainer2.styles.scrollBarX(this.theme), _ScrollContainer2.globalClasses.scrollbarX, (_cx2 = {}, _cx2[_ScrollContainer2.styles.scrollBarXHover(this.theme)] = state.hover || state.scrollingByMouseDrag, _cx2));}return (0, _Emotion.cx)(_ScrollContainer2.styles.scrollBarY(this.theme), _ScrollContainer2.globalClasses.scrollbarY, (_cx3 = {}, _cx3[_ScrollContainer2.styles.scrollBarYHover(this.theme)] = state.hover || state.scrollingByMouseDrag, _cx3));} }, { key: "scrollBarContainerClassNames", get: function get() {var axis = this.props.axis;if (axis === 'x') {return (0, _Emotion.cx)(_ScrollContainer2.globalClasses.scrollbarContainerX, _ScrollContainer2.styles.scrollBarContainerX(this.theme));}return (0, _Emotion.cx)(_ScrollContainer2.globalClasses.scrollbarContainerY, _ScrollContainer2.styles.scrollBarContainerY());} }]);return ScrollBar;}(_react.default.Component);exports.ScrollBar = ScrollBar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScrollBar.tsx"],"names":["ScrollBar","containerRef","React","createRef","state","defaultScrollbarState","renderMain","props","active","scrollSizeParametersNames","axis","customScrollPos","customScrollSize","classNames","className","styles","scrollBar","theme","scrollBarStyles","scrollBarInvert","invert","visibleScrollBar","scrollingByMouseWheel","hideScrollBar","inlineStyles","pos","size","scrollBarContainerClassNames","offset","disableAnimations","enter","transition","enterActive","transitionActive","exit","transitionLeave","exitActive","transitionLeaveActive","refScroll","handleScrollMouseDown","reflow","event","inner","scrollSize","scrollPos","scrollActive","scrollState","getImmediateScrollState","onScrollStateChange","setState","type","setScrollingByMouseWheel","setInnerElement","element","handleScrollWheel","node","addEventListener","passive","removeEventListener","coord","initialCoord","target","globalObject","document","initialScrollPos","mouseMove","mouseMoveEvent","current","remainingScrollingContent","remainingScrollingSpace","ratio","delta","preventDefault","Object","prototype","hasOwnProperty","call","returnValue","mouseUp","scrollingByMouseDrag","WheelEvent","shiftKey","offsetHeight","deltaY","clientSize","maxScrollPos","Math","abs","hover","hideScrollBarDelay","componentDidMount","componentDidUpdate","render","setHover","scrollBarX","globalClasses","scrollbarX","scrollBarXHover","scrollBarY","scrollbarY","scrollBarYHover","scrollbarContainerX","scrollBarContainerX","scrollbarContainerY","scrollBarContainerY","Component"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport debounce from 'lodash.debounce';\nimport { globalObject, isInstanceOf } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { defaultScrollbarState, scrollSizeParametersNames } from './ScrollContainer.constants';\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { getScrollSizeParams } from './ScrollContainer.helpers';\nimport { ScrollContainerProps } from './ScrollContainer';\n\nexport type ScrollAxis = 'x' | 'y';\nexport type ScrollBarScrollState = 'begin' | 'middle' | 'end';\n\nexport interface ScrollBarState {\n active: boolean;\n hover: boolean;\n scrollingByMouseDrag: boolean;\n size: number; // in percentages\n pos: number; // in percentages\n scrollState: ScrollBarScrollState;\n scrollingByMouseWheel: boolean;\n}\n\nexport interface ScrollBarProps {\n invert: boolean;\n axis: ScrollAxis;\n className?: string;\n onScrollStateChange?: (state: ScrollBarScrollState, axis: ScrollAxis) => void;\n offset: ScrollContainerProps['offsetY'] | ScrollContainerProps['offsetX'];\n hideScrollBar?: boolean;\n hideScrollBarDelay?: number;\n disableAnimations?: boolean;\n}\n\nexport class ScrollBar extends React.Component<ScrollBarProps, ScrollBarState> {\n private inner: Nullable<HTMLElement>;\n private containerRef = React.createRef<HTMLDivElement>();\n private theme!: Theme;\n\n public node: Nullable<HTMLElement>;\n public state: ScrollBarState = {\n ...defaultScrollbarState,\n };\n\n public componentDidMount() {\n this.reflow();\n }\n\n public componentDidUpdate() {\n this.reflow();\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 state = this.state;\n const props = this.props;\n\n if (!state.active) {\n return null;\n }\n\n const { customScrollPos, customScrollSize } = scrollSizeParametersNames[this.props.axis];\n\n const classNames = cx(props.className, styles.scrollBar(this.theme), this.scrollBarStyles, {\n [styles.scrollBarInvert(this.theme)]: props.invert,\n [styles.visibleScrollBar()]: this.state.scrollingByMouseWheel || !this.props.hideScrollBar,\n });\n\n const inlineStyles: React.CSSProperties = {\n [customScrollPos]: `${state.pos}%`,\n [customScrollSize]: `${state.size}%`,\n };\n\n return (\n <div ref={this.containerRef} className={this.scrollBarContainerClassNames} style={props.offset}>\n <CSSTransition\n appear={!props.disableAnimations}\n exit={!props.disableAnimations}\n in={this.state.scrollingByMouseWheel}\n classNames={{\n enter: styles.transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n }}\n timeout={{\n enter: 100,\n exit: 300,\n }}\n >\n <div\n ref={this.refScroll}\n style={inlineStyles}\n className={classNames}\n onMouseDown={this.handleScrollMouseDown}\n data-tid={`ScrollContainer__ScrollBar-${props.axis}`}\n />\n </CSSTransition>\n </div>\n );\n };\n\n public reflow = (event?: React.UIEvent<HTMLDivElement>) => {\n if (!this.inner) {\n return;\n }\n\n const props = this.props;\n const state = this.state;\n\n const { scrollSize, scrollPos, scrollActive } = getScrollSizeParams(this.inner, props.axis);\n\n if (!scrollActive && !state.active) {\n return;\n }\n\n if (state.active !== scrollActive || state.size !== scrollSize || state.pos !== scrollPos) {\n const scrollState = this.getImmediateScrollState();\n\n if (scrollState !== state.scrollState) {\n this.props.onScrollStateChange?.(scrollState, props.axis);\n }\n\n this.setState({\n ...this.state,\n active: scrollActive,\n size: scrollSize,\n pos: scrollPos,\n scrollState,\n });\n event && event.type === 'scroll' && props.hideScrollBar && this.setScrollingByMouseWheel();\n }\n };\n\n public setInnerElement = (inner: Nullable<HTMLElement>) => {\n this.inner = inner;\n this.reflow();\n };\n\n public setHover(hover: boolean) {\n if (this.state.active && this.state.hover !== hover) {\n this.setState({ ...this.state, hover });\n if (!hover) {\n this.props.hideScrollBar && this.hideScrollBar();\n }\n }\n }\n\n public get scrollBarState() {\n return this.state.scrollState;\n }\n\n private get scrollBarStyles() {\n const state = this.state;\n\n if (this.props.axis === 'x') {\n return cx(styles.scrollBarX(this.theme), globalClasses.scrollbarX, {\n [styles.scrollBarXHover(this.theme)]: state.hover || state.scrollingByMouseDrag,\n });\n }\n\n return cx(styles.scrollBarY(this.theme), globalClasses.scrollbarY, {\n [styles.scrollBarYHover(this.theme)]: state.hover || state.scrollingByMouseDrag,\n });\n }\n\n private get scrollBarContainerClassNames() {\n const { axis } = this.props;\n\n if (axis === 'x') {\n return cx(globalClasses.scrollbarContainerX, styles.scrollBarContainerX(this.theme));\n }\n\n return cx(globalClasses.scrollbarContainerY, styles.scrollBarContainerY());\n }\n\n private refScroll = (element: HTMLElement | null) => {\n const handleScrollWheel = (event: Event) => this.handleScrollWheel(event, this.props.axis);\n\n if (!this.node && element) {\n element.addEventListener('wheel', handleScrollWheel, { passive: false });\n }\n if (this.node && !element) {\n this.node.removeEventListener('wheel', handleScrollWheel);\n }\n this.node = element;\n };\n\n private handleScrollMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.inner) {\n return;\n }\n\n const { offset, size, pos, coord } = scrollSizeParametersNames[this.props.axis];\n\n const initialCoord = event[coord];\n const target = globalObject.document;\n const initialScrollPos = this.inner[pos];\n const state = this.state;\n\n const mouseMove = (mouseMoveEvent: MouseEvent) => {\n if (!this.inner || !this.containerRef.current) {\n return;\n }\n\n const remainingScrollingContent = this.inner[size] - this.inner[offset];\n const remainingScrollingSpace = (this.containerRef.current[offset] / 100) * (100 - state.size);\n\n const ratio = remainingScrollingContent / remainingScrollingSpace;\n const delta = (mouseMoveEvent[coord] - initialCoord) * ratio;\n\n this.inner[pos] = initialScrollPos + delta;\n\n if (mouseMoveEvent.preventDefault) {\n mouseMoveEvent.preventDefault();\n }\n\n if (Object.prototype.hasOwnProperty.call(mouseMoveEvent, 'returnValue')) {\n (\n mouseMoveEvent as MouseEvent & {\n returnValue: boolean;\n }\n ).returnValue = false;\n }\n };\n\n const mouseUp = () => {\n target?.removeEventListener('mousemove', mouseMove);\n target?.removeEventListener('mouseup', mouseUp);\n this.setState({ ...this.state, scrollingByMouseDrag: false });\n this.hideScrollBar();\n };\n\n target?.addEventListener('mousemove', mouseMove);\n target?.addEventListener('mouseup', mouseUp);\n this.setState({ ...this.state, scrollingByMouseDrag: true });\n\n event.preventDefault();\n };\n\n private handleScrollWheel = (event: Event, axis: ScrollAxis) => {\n if (!this.inner || !isInstanceOf(event, globalObject.WheelEvent) || (axis === 'x' && !event.shiftKey)) {\n return;\n }\n\n const { offset, size, pos } = scrollSizeParametersNames[axis];\n\n const scrollSize = this.inner[size];\n const scrollPos = this.inner[pos];\n const offsetHeight = this.inner[offset];\n\n if (event.deltaY > 0 && scrollSize <= scrollPos + offsetHeight) {\n return;\n }\n if (event.deltaY < 0 && scrollPos <= 0) {\n return;\n }\n\n this.inner[pos] += event.deltaY;\n\n event.preventDefault();\n };\n\n private getImmediateScrollState = (): ScrollBarScrollState => {\n const { pos, size, clientSize } = scrollSizeParametersNames[this.props.axis];\n\n if (!this.inner || this.inner[pos] === 0) {\n return 'begin';\n }\n // Zoom in Chrome causes problems\n // https://github.com/skbkontur/retail-ui/pull/2705#issue-806286945\n const maxScrollPos = this.inner[size] - this.inner[clientSize];\n if (Math.abs(maxScrollPos - this.inner[pos]) <= 1) {\n return 'end';\n }\n\n return 'middle';\n };\n\n private setScrollingByMouseWheel = () => {\n if (!this.state.scrollingByMouseWheel) {\n this.setState({ scrollingByMouseWheel: true });\n }\n this.hideScrollBar();\n };\n\n private readonly hideScrollBar = debounce(() => {\n !this.state.scrollingByMouseDrag && !this.state.hover && this.setState({ scrollingByMouseWheel: false });\n }, this.props.hideScrollBarDelay);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["ScrollBar.tsx"],"names":["ScrollBar","containerRef","React","createRef","state","defaultScrollbarState","renderMain","props","active","scrollSizeParametersNames","axis","customScrollPos","customScrollSize","classNames","className","styles","scrollBar","theme","scrollBarStyles","scrollBarInvert","invert","visibleScrollBar","isVisible","inlineStyles","pos","size","scrollBarContainerClassNames","offset","refScroll","handleScrollMouseDown","reflow","inner","scrollSize","scrollPos","scrollActive","scrollState","getImmediateScrollState","onScroll","setState","setInnerElement","element","handleScrollWheel","event","node","addEventListener","passive","removeEventListener","coord","initialCoord","target","globalObject","document","initialScrollPos","mouseMove","mouseMoveEvent","current","remainingScrollingContent","remainingScrollingSpace","ratio","delta","preventDefault","Object","prototype","hasOwnProperty","call","returnValue","mouseUp","scrollingByMouseDrag","WheelEvent","shiftKey","offsetHeight","deltaY","clientSize","maxScrollPos","Math","abs","componentDidMount","componentDidUpdate","render","setHover","hover","getHover","scrollBarX","globalClasses","scrollbarX","scrollBarXHover","scrollBarY","scrollbarY","scrollBarYHover","scrollbarContainerX","scrollBarContainerX","scrollbarContainerY","scrollBarContainerY","Component"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject, isInstanceOf } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { defaultScrollbarState, scrollSizeParametersNames } from './ScrollContainer.constants';\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { getScrollSizeParams } from './ScrollContainer.helpers';\nimport { ScrollContainerProps } from './ScrollContainer';\n\nexport type ScrollAxis = 'x' | 'y';\nexport type ScrollBarScrollState = 'begin' | 'middle' | 'end';\n\nexport interface ScrollBarState {\n active: boolean;\n hover: boolean;\n scrollingByMouseDrag: boolean;\n size: number; // in percentages\n pos: number; // in percentages\n scrollState: ScrollBarScrollState;\n}\n\nexport interface ScrollBarProps {\n invert: boolean;\n axis: ScrollAxis;\n className?: string;\n onScroll?: (axis: ScrollAxis, state: ScrollBarScrollState, prevState: ScrollBarScrollState) => void;\n offset: ScrollContainerProps['offsetY'] | ScrollContainerProps['offsetX'];\n disableAnimations?: boolean;\n isVisible: boolean;\n}\n\nexport class ScrollBar extends React.Component<ScrollBarProps, ScrollBarState> {\n private inner: Nullable<HTMLElement>;\n private containerRef = React.createRef<HTMLDivElement>();\n private theme!: Theme;\n\n public node: Nullable<HTMLElement>;\n public state: ScrollBarState = {\n ...defaultScrollbarState,\n };\n\n public componentDidMount() {\n this.reflow();\n }\n\n public componentDidUpdate() {\n this.reflow();\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 state = this.state;\n const props = this.props;\n\n if (!state.active) {\n return null;\n }\n\n const { customScrollPos, customScrollSize } = scrollSizeParametersNames[this.props.axis];\n\n const classNames = cx(props.className, styles.scrollBar(this.theme), this.scrollBarStyles, {\n [styles.scrollBarInvert(this.theme)]: props.invert,\n [styles.visibleScrollBar()]: props.isVisible,\n });\n\n const inlineStyles: React.CSSProperties = {\n [customScrollPos]: `${state.pos}%`,\n [customScrollSize]: `${state.size}%`,\n };\n\n return (\n <div ref={this.containerRef} className={this.scrollBarContainerClassNames} style={props.offset}>\n <div\n ref={this.refScroll}\n style={inlineStyles}\n className={classNames}\n onMouseDown={this.handleScrollMouseDown}\n data-tid={`ScrollContainer__ScrollBar-${props.axis}`}\n />\n </div>\n );\n };\n\n public reflow = () => {\n if (!this.inner) {\n return;\n }\n\n const props = this.props;\n const state = this.state;\n\n const { scrollSize, scrollPos, scrollActive } = getScrollSizeParams(this.inner, props.axis);\n\n if (!scrollActive && !state.active) {\n return;\n }\n\n if (state.active !== scrollActive || state.size !== scrollSize || state.pos !== scrollPos) {\n const scrollState = this.getImmediateScrollState();\n\n if (state.pos !== scrollPos) {\n this.props.onScroll?.(props.axis, scrollState, state.scrollState);\n }\n\n this.setState({\n ...this.state,\n active: scrollActive,\n size: scrollSize,\n pos: scrollPos,\n scrollState,\n });\n }\n };\n\n public setInnerElement = (inner: Nullable<HTMLElement>) => {\n this.inner = inner;\n this.reflow();\n };\n\n public setHover(hover: boolean) {\n if (this.state.active && this.state.hover !== hover) {\n this.setState({ ...this.state, hover });\n }\n }\n\n public getHover() {\n return this.state.hover;\n }\n\n public get scrollBarState() {\n return this.state.scrollState;\n }\n\n private get scrollBarStyles() {\n const state = this.state;\n\n if (this.props.axis === 'x') {\n return cx(styles.scrollBarX(this.theme), globalClasses.scrollbarX, {\n [styles.scrollBarXHover(this.theme)]: state.hover || state.scrollingByMouseDrag,\n });\n }\n\n return cx(styles.scrollBarY(this.theme), globalClasses.scrollbarY, {\n [styles.scrollBarYHover(this.theme)]: state.hover || state.scrollingByMouseDrag,\n });\n }\n\n private get scrollBarContainerClassNames() {\n const { axis } = this.props;\n\n if (axis === 'x') {\n return cx(globalClasses.scrollbarContainerX, styles.scrollBarContainerX(this.theme));\n }\n\n return cx(globalClasses.scrollbarContainerY, styles.scrollBarContainerY());\n }\n\n private refScroll = (element: HTMLElement | null) => {\n const handleScrollWheel = (event: Event) => this.handleScrollWheel(event, this.props.axis);\n\n if (!this.node && element) {\n element.addEventListener('wheel', handleScrollWheel, { passive: false });\n }\n if (this.node && !element) {\n this.node.removeEventListener('wheel', handleScrollWheel);\n }\n this.node = element;\n };\n\n private handleScrollMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.inner) {\n return;\n }\n\n const { offset, size, pos, coord } = scrollSizeParametersNames[this.props.axis];\n\n const initialCoord = event[coord];\n const target = globalObject.document;\n const initialScrollPos = this.inner[pos];\n const state = this.state;\n\n const mouseMove = (mouseMoveEvent: MouseEvent) => {\n if (!this.inner || !this.containerRef.current) {\n return;\n }\n\n const remainingScrollingContent = this.inner[size] - this.inner[offset];\n const remainingScrollingSpace = (this.containerRef.current[offset] / 100) * (100 - state.size);\n\n const ratio = remainingScrollingContent / remainingScrollingSpace;\n const delta = (mouseMoveEvent[coord] - initialCoord) * ratio;\n\n this.inner[pos] = initialScrollPos + delta;\n\n if (mouseMoveEvent.preventDefault) {\n mouseMoveEvent.preventDefault();\n }\n\n if (Object.prototype.hasOwnProperty.call(mouseMoveEvent, 'returnValue')) {\n (\n mouseMoveEvent as MouseEvent & {\n returnValue: boolean;\n }\n ).returnValue = false;\n }\n };\n\n const mouseUp = () => {\n target?.removeEventListener('mousemove', mouseMove);\n target?.removeEventListener('mouseup', mouseUp);\n this.setState({ ...this.state, scrollingByMouseDrag: false });\n };\n\n target?.addEventListener('mousemove', mouseMove);\n target?.addEventListener('mouseup', mouseUp);\n this.setState({ ...this.state, scrollingByMouseDrag: true });\n\n event.preventDefault();\n };\n\n private handleScrollWheel = (event: Event, axis: ScrollAxis) => {\n if (!this.inner || !isInstanceOf(event, globalObject.WheelEvent) || (axis === 'x' && !event.shiftKey)) {\n return;\n }\n\n const { offset, size, pos } = scrollSizeParametersNames[axis];\n\n const scrollSize = this.inner[size];\n const scrollPos = this.inner[pos];\n const offsetHeight = this.inner[offset];\n\n if (event.deltaY > 0 && scrollSize <= scrollPos + offsetHeight) {\n return;\n }\n if (event.deltaY < 0 && scrollPos <= 0) {\n return;\n }\n\n this.inner[pos] += event.deltaY;\n\n event.preventDefault();\n };\n\n private getImmediateScrollState = (): ScrollBarScrollState => {\n const { pos, size, clientSize } = scrollSizeParametersNames[this.props.axis];\n\n if (!this.inner || this.inner[pos] === 0) {\n return 'begin';\n }\n // Zoom in Chrome causes problems\n // https://github.com/skbkontur/retail-ui/pull/2705#issue-806286945\n const maxScrollPos = this.inner[size] - this.inner[clientSize];\n if (Math.abs(maxScrollPos - this.inner[pos]) <= 1) {\n return 'end';\n }\n\n return 'middle';\n };\n}\n"]}
|
|
@@ -10,8 +10,7 @@ var defaultScrollbarState = {
|
|
|
10
10
|
active: false,
|
|
11
11
|
// True when scroll is following mouse (mouse down on scroll).
|
|
12
12
|
scrollingByMouseDrag: false,
|
|
13
|
-
scrollState: 'begin'
|
|
14
|
-
scrollingByMouseWheel: false };exports.defaultScrollbarState = defaultScrollbarState;
|
|
13
|
+
scrollState: 'begin' };exports.defaultScrollbarState = defaultScrollbarState;
|
|
15
14
|
|
|
16
15
|
|
|
17
16
|
var scrollSizeParametersNames = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScrollContainer.constants.ts"],"names":["MIN_SCROLL_SIZE","defaultScrollbarState","size","pos","hover","active","scrollingByMouseDrag","scrollState","
|
|
1
|
+
{"version":3,"sources":["ScrollContainer.constants.ts"],"names":["MIN_SCROLL_SIZE","defaultScrollbarState","size","pos","hover","active","scrollingByMouseDrag","scrollState","scrollSizeParametersNames","x","offset","coord","clientSize","customScrollPos","customScrollSize","y"],"mappings":";;AAEO,IAAMA,eAAe,GAAG,EAAxB,C;;AAEA,IAAMC,qBAAqC,GAAG;AACnDC,EAAAA,IAAI,EAAE,CAD6C;AAEnDC,EAAAA,GAAG,EAAE,CAF8C;AAGnD;AACAC,EAAAA,KAAK,EAAE,KAJ4C;AAKnDC,EAAAA,MAAM,EAAE,KAL2C;AAMnD;AACAC,EAAAA,oBAAoB,EAAE,KAP6B;AAQnDC,EAAAA,WAAW,EAAE,OARsC,EAA9C,C;;;AAWA,IAAMC,yBAAyB,GAAG;AACvCC,EAAAA,CAAC,EAAE;AACDC,IAAAA,MAAM,EAAE,aADP;AAEDR,IAAAA,IAAI,EAAE,aAFL;AAGDC,IAAAA,GAAG,EAAE,YAHJ;AAIDQ,IAAAA,KAAK,EAAE,SAJN;AAKDC,IAAAA,UAAU,EAAE,aALX;AAMDC,IAAAA,eAAe,EAAE,MANhB;AAODC,IAAAA,gBAAgB,EAAE,OAPjB,EADoC;;AAUvCC,EAAAA,CAAC,EAAE;AACDL,IAAAA,MAAM,EAAE,cADP;AAEDR,IAAAA,IAAI,EAAE,cAFL;AAGDC,IAAAA,GAAG,EAAE,WAHJ;AAIDQ,IAAAA,KAAK,EAAE,SAJN;AAKDC,IAAAA,UAAU,EAAE,cALX;AAMDC,IAAAA,eAAe,EAAE,KANhB;AAODC,IAAAA,gBAAgB,EAAE,QAPjB,EAVoC,EAAlC,C","sourcesContent":["import { ScrollBarState } from './ScrollBar';\n\nexport const MIN_SCROLL_SIZE = 20;\n\nexport const defaultScrollbarState: ScrollBarState = {\n size: 0,\n pos: 0,\n // Mouse is moving where big scrollbar can be located.\n hover: false,\n active: false,\n // True when scroll is following mouse (mouse down on scroll).\n scrollingByMouseDrag: false,\n scrollState: 'begin',\n};\n\nexport const scrollSizeParametersNames = {\n x: {\n offset: 'offsetWidth',\n size: 'scrollWidth',\n pos: 'scrollLeft',\n coord: 'clientX',\n clientSize: 'clientWidth',\n customScrollPos: 'left',\n customScrollSize: 'width',\n },\n y: {\n offset: 'offsetHeight',\n size: 'scrollHeight',\n pos: 'scrollTop',\n coord: 'clientY',\n clientSize: 'clientHeight',\n customScrollPos: 'top',\n customScrollSize: 'height',\n },\n} as const;\n"]}
|
|
@@ -44,10 +44,15 @@ export interface ScrollContainerProps extends CommonProps {
|
|
|
44
44
|
offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;
|
|
45
45
|
/**
|
|
46
46
|
* Скрывать скроллбар при отсутствии активности пользователя
|
|
47
|
+
* @deprecated use showScrollBar
|
|
47
48
|
*/
|
|
48
49
|
hideScrollBar?: boolean;
|
|
49
50
|
/**
|
|
50
|
-
*
|
|
51
|
+
* Показывать скроллбар
|
|
52
|
+
*/
|
|
53
|
+
showScrollBar?: 'always' | 'scroll' | 'hover';
|
|
54
|
+
/**
|
|
55
|
+
* Задержка перед скрытием скроллбара, ms. Работает только если `hideScrollBar = true` или `showScrollBar = 'scroll' | 'hover'`
|
|
51
56
|
*/
|
|
52
57
|
hideScrollBarDelay?: number;
|
|
53
58
|
/**
|
|
@@ -59,8 +64,13 @@ export declare const ScrollContainerDataTids: {
|
|
|
59
64
|
readonly root: "ScrollContainer__root";
|
|
60
65
|
readonly inner: "ScrollContainer__inner";
|
|
61
66
|
};
|
|
62
|
-
declare type DefaultProps = Required<Pick<ScrollContainerProps, 'invert' | 'scrollBehaviour' | 'preventWindowScroll' | 'hideScrollBar' | 'disableAnimations' | 'hideScrollBarDelay'>>;
|
|
63
|
-
|
|
67
|
+
declare type DefaultProps = Required<Pick<ScrollContainerProps, 'invert' | 'scrollBehaviour' | 'preventWindowScroll' | 'hideScrollBar' | 'disableAnimations' | 'hideScrollBarDelay' | 'showScrollBar'>>;
|
|
68
|
+
interface ScrollContainerState {
|
|
69
|
+
isScrollBarXVisible: boolean;
|
|
70
|
+
isScrollBarYVisible: boolean;
|
|
71
|
+
isHovered: boolean;
|
|
72
|
+
}
|
|
73
|
+
export declare class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {
|
|
64
74
|
static __KONTUR_REACT_UI__: string;
|
|
65
75
|
inner: Nullable<HTMLElement>;
|
|
66
76
|
static propTypes: {
|
|
@@ -76,6 +86,8 @@ export declare class ScrollContainer extends React.Component<ScrollContainerProp
|
|
|
76
86
|
private scrollX;
|
|
77
87
|
private scrollY;
|
|
78
88
|
private setRootNode;
|
|
89
|
+
private initialIsScrollBarVisible;
|
|
90
|
+
state: ScrollContainerState;
|
|
79
91
|
componentDidMount(): void;
|
|
80
92
|
componentDidUpdate(prevProps: ScrollContainerProps): void;
|
|
81
93
|
render: () => React.ReactNode;
|
|
@@ -103,11 +115,15 @@ export declare class ScrollContainer extends React.Component<ScrollContainerProp
|
|
|
103
115
|
hasScrollBar(axis: ScrollAxis): boolean;
|
|
104
116
|
private renderScrollbar;
|
|
105
117
|
private handleScrollStateChange;
|
|
118
|
+
private handleScroll;
|
|
106
119
|
private refScrollBarY;
|
|
107
120
|
private refScrollBarX;
|
|
108
121
|
private refInner;
|
|
109
122
|
private handleNativeScroll;
|
|
123
|
+
private showScrollBarOnMouseWheel;
|
|
124
|
+
private readonly hideScrollBar;
|
|
110
125
|
private handleInnerScrollWheel;
|
|
126
|
+
private handleMouseEnter;
|
|
111
127
|
private handleMouseMove;
|
|
112
128
|
private handleMouseLeave;
|
|
113
129
|
private updateInnerElement;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.ScrollContainerDataTids = exports.ScrollContainer = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
|
|
2
2
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
3
3
|
var _globalObject = require("@skbkontur/global-object");
|
|
4
|
+
var _lodash = _interopRequireDefault(require("lodash.debounce"));
|
|
4
5
|
|
|
5
6
|
var LayoutEvents = _interopRequireWildcard(require("../../lib/LayoutEvents"));
|
|
6
7
|
var _CommonWrapper = require("../../internal/CommonWrapper");
|
|
@@ -70,6 +71,11 @@ var _ScrollBar = require("./ScrollBar");var _class, _class2, _temp;function _get
|
|
|
70
71
|
|
|
71
72
|
|
|
72
73
|
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
73
79
|
|
|
74
80
|
|
|
75
81
|
|
|
@@ -87,6 +93,18 @@ var ScrollContainerDataTids = {
|
|
|
87
93
|
|
|
88
94
|
|
|
89
95
|
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
90
108
|
|
|
91
109
|
|
|
92
110
|
ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(ScrollContainer, _React$Component);function ScrollContainer() {var _this;for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;_this.
|
|
@@ -110,6 +128,7 @@ ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE_
|
|
|
110
128
|
|
|
111
129
|
|
|
112
130
|
|
|
131
|
+
|
|
113
132
|
|
|
114
133
|
|
|
115
134
|
getProps = (0, _createPropsGetter.createPropsGetter)(ScrollContainer.defaultProps);_this.
|
|
@@ -117,6 +136,13 @@ ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE_
|
|
|
117
136
|
|
|
118
137
|
|
|
119
138
|
|
|
139
|
+
initialIsScrollBarVisible = !_this.getProps().hideScrollBar && _this.getProps().showScrollBar === 'always';_this.
|
|
140
|
+
|
|
141
|
+
state = {
|
|
142
|
+
isScrollBarXVisible: _this.initialIsScrollBarVisible,
|
|
143
|
+
isScrollBarYVisible: _this.initialIsScrollBarVisible,
|
|
144
|
+
isHovered: false };_this.
|
|
145
|
+
|
|
120
146
|
|
|
121
147
|
|
|
122
148
|
|
|
@@ -159,6 +185,7 @@ ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE_
|
|
|
159
185
|
_react.default.createElement("div", {
|
|
160
186
|
"data-tid": ScrollContainerDataTids.root,
|
|
161
187
|
className: _ScrollContainer.styles.root(),
|
|
188
|
+
onMouseEnter: _this.handleMouseEnter,
|
|
162
189
|
onMouseMove: _this.handleMouseMove,
|
|
163
190
|
onMouseLeave: _this.handleMouseLeave },
|
|
164
191
|
|
|
@@ -243,21 +270,21 @@ ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE_
|
|
|
243
270
|
|
|
244
271
|
|
|
245
272
|
renderScrollbar = function (axis) {
|
|
246
|
-
var
|
|
247
|
-
var
|
|
248
|
-
|
|
249
|
-
var offset =
|
|
273
|
+
var _this$getProps = _this.getProps(),offsetY = _this$getProps.offsetY,offsetX = _this$getProps.offsetX,invert = _this$getProps.invert,disableAnimations = _this$getProps.disableAnimations;
|
|
274
|
+
var isAxisX = axis === 'x';
|
|
275
|
+
var refScrollBar = isAxisX ? _this.refScrollBarX : _this.refScrollBarY;
|
|
276
|
+
var offset = isAxisX ? offsetX : offsetY;
|
|
277
|
+
var isVisible = isAxisX ? _this.state.isScrollBarXVisible : _this.state.isScrollBarYVisible;
|
|
250
278
|
|
|
251
279
|
return /*#__PURE__*/(
|
|
252
280
|
_react.default.createElement(_ScrollBar.ScrollBar, {
|
|
253
281
|
axis: axis,
|
|
254
282
|
ref: refScrollBar,
|
|
255
283
|
invert: invert,
|
|
256
|
-
|
|
284
|
+
onScroll: _this.handleScroll,
|
|
257
285
|
offset: offset,
|
|
258
|
-
hideScrollBar: hideScrollBar,
|
|
259
286
|
disableAnimations: disableAnimations,
|
|
260
|
-
|
|
287
|
+
isVisible: isVisible }));
|
|
261
288
|
|
|
262
289
|
|
|
263
290
|
};_this.
|
|
@@ -280,6 +307,18 @@ ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE_
|
|
|
280
307
|
_this.props.onScrollStateChangeY == null ? void 0 : _this.props.onScrollStateChangeY(scrollYState);
|
|
281
308
|
};_this.
|
|
282
309
|
|
|
310
|
+
handleScroll = function (
|
|
311
|
+
axis,
|
|
312
|
+
scrollState,
|
|
313
|
+
prevScrollState)
|
|
314
|
+
{
|
|
315
|
+
if (scrollState !== prevScrollState) {
|
|
316
|
+
_this.handleScrollStateChange(scrollState, axis);
|
|
317
|
+
}
|
|
318
|
+
var _this$getProps2 = _this.getProps(),hideScrollBar = _this$getProps2.hideScrollBar,showScrollBar = _this$getProps2.showScrollBar;
|
|
319
|
+
(hideScrollBar || showScrollBar === 'scroll') && _this.showScrollBarOnMouseWheel(axis);
|
|
320
|
+
};_this.
|
|
321
|
+
|
|
283
322
|
refScrollBarY = function (scrollbar) {
|
|
284
323
|
_this.scrollY = scrollbar;
|
|
285
324
|
};_this.
|
|
@@ -299,8 +338,8 @@ ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE_
|
|
|
299
338
|
};_this.
|
|
300
339
|
|
|
301
340
|
handleNativeScroll = function (event) {var _this$scrollY, _this$scrollX;
|
|
302
|
-
(_this$scrollY = _this.scrollY) == null ? void 0 : _this$scrollY.reflow(
|
|
303
|
-
(_this$scrollX = _this.scrollX) == null ? void 0 : _this$scrollX.reflow(
|
|
341
|
+
(_this$scrollY = _this.scrollY) == null ? void 0 : _this$scrollY.reflow();
|
|
342
|
+
(_this$scrollX = _this.scrollX) == null ? void 0 : _this$scrollX.reflow();
|
|
304
343
|
|
|
305
344
|
_this.props.onScroll == null ? void 0 : _this.props.onScroll(event);
|
|
306
345
|
if (_this.getProps().preventWindowScroll) {
|
|
@@ -310,6 +349,31 @@ ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE_
|
|
|
310
349
|
LayoutEvents.emit();
|
|
311
350
|
};_this.
|
|
312
351
|
|
|
352
|
+
showScrollBarOnMouseWheel = function (axis) {
|
|
353
|
+
var isScrollBarVisible = axis === 'x' ? _this.state.isScrollBarXVisible : _this.state.isScrollBarYVisible;
|
|
354
|
+
if (!isScrollBarVisible) {
|
|
355
|
+
axis === 'x' ? _this.setState({ isScrollBarXVisible: true }) : _this.setState({ isScrollBarYVisible: true });
|
|
356
|
+
}
|
|
357
|
+
_this.hideScrollBar(axis);
|
|
358
|
+
};_this.
|
|
359
|
+
|
|
360
|
+
hideScrollBar = (0, _lodash.default)(function (axis) {var _this$scrollX2, _this$scrollY2;
|
|
361
|
+
if (_this.state.isHovered) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
var isScrollBarXHovered = (_this$scrollX2 = _this.scrollX) == null ? void 0 : _this$scrollX2.getHover();
|
|
365
|
+
var isScrollBarYHovered = (_this$scrollY2 = _this.scrollY) == null ? void 0 : _this$scrollY2.getHover();
|
|
366
|
+
if (axis === 'both') {
|
|
367
|
+
!isScrollBarXHovered && !isScrollBarYHovered ?
|
|
368
|
+
_this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false }) :
|
|
369
|
+
_this.hideScrollBar('both');
|
|
370
|
+
} else if (axis === 'x') {
|
|
371
|
+
!isScrollBarXHovered ? _this.setState({ isScrollBarXVisible: false }) : _this.hideScrollBar('x');
|
|
372
|
+
} else {
|
|
373
|
+
!isScrollBarYHovered ? _this.setState({ isScrollBarYVisible: false }) : _this.hideScrollBar('y');
|
|
374
|
+
}
|
|
375
|
+
}, _this.getProps().hideScrollBarDelay);_this.
|
|
376
|
+
|
|
313
377
|
handleInnerScrollWheel = function (event) {
|
|
314
378
|
if (!_this.inner || !(0, _globalObject.isInstanceOf)(event, _globalObject.globalObject.WheelEvent)) {
|
|
315
379
|
return;
|
|
@@ -331,22 +395,31 @@ ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE_
|
|
|
331
395
|
}
|
|
332
396
|
};_this.
|
|
333
397
|
|
|
334
|
-
|
|
398
|
+
handleMouseEnter = function () {
|
|
399
|
+
_this.getProps().showScrollBar === 'hover' &&
|
|
400
|
+
_this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true, isHovered: true });
|
|
401
|
+
};_this.
|
|
402
|
+
|
|
403
|
+
handleMouseMove = function (event) {var _this$scrollY3, _this$scrollX3;
|
|
335
404
|
var right = (0, _getDOMRect.getDOMRect)(event.currentTarget).right - event.pageX;
|
|
336
405
|
var bottom = (0, _getDOMRect.getDOMRect)(event.currentTarget).bottom - event.pageY;
|
|
337
406
|
|
|
338
|
-
(_this$
|
|
339
|
-
(_this$
|
|
407
|
+
(_this$scrollY3 = _this.scrollY) == null ? void 0 : _this$scrollY3.setHover(right <= 12);
|
|
408
|
+
(_this$scrollX3 = _this.scrollX) == null ? void 0 : _this$scrollX3.setHover(right >= 12 && bottom <= 12);
|
|
340
409
|
};_this.
|
|
341
410
|
|
|
342
|
-
handleMouseLeave = function () {var _this$
|
|
343
|
-
(_this$
|
|
344
|
-
(_this$
|
|
411
|
+
handleMouseLeave = function () {var _this$scrollY4, _this$scrollX4;
|
|
412
|
+
(_this$scrollY4 = _this.scrollY) == null ? void 0 : _this$scrollY4.setHover(false);
|
|
413
|
+
(_this$scrollX4 = _this.scrollX) == null ? void 0 : _this$scrollX4.setHover(false);
|
|
414
|
+
if (_this.getProps().showScrollBar === 'hover') {
|
|
415
|
+
_this.setState({ isHovered: false });
|
|
416
|
+
_this.hideScrollBar('both');
|
|
417
|
+
}
|
|
345
418
|
};_this.
|
|
346
419
|
|
|
347
|
-
updateInnerElement = function () {var _this$
|
|
348
|
-
(_this$
|
|
349
|
-
(_this$
|
|
420
|
+
updateInnerElement = function () {var _this$scrollX5, _this$scrollY5;
|
|
421
|
+
(_this$scrollX5 = _this.scrollX) == null ? void 0 : _this$scrollX5.setInnerElement(_this.inner);
|
|
422
|
+
(_this$scrollY5 = _this.scrollY) == null ? void 0 : _this$scrollY5.setInnerElement(_this.inner);
|
|
350
423
|
};return _this;}var _proto = ScrollContainer.prototype;_proto.componentDidMount = function componentDidMount() {this.updateInnerElement();};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var preventWindowScroll = this.getProps().preventWindowScroll;if (this.inner) {if (prevProps.preventWindowScroll && !preventWindowScroll) {this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);}if (!prevProps.preventWindowScroll && preventWindowScroll) {this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });}}if (prevProps.disabled !== this.props.disabled && !this.props.disabled) {this.updateInnerElement();}}; /**
|
|
351
424
|
* @public
|
|
352
425
|
* @param {Element} element
|
|
@@ -358,4 +431,4 @@ ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE_
|
|
|
358
431
|
* @public
|
|
359
432
|
*/;_proto.scrollToLeft = function scrollToLeft() {if (!this.inner) {return;}this.inner.scrollLeft = 0;} /**
|
|
360
433
|
* @public
|
|
361
|
-
*/;_proto.scrollToRight = function scrollToRight() {if (!this.inner) {return;}this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;};_proto.hasScrollBar = function hasScrollBar(axis) {if (!this.inner) {return false;}return axis === 'x' ? this.inner.offsetWidth < this.inner.scrollWidth : this.inner.offsetHeight < this.inner.scrollHeight;};return ScrollContainer;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'ScrollContainer', _class2.propTypes = { invert: _propTypes.default.bool, maxWidth: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]), maxHeight: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]), scrollBehaviour: _propTypes.default.oneOf(['auto', 'smooth']), preventWindowScroll: _propTypes.default.bool, onScrollStateChange: _propTypes.default.func }, _class2.defaultProps = { invert: false, scrollBehaviour: 'auto', preventWindowScroll: false, hideScrollBar: false, disableAnimations: _currentEnvironment.isTestEnv, hideScrollBarDelay: 500 }, _temp)) || _class;exports.ScrollContainer = ScrollContainer;
|
|
434
|
+
*/;_proto.scrollToRight = function scrollToRight() {if (!this.inner) {return;}this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;};_proto.hasScrollBar = function hasScrollBar(axis) {if (!this.inner) {return false;}return axis === 'x' ? this.inner.offsetWidth < this.inner.scrollWidth : this.inner.offsetHeight < this.inner.scrollHeight;};return ScrollContainer;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'ScrollContainer', _class2.propTypes = { invert: _propTypes.default.bool, maxWidth: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]), maxHeight: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]), scrollBehaviour: _propTypes.default.oneOf(['auto', 'smooth']), preventWindowScroll: _propTypes.default.bool, onScrollStateChange: _propTypes.default.func }, _class2.defaultProps = { invert: false, scrollBehaviour: 'auto', preventWindowScroll: false, hideScrollBar: false, disableAnimations: _currentEnvironment.isTestEnv, hideScrollBarDelay: 500, showScrollBar: 'always' }, _temp)) || _class;exports.ScrollContainer = ScrollContainer;
|