@skbkontur/react-ui 4.26.0-next.0 → 4.26.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/CHANGELOG.md +19 -0
- package/cjs/components/Calendar/Calendar.md +40 -0
- package/cjs/components/DropdownMenu/DropdownMenu.md +39 -0
- package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -0
- package/cjs/components/ScrollContainer/ScrollContainer.js +6 -0
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/Calendar/Calendar.md +40 -0
- package/components/DropdownMenu/DropdownMenu.md +39 -0
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +5 -0
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +1 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,25 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [4.26.0](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.25.2...@skbkontur/react-ui@4.26.0) (2024-08-20)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **FileUploader:** correct event type ([aaf3422](https://github.com/skbkontur/retail-ui/commit/aaf3422a849e3b3fef81d8656031bc66412e06ca))
|
|
12
|
+
* **FileUploader:** work with sync mode ([82a7a3c](https://github.com/skbkontur/retail-ui/commit/82a7a3c5d95d3b132d39a333cec515c3b0d28bfb))
|
|
13
|
+
* **ScrollContainer:** new prop 'scrollRef' ([#3476](https://github.com/skbkontur/retail-ui/issues/3476)) ([d066e35](https://github.com/skbkontur/retail-ui/commit/d066e35d7a4d4c8e273e0b382a475a217b7386fc))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* **FileUploader:** initial state for files ([b735a83](https://github.com/skbkontur/retail-ui/commit/b735a834c4d6736f9d05289ac4b3e4c7f132de43))
|
|
19
|
+
* **ZIndex:** partially support several React roots ([#3478](https://github.com/skbkontur/retail-ui/issues/3478)) ([6c87630](https://github.com/skbkontur/retail-ui/commit/6c87630368219fd3b32d5e5dfc67704f3b29ad99))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
6
25
|
## [4.25.2](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.25.1...@skbkontur/react-ui@4.25.2) (2024-07-16)
|
|
7
26
|
|
|
8
27
|
|
|
@@ -106,6 +106,8 @@ const theme = React.useContext(ThemeContext);
|
|
|
106
106
|
|
|
107
107
|
### Кастомный рендер дня
|
|
108
108
|
|
|
109
|
+
Для кастомнизации дней в календаре используется метод `renderDay` и компонент [Calendar.Day](#/Components/Calendar/Calendar.Day)
|
|
110
|
+
|
|
109
111
|
```jsx harmony
|
|
110
112
|
import { Tooltip, Hint, CalendarDay } from '@skbkontur/react-ui';
|
|
111
113
|
|
|
@@ -144,6 +146,44 @@ const renderDay = (props) => {
|
|
|
144
146
|
/>;
|
|
145
147
|
```
|
|
146
148
|
|
|
149
|
+
### Календарь с ценами
|
|
150
|
+
|
|
151
|
+
Пример с кастомизацией темы и кастомным рендером дня
|
|
152
|
+
|
|
153
|
+
```jsx harmony
|
|
154
|
+
import { ThemeContext, ThemeFactory, CalendarDay } from '@skbkontur/react-ui';
|
|
155
|
+
|
|
156
|
+
const theme = React.useContext(ThemeContext);
|
|
157
|
+
|
|
158
|
+
function renderDay(props) {
|
|
159
|
+
const [date, month] = props.date.split('.').map(Number);
|
|
160
|
+
const randomDay = date % 6 === 0 || date % 7 === 0 || date % 8 === 0;
|
|
161
|
+
const randomPrice = Math.round((date / month) * 1000);
|
|
162
|
+
|
|
163
|
+
return (
|
|
164
|
+
<CalendarDay {...props}>
|
|
165
|
+
<div style={{ fontSize: theme.calendarCellFontSize }}>{date}</div>
|
|
166
|
+
<div style={{ fontSize: '11px', fontFeatureSettings: 'tnum', fontVariantNumeric: 'tabular-nums' }}>
|
|
167
|
+
{randomDay ? <>{randomPrice} ₽</> : <span style={{ color: theme.tokenTextColorDisabled }}>—</span>}
|
|
168
|
+
</div>
|
|
169
|
+
</CalendarDay>
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const [value, setValue] = React.useState(null);
|
|
174
|
+
|
|
175
|
+
<ThemeContext.Provider
|
|
176
|
+
value={ThemeFactory.create({
|
|
177
|
+
calendarCellSize: '56px',
|
|
178
|
+
calendarCellLineHeight: '1.5',
|
|
179
|
+
calendarWrapperHeight: '600px',
|
|
180
|
+
calendarCellBorderRadius: '8px'
|
|
181
|
+
}, theme)}
|
|
182
|
+
>
|
|
183
|
+
<Calendar value={value} renderDay={renderDay} onValueChange={setValue} />
|
|
184
|
+
</ThemeContext.Provider>
|
|
185
|
+
```
|
|
186
|
+
|
|
147
187
|
#### Локали по умолчанию
|
|
148
188
|
|
|
149
189
|
```typescript static
|
|
@@ -247,3 +247,42 @@ const hiddenItems = [
|
|
|
247
247
|
</DropdownMenu>
|
|
248
248
|
</Gapped>
|
|
249
249
|
```
|
|
250
|
+
|
|
251
|
+
С использованием фиче-флага menuItemsAtAnyLevel. Mожно использовать различные обертки для пунктов меню.
|
|
252
|
+
|
|
253
|
+
```jsx harmony
|
|
254
|
+
import {
|
|
255
|
+
DropdownMenu,
|
|
256
|
+
Button,
|
|
257
|
+
MenuHeader,
|
|
258
|
+
MenuItem,
|
|
259
|
+
MenuSeparator,
|
|
260
|
+
ReactUIFeatureFlagsContext,
|
|
261
|
+
Gapped
|
|
262
|
+
} from '@skbkontur/react-ui';
|
|
263
|
+
|
|
264
|
+
const groupedMenuItems = (
|
|
265
|
+
<div>
|
|
266
|
+
<MenuItem>MenuItem1</MenuItem>
|
|
267
|
+
<MenuItem>MenuItem2</MenuItem>
|
|
268
|
+
<MenuItem isNotSelectable>Not Selectable</MenuItem>
|
|
269
|
+
</div>
|
|
270
|
+
);
|
|
271
|
+
|
|
272
|
+
<Gapped>
|
|
273
|
+
<ReactUIFeatureFlagsContext.Provider value={{ menuItemsAtAnyLevel: true }}>
|
|
274
|
+
<DropdownMenu caption={<Button use="primary">Открыть меню</Button>}>
|
|
275
|
+
<>
|
|
276
|
+
<MenuHeader>Заголовок меню</MenuHeader>
|
|
277
|
+
<MenuSeparator />
|
|
278
|
+
<div>
|
|
279
|
+
{groupedMenuItems}
|
|
280
|
+
</div>
|
|
281
|
+
</>
|
|
282
|
+
<MenuItem>MenuItem3</MenuItem>
|
|
283
|
+
</DropdownMenu>
|
|
284
|
+
</ReactUIFeatureFlagsContext.Provider>
|
|
285
|
+
</Gapped>;
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
|
|
@@ -59,6 +59,7 @@ export interface ScrollContainerProps extends CommonProps {
|
|
|
59
59
|
* Отключить анимации
|
|
60
60
|
*/
|
|
61
61
|
disableAnimations?: boolean;
|
|
62
|
+
scrollRef?: React.Ref<HTMLDivElement | null>;
|
|
62
63
|
}
|
|
63
64
|
export declare const ScrollContainerDataTids: {
|
|
64
65
|
readonly root: "ScrollContainer__root";
|
|
@@ -13,6 +13,7 @@ var _rootNode = require("../../lib/rootNode");
|
|
|
13
13
|
var _getDOMRect = require("../../lib/dom/getDOMRect");
|
|
14
14
|
var _createPropsGetter = require("../../lib/createPropsGetter");
|
|
15
15
|
var _currentEnvironment = require("../../lib/currentEnvironment");
|
|
16
|
+
var _callChildRef = require("../../lib/callChildRef/callChildRef");
|
|
16
17
|
|
|
17
18
|
var _ScrollContainer = require("./ScrollContainer.styles");
|
|
18
19
|
var _ScrollContainer2 = require("./ScrollContainer.constants");
|
|
@@ -81,6 +82,7 @@ var _ScrollBar = require("./ScrollBar");var _class, _class2, _temp;
|
|
|
81
82
|
|
|
82
83
|
|
|
83
84
|
|
|
85
|
+
|
|
84
86
|
|
|
85
87
|
|
|
86
88
|
var ScrollContainerDataTids = {
|
|
@@ -344,6 +346,10 @@ ScrollContainer = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE_
|
|
|
344
346
|
_this.inner.removeEventListener('wheel', _this.handleInnerScrollWheel);
|
|
345
347
|
}
|
|
346
348
|
_this.inner = element;
|
|
349
|
+
|
|
350
|
+
if (_this.props.scrollRef) {
|
|
351
|
+
(0, _callChildRef.callChildRef)(_this.props.scrollRef, element);
|
|
352
|
+
}
|
|
347
353
|
};_this.
|
|
348
354
|
|
|
349
355
|
handleNativeScroll = function (event) {var _this$scrollY, _this$scrollX;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScrollContainer.tsx"],"names":["ScrollContainerDataTids","root","inner","ScrollContainer","rootNode","getProps","defaultProps","initialIsScrollBarVisible","hideScrollBar","showScrollBar","state","isScrollBarXVisible","isScrollBarYVisible","isHovered","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","styles","handleMouseMove","handleMouseLeave","refInner","globalClasses","isIE11","innerIE11","handleNativeScroll","axis","offsetY","offsetX","invert","disableAnimations","isAxisX","refScrollBar","refScrollBarX","refScrollBarY","offset","isVisible","handleScroll","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","prevScrollState","showScrollBarOnMouseWheel","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","event","reflow","onScroll","preventDefault","LayoutEvents","emit","isScrollBarVisible","setState","isScrollBarXHovered","getHover","isScrollBarYHovered","hideScrollBarDelay","globalObject","WheelEvent","shiftKey","hasScrollBar","scrollSizeParametersNames","pos","size","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","updateInnerElement","setInnerElement","componentDidMount","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","React","Component","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","bool","oneOfType","string","number","oneOf","func","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\nimport debounce from 'lodash.debounce';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants';\nimport {\n getScrollYOffset,\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n} from './ScrollContainer.helpers';\nimport { ScrollAxis, ScrollBar, ScrollBarScrollState } from './ScrollBar';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollContainerScrollState = ScrollContainerScrollStateY; // deprecated\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /**\n * Инвертировать цвет скроллбара\n * @default false\n */\n invert?: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * @default false\n */\n preventWindowScroll?: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void; // deprecated\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n /**\n * Отключение кастомного скролла\n */\n disabled?: boolean;\n /**\n * Смещение вертикального скроллбара\n */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n /**\n * Смещение горизонтального скроллбара\n */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n /**\n * Скрывать скроллбар при отсутствии активности пользователя\n * @deprecated use showScrollBar\n */\n hideScrollBar?: boolean;\n /**\n * Показывать скроллбар\n */\n showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';\n /**\n * Задержка перед скрытием скроллбара, ms. Работает только если `hideScrollBar = true` или `showScrollBar = 'scroll' | 'hover'`\n */\n hideScrollBarDelay?: number;\n /**\n * Отключить анимации\n */\n disableAnimations?: boolean;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n ScrollContainerProps,\n | 'invert'\n | 'scrollBehaviour'\n | 'preventWindowScroll'\n | 'hideScrollBar'\n | 'disableAnimations'\n | 'hideScrollBarDelay'\n | 'showScrollBar'\n >\n>;\n\ninterface ScrollContainerState {\n isScrollBarXVisible: boolean;\n isScrollBarYVisible: boolean;\n isHovered: boolean;\n}\n\n@rootNode\nexport class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n public static displayName = 'ScrollContainer';\n\n public inner: Nullable<HTMLElement>;\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n hideScrollBar: false,\n disableAnimations: isTestEnv,\n hideScrollBarDelay: 500,\n showScrollBar: 'always',\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private setRootNode!: TSetRootNode;\n private initialIsScrollBarVisible = !this.getProps().hideScrollBar && this.getProps().showScrollBar === 'always';\n\n public state: ScrollContainerState = {\n isScrollBarXVisible: this.initialIsScrollBarVisible,\n isScrollBarYVisible: this.initialIsScrollBarVisible,\n isHovered: false,\n };\n\n public componentDidMount() {\n this.updateInnerElement();\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n\n if (prevProps.disabled !== this.props.disabled && !this.props.disabled) {\n this.updateInnerElement();\n }\n\n if (prevProps.showScrollBar !== this.props.showScrollBar) {\n if (this.props.showScrollBar === 'always') {\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true });\n } else if (this.props.showScrollBar === 'never') {\n this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().scrollBehaviour,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth,\n };\n\n const scrollbarY = this.renderScrollbar('y');\n const scrollbarX = this.renderScrollbar('x');\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} element\n */\n public scrollTo(element: Nullable<HTMLElement>) {\n if (!element || !this.inner) {\n return;\n }\n\n this.inner.scrollLeft = element.offsetLeft;\n this.inner.scrollTop = getScrollYOffset(element, this.inner);\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * @public\n */\n public scrollToLeft() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight() {\n if (!this.inner) {\n return;\n }\n\n this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;\n }\n\n public hasScrollBar(axis: ScrollAxis) {\n if (!this.inner) {\n return false;\n }\n\n return axis === 'x'\n ? this.inner.offsetWidth < this.inner.scrollWidth\n : this.inner.offsetHeight < this.inner.scrollHeight;\n }\n\n private renderScrollbar = (axis: ScrollAxis) => {\n const { offsetY, offsetX, invert, disableAnimations } = this.getProps();\n const isAxisX = axis === 'x';\n const refScrollBar = isAxisX ? this.refScrollBarX : this.refScrollBarY;\n const offset = isAxisX ? offsetX : offsetY;\n const isVisible = isAxisX ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={invert}\n onScroll={this.handleScroll}\n offset={offset}\n disableAnimations={disableAnimations}\n isVisible={isVisible}\n />\n );\n };\n\n private handleScrollStateChange = (scrollState: ScrollBarScrollState, axis: ScrollAxis) => {\n if (!this.scrollY || !this.scrollX) {\n return;\n }\n\n if (axis === 'x') {\n const scrollXState = convertScrollbarXScrollState(scrollState);\n\n this.props.onScrollStateChangeX?.(scrollXState);\n return;\n }\n\n const scrollYState = convertScrollbarYScrollState(scrollState);\n\n this.props.onScrollStateChange?.(scrollYState);\n this.props.onScrollStateChangeY?.(scrollYState);\n };\n\n private handleScroll = (\n axis: ScrollAxis,\n scrollState: ScrollBarScrollState,\n prevScrollState: ScrollBarScrollState,\n ) => {\n if (scrollState !== prevScrollState) {\n this.handleScrollStateChange(scrollState, axis);\n }\n const { hideScrollBar, showScrollBar } = this.getProps();\n (hideScrollBar || showScrollBar === 'scroll') && this.showScrollBarOnMouseWheel(axis);\n };\n\n private refScrollBarY = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollY = scrollbar;\n };\n\n private refScrollBarX = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollX = scrollbar;\n };\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.getProps().preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.scrollY?.reflow();\n this.scrollX?.reflow();\n\n this.props.onScroll?.(event);\n if (this.getProps().preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private showScrollBarOnMouseWheel = (axis: ScrollAxis) => {\n const isScrollBarVisible = axis === 'x' ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n if (!isScrollBarVisible) {\n axis === 'x' ? this.setState({ isScrollBarXVisible: true }) : this.setState({ isScrollBarYVisible: true });\n }\n this.hideScrollBar(axis);\n };\n\n private readonly hideScrollBar = debounce((axis: ScrollAxis | 'both') => {\n if (this.state.isHovered) {\n return;\n }\n const isScrollBarXHovered = this.scrollX?.getHover();\n const isScrollBarYHovered = this.scrollY?.getHover();\n if (axis === 'both') {\n !isScrollBarXHovered && !isScrollBarYHovered\n ? this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false })\n : this.hideScrollBar('both');\n } else if (axis === 'x') {\n !isScrollBarXHovered ? this.setState({ isScrollBarXVisible: false }) : this.hideScrollBar('x');\n } else {\n !isScrollBarYHovered ? this.setState({ isScrollBarYVisible: false }) : this.hideScrollBar('y');\n }\n }, this.getProps().hideScrollBarDelay);\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !isInstanceOf(event, globalObject.WheelEvent)) {\n return;\n }\n\n const axis: ScrollAxis = event.shiftKey ? 'x' : 'y';\n\n if (this.hasScrollBar(axis)) {\n const { pos, size, offset } = scrollSizeParametersNames[axis];\n\n if (event.deltaY > 0 && this.inner[size] <= this.inner[pos] + this.inner[offset]) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner[pos] <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).bottom - event.pageY;\n\n this.scrollY?.setHover(right <= 12);\n this.scrollX?.setHover(right >= 12 && bottom <= 12);\n\n this.getProps().showScrollBar === 'hover' &&\n !this.state.isHovered &&\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true, isHovered: true });\n };\n\n private handleMouseLeave = () => {\n this.scrollY?.setHover(false);\n this.scrollX?.setHover(false);\n if (this.getProps().showScrollBar === 'hover') {\n this.setState({ isHovered: false });\n this.hideScrollBar('both');\n }\n };\n\n private updateInnerElement = () => {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["ScrollContainer.tsx"],"names":["ScrollContainerDataTids","root","inner","ScrollContainer","rootNode","getProps","defaultProps","initialIsScrollBarVisible","hideScrollBar","showScrollBar","state","isScrollBarXVisible","isScrollBarYVisible","isHovered","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","styles","handleMouseMove","handleMouseLeave","refInner","globalClasses","isIE11","innerIE11","handleNativeScroll","axis","offsetY","offsetX","invert","disableAnimations","isAxisX","refScrollBar","refScrollBarX","refScrollBarY","offset","isVisible","handleScroll","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","prevScrollState","showScrollBarOnMouseWheel","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","scrollRef","event","reflow","onScroll","preventDefault","LayoutEvents","emit","isScrollBarVisible","setState","isScrollBarXHovered","getHover","isScrollBarYHovered","hideScrollBarDelay","globalObject","WheelEvent","shiftKey","hasScrollBar","scrollSizeParametersNames","pos","size","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","updateInnerElement","setInnerElement","componentDidMount","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","React","Component","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","bool","oneOfType","string","number","oneOf","func","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\nimport debounce from 'lodash.debounce';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants';\nimport {\n getScrollYOffset,\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n} from './ScrollContainer.helpers';\nimport { ScrollAxis, ScrollBar, ScrollBarScrollState } from './ScrollBar';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollContainerScrollState = ScrollContainerScrollStateY; // deprecated\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /**\n * Инвертировать цвет скроллбара\n * @default false\n */\n invert?: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * @default false\n */\n preventWindowScroll?: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void; // deprecated\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n /**\n * Отключение кастомного скролла\n */\n disabled?: boolean;\n /**\n * Смещение вертикального скроллбара\n */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n /**\n * Смещение горизонтального скроллбара\n */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n /**\n * Скрывать скроллбар при отсутствии активности пользователя\n * @deprecated use showScrollBar\n */\n hideScrollBar?: boolean;\n /**\n * Показывать скроллбар\n */\n showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';\n /**\n * Задержка перед скрытием скроллбара, ms. Работает только если `hideScrollBar = true` или `showScrollBar = 'scroll' | 'hover'`\n */\n hideScrollBarDelay?: number;\n /**\n * Отключить анимации\n */\n disableAnimations?: boolean;\n scrollRef?: React.Ref<HTMLDivElement | null>;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n ScrollContainerProps,\n | 'invert'\n | 'scrollBehaviour'\n | 'preventWindowScroll'\n | 'hideScrollBar'\n | 'disableAnimations'\n | 'hideScrollBarDelay'\n | 'showScrollBar'\n >\n>;\n\ninterface ScrollContainerState {\n isScrollBarXVisible: boolean;\n isScrollBarYVisible: boolean;\n isHovered: boolean;\n}\n\n@rootNode\nexport class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n public static displayName = 'ScrollContainer';\n\n public inner: Nullable<HTMLElement>;\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n hideScrollBar: false,\n disableAnimations: isTestEnv,\n hideScrollBarDelay: 500,\n showScrollBar: 'always',\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private setRootNode!: TSetRootNode;\n private initialIsScrollBarVisible = !this.getProps().hideScrollBar && this.getProps().showScrollBar === 'always';\n\n public state: ScrollContainerState = {\n isScrollBarXVisible: this.initialIsScrollBarVisible,\n isScrollBarYVisible: this.initialIsScrollBarVisible,\n isHovered: false,\n };\n\n public componentDidMount() {\n this.updateInnerElement();\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n\n if (prevProps.disabled !== this.props.disabled && !this.props.disabled) {\n this.updateInnerElement();\n }\n\n if (prevProps.showScrollBar !== this.props.showScrollBar) {\n if (this.props.showScrollBar === 'always') {\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true });\n } else if (this.props.showScrollBar === 'never') {\n this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().scrollBehaviour,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth,\n };\n\n const scrollbarY = this.renderScrollbar('y');\n const scrollbarX = this.renderScrollbar('x');\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} element\n */\n public scrollTo(element: Nullable<HTMLElement>) {\n if (!element || !this.inner) {\n return;\n }\n\n this.inner.scrollLeft = element.offsetLeft;\n this.inner.scrollTop = getScrollYOffset(element, this.inner);\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * @public\n */\n public scrollToLeft() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight() {\n if (!this.inner) {\n return;\n }\n\n this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;\n }\n\n public hasScrollBar(axis: ScrollAxis) {\n if (!this.inner) {\n return false;\n }\n\n return axis === 'x'\n ? this.inner.offsetWidth < this.inner.scrollWidth\n : this.inner.offsetHeight < this.inner.scrollHeight;\n }\n\n private renderScrollbar = (axis: ScrollAxis) => {\n const { offsetY, offsetX, invert, disableAnimations } = this.getProps();\n const isAxisX = axis === 'x';\n const refScrollBar = isAxisX ? this.refScrollBarX : this.refScrollBarY;\n const offset = isAxisX ? offsetX : offsetY;\n const isVisible = isAxisX ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={invert}\n onScroll={this.handleScroll}\n offset={offset}\n disableAnimations={disableAnimations}\n isVisible={isVisible}\n />\n );\n };\n\n private handleScrollStateChange = (scrollState: ScrollBarScrollState, axis: ScrollAxis) => {\n if (!this.scrollY || !this.scrollX) {\n return;\n }\n\n if (axis === 'x') {\n const scrollXState = convertScrollbarXScrollState(scrollState);\n\n this.props.onScrollStateChangeX?.(scrollXState);\n return;\n }\n\n const scrollYState = convertScrollbarYScrollState(scrollState);\n\n this.props.onScrollStateChange?.(scrollYState);\n this.props.onScrollStateChangeY?.(scrollYState);\n };\n\n private handleScroll = (\n axis: ScrollAxis,\n scrollState: ScrollBarScrollState,\n prevScrollState: ScrollBarScrollState,\n ) => {\n if (scrollState !== prevScrollState) {\n this.handleScrollStateChange(scrollState, axis);\n }\n const { hideScrollBar, showScrollBar } = this.getProps();\n (hideScrollBar || showScrollBar === 'scroll') && this.showScrollBarOnMouseWheel(axis);\n };\n\n private refScrollBarY = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollY = scrollbar;\n };\n\n private refScrollBarX = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollX = scrollbar;\n };\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.getProps().preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n\n if (this.props.scrollRef) {\n callChildRef(this.props.scrollRef, element);\n }\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.scrollY?.reflow();\n this.scrollX?.reflow();\n\n this.props.onScroll?.(event);\n if (this.getProps().preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private showScrollBarOnMouseWheel = (axis: ScrollAxis) => {\n const isScrollBarVisible = axis === 'x' ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n if (!isScrollBarVisible) {\n axis === 'x' ? this.setState({ isScrollBarXVisible: true }) : this.setState({ isScrollBarYVisible: true });\n }\n this.hideScrollBar(axis);\n };\n\n private readonly hideScrollBar = debounce((axis: ScrollAxis | 'both') => {\n if (this.state.isHovered) {\n return;\n }\n const isScrollBarXHovered = this.scrollX?.getHover();\n const isScrollBarYHovered = this.scrollY?.getHover();\n if (axis === 'both') {\n !isScrollBarXHovered && !isScrollBarYHovered\n ? this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false })\n : this.hideScrollBar('both');\n } else if (axis === 'x') {\n !isScrollBarXHovered ? this.setState({ isScrollBarXVisible: false }) : this.hideScrollBar('x');\n } else {\n !isScrollBarYHovered ? this.setState({ isScrollBarYVisible: false }) : this.hideScrollBar('y');\n }\n }, this.getProps().hideScrollBarDelay);\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !isInstanceOf(event, globalObject.WheelEvent)) {\n return;\n }\n\n const axis: ScrollAxis = event.shiftKey ? 'x' : 'y';\n\n if (this.hasScrollBar(axis)) {\n const { pos, size, offset } = scrollSizeParametersNames[axis];\n\n if (event.deltaY > 0 && this.inner[size] <= this.inner[pos] + this.inner[offset]) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner[pos] <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).bottom - event.pageY;\n\n this.scrollY?.setHover(right <= 12);\n this.scrollX?.setHover(right >= 12 && bottom <= 12);\n\n this.getProps().showScrollBar === 'hover' &&\n !this.state.isHovered &&\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true, isHovered: true });\n };\n\n private handleMouseLeave = () => {\n this.scrollY?.setHover(false);\n this.scrollX?.setHover(false);\n if (this.getProps().showScrollBar === 'hover') {\n this.setState({ isHovered: false });\n this.hideScrollBar('both');\n }\n };\n\n private updateInnerElement = () => {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n };\n}\n"]}
|
|
@@ -106,6 +106,8 @@ const theme = React.useContext(ThemeContext);
|
|
|
106
106
|
|
|
107
107
|
### Кастомный рендер дня
|
|
108
108
|
|
|
109
|
+
Для кастомнизации дней в календаре используется метод `renderDay` и компонент [Calendar.Day](#/Components/Calendar/Calendar.Day)
|
|
110
|
+
|
|
109
111
|
```jsx harmony
|
|
110
112
|
import { Tooltip, Hint, CalendarDay } from '@skbkontur/react-ui';
|
|
111
113
|
|
|
@@ -144,6 +146,44 @@ const renderDay = (props) => {
|
|
|
144
146
|
/>;
|
|
145
147
|
```
|
|
146
148
|
|
|
149
|
+
### Календарь с ценами
|
|
150
|
+
|
|
151
|
+
Пример с кастомизацией темы и кастомным рендером дня
|
|
152
|
+
|
|
153
|
+
```jsx harmony
|
|
154
|
+
import { ThemeContext, ThemeFactory, CalendarDay } from '@skbkontur/react-ui';
|
|
155
|
+
|
|
156
|
+
const theme = React.useContext(ThemeContext);
|
|
157
|
+
|
|
158
|
+
function renderDay(props) {
|
|
159
|
+
const [date, month] = props.date.split('.').map(Number);
|
|
160
|
+
const randomDay = date % 6 === 0 || date % 7 === 0 || date % 8 === 0;
|
|
161
|
+
const randomPrice = Math.round((date / month) * 1000);
|
|
162
|
+
|
|
163
|
+
return (
|
|
164
|
+
<CalendarDay {...props}>
|
|
165
|
+
<div style={{ fontSize: theme.calendarCellFontSize }}>{date}</div>
|
|
166
|
+
<div style={{ fontSize: '11px', fontFeatureSettings: 'tnum', fontVariantNumeric: 'tabular-nums' }}>
|
|
167
|
+
{randomDay ? <>{randomPrice} ₽</> : <span style={{ color: theme.tokenTextColorDisabled }}>—</span>}
|
|
168
|
+
</div>
|
|
169
|
+
</CalendarDay>
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const [value, setValue] = React.useState(null);
|
|
174
|
+
|
|
175
|
+
<ThemeContext.Provider
|
|
176
|
+
value={ThemeFactory.create({
|
|
177
|
+
calendarCellSize: '56px',
|
|
178
|
+
calendarCellLineHeight: '1.5',
|
|
179
|
+
calendarWrapperHeight: '600px',
|
|
180
|
+
calendarCellBorderRadius: '8px'
|
|
181
|
+
}, theme)}
|
|
182
|
+
>
|
|
183
|
+
<Calendar value={value} renderDay={renderDay} onValueChange={setValue} />
|
|
184
|
+
</ThemeContext.Provider>
|
|
185
|
+
```
|
|
186
|
+
|
|
147
187
|
#### Локали по умолчанию
|
|
148
188
|
|
|
149
189
|
```typescript static
|
|
@@ -247,3 +247,42 @@ const hiddenItems = [
|
|
|
247
247
|
</DropdownMenu>
|
|
248
248
|
</Gapped>
|
|
249
249
|
```
|
|
250
|
+
|
|
251
|
+
С использованием фиче-флага menuItemsAtAnyLevel. Mожно использовать различные обертки для пунктов меню.
|
|
252
|
+
|
|
253
|
+
```jsx harmony
|
|
254
|
+
import {
|
|
255
|
+
DropdownMenu,
|
|
256
|
+
Button,
|
|
257
|
+
MenuHeader,
|
|
258
|
+
MenuItem,
|
|
259
|
+
MenuSeparator,
|
|
260
|
+
ReactUIFeatureFlagsContext,
|
|
261
|
+
Gapped
|
|
262
|
+
} from '@skbkontur/react-ui';
|
|
263
|
+
|
|
264
|
+
const groupedMenuItems = (
|
|
265
|
+
<div>
|
|
266
|
+
<MenuItem>MenuItem1</MenuItem>
|
|
267
|
+
<MenuItem>MenuItem2</MenuItem>
|
|
268
|
+
<MenuItem isNotSelectable>Not Selectable</MenuItem>
|
|
269
|
+
</div>
|
|
270
|
+
);
|
|
271
|
+
|
|
272
|
+
<Gapped>
|
|
273
|
+
<ReactUIFeatureFlagsContext.Provider value={{ menuItemsAtAnyLevel: true }}>
|
|
274
|
+
<DropdownMenu caption={<Button use="primary">Открыть меню</Button>}>
|
|
275
|
+
<>
|
|
276
|
+
<MenuHeader>Заголовок меню</MenuHeader>
|
|
277
|
+
<MenuSeparator />
|
|
278
|
+
<div>
|
|
279
|
+
{groupedMenuItems}
|
|
280
|
+
</div>
|
|
281
|
+
</>
|
|
282
|
+
<MenuItem>MenuItem3</MenuItem>
|
|
283
|
+
</DropdownMenu>
|
|
284
|
+
</ReactUIFeatureFlagsContext.Provider>
|
|
285
|
+
</Gapped>;
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
|
|
@@ -16,6 +16,7 @@ import { rootNode } from "../../../lib/rootNode";
|
|
|
16
16
|
import { getDOMRect } from "../../../lib/dom/getDOMRect";
|
|
17
17
|
import { createPropsGetter } from "../../../lib/createPropsGetter";
|
|
18
18
|
import { isTestEnv } from "../../../lib/currentEnvironment";
|
|
19
|
+
import { callChildRef } from "../../../lib/callChildRef/callChildRef";
|
|
19
20
|
import { styles, globalClasses } from "../ScrollContainer.styles";
|
|
20
21
|
import { scrollSizeParametersNames } from "../ScrollContainer.constants";
|
|
21
22
|
import { getScrollYOffset, convertScrollbarXScrollState, convertScrollbarYScrollState } from "../ScrollContainer.helpers";
|
|
@@ -146,6 +147,10 @@ export var ScrollContainer = rootNode(_class = (_temp = _class2 = /*#__PURE__*/f
|
|
|
146
147
|
}
|
|
147
148
|
|
|
148
149
|
_this.inner = element;
|
|
150
|
+
|
|
151
|
+
if (_this.props.scrollRef) {
|
|
152
|
+
callChildRef(_this.props.scrollRef, element);
|
|
153
|
+
}
|
|
149
154
|
};
|
|
150
155
|
|
|
151
156
|
_this.handleNativeScroll = function (event) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScrollContainer.tsx"],"names":["React","PropTypes","globalObject","debounce","isInstanceOf","LayoutEvents","CommonWrapper","cx","isIE11","rootNode","getDOMRect","createPropsGetter","isTestEnv","styles","globalClasses","scrollSizeParametersNames","getScrollYOffset","convertScrollbarXScrollState","convertScrollbarYScrollState","ScrollBar","ScrollContainerDataTids","root","inner","ScrollContainer","getProps","defaultProps","initialIsScrollBarVisible","hideScrollBar","showScrollBar","state","isScrollBarXVisible","isScrollBarYVisible","isHovered","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","handleMouseMove","handleMouseLeave","refInner","innerIE11","handleNativeScroll","axis","offsetY","offsetX","invert","disableAnimations","isAxisX","refScrollBar","refScrollBarX","refScrollBarY","offset","isVisible","handleScroll","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","prevScrollState","showScrollBarOnMouseWheel","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","event","reflow","onScroll","preventDefault","emit","isScrollBarVisible","setState","isScrollBarXHovered","getHover","isScrollBarYHovered","hideScrollBarDelay","WheelEvent","shiftKey","hasScrollBar","pos","size","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","updateInnerElement","setInnerElement","componentDidMount","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","Component","__KONTUR_REACT_UI__","displayName","propTypes","bool","oneOfType","string","number","oneOf","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\nimport debounce from 'lodash.debounce';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants';\nimport {\n getScrollYOffset,\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n} from './ScrollContainer.helpers';\nimport { ScrollAxis, ScrollBar, ScrollBarScrollState } from './ScrollBar';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollContainerScrollState = ScrollContainerScrollStateY; // deprecated\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /**\n * Инвертировать цвет скроллбара\n * @default false\n */\n invert?: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * @default false\n */\n preventWindowScroll?: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void; // deprecated\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n /**\n * Отключение кастомного скролла\n */\n disabled?: boolean;\n /**\n * Смещение вертикального скроллбара\n */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n /**\n * Смещение горизонтального скроллбара\n */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n /**\n * Скрывать скроллбар при отсутствии активности пользователя\n * @deprecated use showScrollBar\n */\n hideScrollBar?: boolean;\n /**\n * Показывать скроллбар\n */\n showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';\n /**\n * Задержка перед скрытием скроллбара, ms. Работает только если `hideScrollBar = true` или `showScrollBar = 'scroll' | 'hover'`\n */\n hideScrollBarDelay?: number;\n /**\n * Отключить анимации\n */\n disableAnimations?: boolean;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n ScrollContainerProps,\n | 'invert'\n | 'scrollBehaviour'\n | 'preventWindowScroll'\n | 'hideScrollBar'\n | 'disableAnimations'\n | 'hideScrollBarDelay'\n | 'showScrollBar'\n >\n>;\n\ninterface ScrollContainerState {\n isScrollBarXVisible: boolean;\n isScrollBarYVisible: boolean;\n isHovered: boolean;\n}\n\n@rootNode\nexport class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n public static displayName = 'ScrollContainer';\n\n public inner: Nullable<HTMLElement>;\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n hideScrollBar: false,\n disableAnimations: isTestEnv,\n hideScrollBarDelay: 500,\n showScrollBar: 'always',\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private setRootNode!: TSetRootNode;\n private initialIsScrollBarVisible = !this.getProps().hideScrollBar && this.getProps().showScrollBar === 'always';\n\n public state: ScrollContainerState = {\n isScrollBarXVisible: this.initialIsScrollBarVisible,\n isScrollBarYVisible: this.initialIsScrollBarVisible,\n isHovered: false,\n };\n\n public componentDidMount() {\n this.updateInnerElement();\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n\n if (prevProps.disabled !== this.props.disabled && !this.props.disabled) {\n this.updateInnerElement();\n }\n\n if (prevProps.showScrollBar !== this.props.showScrollBar) {\n if (this.props.showScrollBar === 'always') {\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true });\n } else if (this.props.showScrollBar === 'never') {\n this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().scrollBehaviour,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth,\n };\n\n const scrollbarY = this.renderScrollbar('y');\n const scrollbarX = this.renderScrollbar('x');\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} element\n */\n public scrollTo(element: Nullable<HTMLElement>) {\n if (!element || !this.inner) {\n return;\n }\n\n this.inner.scrollLeft = element.offsetLeft;\n this.inner.scrollTop = getScrollYOffset(element, this.inner);\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * @public\n */\n public scrollToLeft() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight() {\n if (!this.inner) {\n return;\n }\n\n this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;\n }\n\n public hasScrollBar(axis: ScrollAxis) {\n if (!this.inner) {\n return false;\n }\n\n return axis === 'x'\n ? this.inner.offsetWidth < this.inner.scrollWidth\n : this.inner.offsetHeight < this.inner.scrollHeight;\n }\n\n private renderScrollbar = (axis: ScrollAxis) => {\n const { offsetY, offsetX, invert, disableAnimations } = this.getProps();\n const isAxisX = axis === 'x';\n const refScrollBar = isAxisX ? this.refScrollBarX : this.refScrollBarY;\n const offset = isAxisX ? offsetX : offsetY;\n const isVisible = isAxisX ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={invert}\n onScroll={this.handleScroll}\n offset={offset}\n disableAnimations={disableAnimations}\n isVisible={isVisible}\n />\n );\n };\n\n private handleScrollStateChange = (scrollState: ScrollBarScrollState, axis: ScrollAxis) => {\n if (!this.scrollY || !this.scrollX) {\n return;\n }\n\n if (axis === 'x') {\n const scrollXState = convertScrollbarXScrollState(scrollState);\n\n this.props.onScrollStateChangeX?.(scrollXState);\n return;\n }\n\n const scrollYState = convertScrollbarYScrollState(scrollState);\n\n this.props.onScrollStateChange?.(scrollYState);\n this.props.onScrollStateChangeY?.(scrollYState);\n };\n\n private handleScroll = (\n axis: ScrollAxis,\n scrollState: ScrollBarScrollState,\n prevScrollState: ScrollBarScrollState,\n ) => {\n if (scrollState !== prevScrollState) {\n this.handleScrollStateChange(scrollState, axis);\n }\n const { hideScrollBar, showScrollBar } = this.getProps();\n (hideScrollBar || showScrollBar === 'scroll') && this.showScrollBarOnMouseWheel(axis);\n };\n\n private refScrollBarY = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollY = scrollbar;\n };\n\n private refScrollBarX = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollX = scrollbar;\n };\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.getProps().preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.scrollY?.reflow();\n this.scrollX?.reflow();\n\n this.props.onScroll?.(event);\n if (this.getProps().preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private showScrollBarOnMouseWheel = (axis: ScrollAxis) => {\n const isScrollBarVisible = axis === 'x' ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n if (!isScrollBarVisible) {\n axis === 'x' ? this.setState({ isScrollBarXVisible: true }) : this.setState({ isScrollBarYVisible: true });\n }\n this.hideScrollBar(axis);\n };\n\n private readonly hideScrollBar = debounce((axis: ScrollAxis | 'both') => {\n if (this.state.isHovered) {\n return;\n }\n const isScrollBarXHovered = this.scrollX?.getHover();\n const isScrollBarYHovered = this.scrollY?.getHover();\n if (axis === 'both') {\n !isScrollBarXHovered && !isScrollBarYHovered\n ? this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false })\n : this.hideScrollBar('both');\n } else if (axis === 'x') {\n !isScrollBarXHovered ? this.setState({ isScrollBarXVisible: false }) : this.hideScrollBar('x');\n } else {\n !isScrollBarYHovered ? this.setState({ isScrollBarYVisible: false }) : this.hideScrollBar('y');\n }\n }, this.getProps().hideScrollBarDelay);\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !isInstanceOf(event, globalObject.WheelEvent)) {\n return;\n }\n\n const axis: ScrollAxis = event.shiftKey ? 'x' : 'y';\n\n if (this.hasScrollBar(axis)) {\n const { pos, size, offset } = scrollSizeParametersNames[axis];\n\n if (event.deltaY > 0 && this.inner[size] <= this.inner[pos] + this.inner[offset]) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner[pos] <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).bottom - event.pageY;\n\n this.scrollY?.setHover(right <= 12);\n this.scrollX?.setHover(right >= 12 && bottom <= 12);\n\n this.getProps().showScrollBar === 'hover' &&\n !this.state.isHovered &&\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true, isHovered: true });\n };\n\n private handleMouseLeave = () => {\n this.scrollY?.setHover(false);\n this.scrollX?.setHover(false);\n if (this.getProps().showScrollBar === 'hover') {\n this.setState({ isHovered: false });\n this.hideScrollBar('both');\n }\n };\n\n private updateInnerElement = () => {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["ScrollContainer.tsx"],"names":["React","PropTypes","globalObject","debounce","isInstanceOf","LayoutEvents","CommonWrapper","cx","isIE11","rootNode","getDOMRect","createPropsGetter","isTestEnv","callChildRef","styles","globalClasses","scrollSizeParametersNames","getScrollYOffset","convertScrollbarXScrollState","convertScrollbarYScrollState","ScrollBar","ScrollContainerDataTids","root","inner","ScrollContainer","getProps","defaultProps","initialIsScrollBarVisible","hideScrollBar","showScrollBar","state","isScrollBarXVisible","isScrollBarYVisible","isHovered","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","handleMouseMove","handleMouseLeave","refInner","innerIE11","handleNativeScroll","axis","offsetY","offsetX","invert","disableAnimations","isAxisX","refScrollBar","refScrollBarX","refScrollBarY","offset","isVisible","handleScroll","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","prevScrollState","showScrollBarOnMouseWheel","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","scrollRef","event","reflow","onScroll","preventDefault","emit","isScrollBarVisible","setState","isScrollBarXHovered","getHover","isScrollBarYHovered","hideScrollBarDelay","WheelEvent","shiftKey","hasScrollBar","pos","size","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","updateInnerElement","setInnerElement","componentDidMount","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","Component","__KONTUR_REACT_UI__","displayName","propTypes","bool","oneOfType","string","number","oneOf","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\nimport debounce from 'lodash.debounce';\n\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants';\nimport {\n getScrollYOffset,\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n} from './ScrollContainer.helpers';\nimport { ScrollAxis, ScrollBar, ScrollBarScrollState } from './ScrollBar';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollContainerScrollState = ScrollContainerScrollStateY; // deprecated\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /**\n * Инвертировать цвет скроллбара\n * @default false\n */\n invert?: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * @default false\n */\n preventWindowScroll?: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void; // deprecated\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n /**\n * Отключение кастомного скролла\n */\n disabled?: boolean;\n /**\n * Смещение вертикального скроллбара\n */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n /**\n * Смещение горизонтального скроллбара\n */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n /**\n * Скрывать скроллбар при отсутствии активности пользователя\n * @deprecated use showScrollBar\n */\n hideScrollBar?: boolean;\n /**\n * Показывать скроллбар\n */\n showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';\n /**\n * Задержка перед скрытием скроллбара, ms. Работает только если `hideScrollBar = true` или `showScrollBar = 'scroll' | 'hover'`\n */\n hideScrollBarDelay?: number;\n /**\n * Отключить анимации\n */\n disableAnimations?: boolean;\n scrollRef?: React.Ref<HTMLDivElement | null>;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n ScrollContainerProps,\n | 'invert'\n | 'scrollBehaviour'\n | 'preventWindowScroll'\n | 'hideScrollBar'\n | 'disableAnimations'\n | 'hideScrollBarDelay'\n | 'showScrollBar'\n >\n>;\n\ninterface ScrollContainerState {\n isScrollBarXVisible: boolean;\n isScrollBarYVisible: boolean;\n isHovered: boolean;\n}\n\n@rootNode\nexport class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n public static displayName = 'ScrollContainer';\n\n public inner: Nullable<HTMLElement>;\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n hideScrollBar: false,\n disableAnimations: isTestEnv,\n hideScrollBarDelay: 500,\n showScrollBar: 'always',\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private setRootNode!: TSetRootNode;\n private initialIsScrollBarVisible = !this.getProps().hideScrollBar && this.getProps().showScrollBar === 'always';\n\n public state: ScrollContainerState = {\n isScrollBarXVisible: this.initialIsScrollBarVisible,\n isScrollBarYVisible: this.initialIsScrollBarVisible,\n isHovered: false,\n };\n\n public componentDidMount() {\n this.updateInnerElement();\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n\n if (prevProps.disabled !== this.props.disabled && !this.props.disabled) {\n this.updateInnerElement();\n }\n\n if (prevProps.showScrollBar !== this.props.showScrollBar) {\n if (this.props.showScrollBar === 'always') {\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true });\n } else if (this.props.showScrollBar === 'never') {\n this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().scrollBehaviour,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth,\n };\n\n const scrollbarY = this.renderScrollbar('y');\n const scrollbarX = this.renderScrollbar('x');\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} element\n */\n public scrollTo(element: Nullable<HTMLElement>) {\n if (!element || !this.inner) {\n return;\n }\n\n this.inner.scrollLeft = element.offsetLeft;\n this.inner.scrollTop = getScrollYOffset(element, this.inner);\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * @public\n */\n public scrollToLeft() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight() {\n if (!this.inner) {\n return;\n }\n\n this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;\n }\n\n public hasScrollBar(axis: ScrollAxis) {\n if (!this.inner) {\n return false;\n }\n\n return axis === 'x'\n ? this.inner.offsetWidth < this.inner.scrollWidth\n : this.inner.offsetHeight < this.inner.scrollHeight;\n }\n\n private renderScrollbar = (axis: ScrollAxis) => {\n const { offsetY, offsetX, invert, disableAnimations } = this.getProps();\n const isAxisX = axis === 'x';\n const refScrollBar = isAxisX ? this.refScrollBarX : this.refScrollBarY;\n const offset = isAxisX ? offsetX : offsetY;\n const isVisible = isAxisX ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={invert}\n onScroll={this.handleScroll}\n offset={offset}\n disableAnimations={disableAnimations}\n isVisible={isVisible}\n />\n );\n };\n\n private handleScrollStateChange = (scrollState: ScrollBarScrollState, axis: ScrollAxis) => {\n if (!this.scrollY || !this.scrollX) {\n return;\n }\n\n if (axis === 'x') {\n const scrollXState = convertScrollbarXScrollState(scrollState);\n\n this.props.onScrollStateChangeX?.(scrollXState);\n return;\n }\n\n const scrollYState = convertScrollbarYScrollState(scrollState);\n\n this.props.onScrollStateChange?.(scrollYState);\n this.props.onScrollStateChangeY?.(scrollYState);\n };\n\n private handleScroll = (\n axis: ScrollAxis,\n scrollState: ScrollBarScrollState,\n prevScrollState: ScrollBarScrollState,\n ) => {\n if (scrollState !== prevScrollState) {\n this.handleScrollStateChange(scrollState, axis);\n }\n const { hideScrollBar, showScrollBar } = this.getProps();\n (hideScrollBar || showScrollBar === 'scroll') && this.showScrollBarOnMouseWheel(axis);\n };\n\n private refScrollBarY = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollY = scrollbar;\n };\n\n private refScrollBarX = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollX = scrollbar;\n };\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.getProps().preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n\n if (this.props.scrollRef) {\n callChildRef(this.props.scrollRef, element);\n }\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.scrollY?.reflow();\n this.scrollX?.reflow();\n\n this.props.onScroll?.(event);\n if (this.getProps().preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private showScrollBarOnMouseWheel = (axis: ScrollAxis) => {\n const isScrollBarVisible = axis === 'x' ? this.state.isScrollBarXVisible : this.state.isScrollBarYVisible;\n if (!isScrollBarVisible) {\n axis === 'x' ? this.setState({ isScrollBarXVisible: true }) : this.setState({ isScrollBarYVisible: true });\n }\n this.hideScrollBar(axis);\n };\n\n private readonly hideScrollBar = debounce((axis: ScrollAxis | 'both') => {\n if (this.state.isHovered) {\n return;\n }\n const isScrollBarXHovered = this.scrollX?.getHover();\n const isScrollBarYHovered = this.scrollY?.getHover();\n if (axis === 'both') {\n !isScrollBarXHovered && !isScrollBarYHovered\n ? this.setState({ isScrollBarXVisible: false, isScrollBarYVisible: false })\n : this.hideScrollBar('both');\n } else if (axis === 'x') {\n !isScrollBarXHovered ? this.setState({ isScrollBarXVisible: false }) : this.hideScrollBar('x');\n } else {\n !isScrollBarYHovered ? this.setState({ isScrollBarYVisible: false }) : this.hideScrollBar('y');\n }\n }, this.getProps().hideScrollBarDelay);\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !isInstanceOf(event, globalObject.WheelEvent)) {\n return;\n }\n\n const axis: ScrollAxis = event.shiftKey ? 'x' : 'y';\n\n if (this.hasScrollBar(axis)) {\n const { pos, size, offset } = scrollSizeParametersNames[axis];\n\n if (event.deltaY > 0 && this.inner[size] <= this.inner[pos] + this.inner[offset]) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner[pos] <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).bottom - event.pageY;\n\n this.scrollY?.setHover(right <= 12);\n this.scrollX?.setHover(right >= 12 && bottom <= 12);\n\n this.getProps().showScrollBar === 'hover' &&\n !this.state.isHovered &&\n this.setState({ isScrollBarXVisible: true, isScrollBarYVisible: true, isHovered: true });\n };\n\n private handleMouseLeave = () => {\n this.scrollY?.setHover(false);\n this.scrollX?.setHover(false);\n if (this.getProps().showScrollBar === 'hover') {\n this.setState({ isHovered: false });\n this.hideScrollBar('both');\n }\n };\n\n private updateInnerElement = () => {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n };\n}\n"]}
|
|
@@ -59,6 +59,7 @@ export interface ScrollContainerProps extends CommonProps {
|
|
|
59
59
|
* Отключить анимации
|
|
60
60
|
*/
|
|
61
61
|
disableAnimations?: boolean;
|
|
62
|
+
scrollRef?: React.Ref<HTMLDivElement | null>;
|
|
62
63
|
}
|
|
63
64
|
export declare const ScrollContainerDataTids: {
|
|
64
65
|
readonly root: "ScrollContainer__root";
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skbkontur/react-ui",
|
|
3
|
-
"version": "4.26.0
|
|
3
|
+
"version": "4.26.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/4.26.0
|
|
8
|
+
"homepage": "https://tech.skbkontur.ru/react-ui/4.26.0/",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
11
|
"url": "git@github.com:skbkontur/retail-ui.git"
|
|
@@ -154,6 +154,6 @@
|
|
|
154
154
|
"react-dom": ">=16.9"
|
|
155
155
|
},
|
|
156
156
|
"publishConfig": {
|
|
157
|
-
"tag": "
|
|
157
|
+
"tag": "latest"
|
|
158
158
|
}
|
|
159
159
|
}
|