@skbkontur/react-ui 6.0.5 → 6.0.7-b5d2c.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 +11 -0
- package/components/Calendar/Calendar.d.ts +14 -14
- package/components/Calendar/Calendar.js +2 -2
- package/components/Calendar/Calendar.js.map +1 -1
- package/components/Calendar/CalendarDay.d.ts +2 -2
- package/components/Calendar/CalendarDay.js +1 -1
- package/components/Calendar/CalendarDay.js.map +1 -1
- package/components/Center/Center.d.ts +3 -3
- package/components/Center/Center.js +2 -2
- package/components/Center/Center.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +11 -14
- package/components/Checkbox/Checkbox.js +3 -6
- package/components/Checkbox/Checkbox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +5 -3
- package/components/ComboBox/ComboBox.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +15 -15
- package/components/DateInput/DateInput.js +1 -1
- package/components/DateInput/DateInput.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +14 -16
- package/components/DatePicker/DatePicker.js +4 -5
- package/components/DatePicker/DatePicker.js.map +1 -1
- package/components/DateRangePicker/DateRangePicker.d.ts +4 -3
- package/components/DateRangePicker/DateRangePicker.js +5 -3
- package/components/DateRangePicker/DateRangePicker.js.map +1 -1
- package/components/DateRangePicker/DateRangePickerInput.js +6 -4
- package/components/DateRangePicker/DateRangePickerInput.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +10 -15
- package/components/Dropdown/Dropdown.js +2 -8
- package/components/Dropdown/Dropdown.js.map +1 -1
- package/components/DropdownMenu/DropdownMenu.d.ts +17 -15
- package/components/DropdownMenu/DropdownMenu.js +4 -1
- package/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/components/FileUploader/FileUploader.d.ts +4 -6
- package/components/FileUploader/FileUploader.js +1 -3
- package/components/FileUploader/FileUploader.js.map +1 -1
- package/components/FileUploader/FileUploaderFile.d.ts +3 -3
- package/components/FileUploader/FileUploaderFile.js +1 -1
- package/components/FileUploader/FileUploaderFile.js.map +1 -1
- package/components/Input/Input.d.ts +2 -2
- package/components/Input/Input.js.map +1 -1
- package/components/MenuFooter/MenuFooter.d.ts +4 -8
- package/components/MenuFooter/MenuFooter.js +1 -5
- package/components/MenuFooter/MenuFooter.js.map +1 -1
- package/components/MenuHeader/MenuHeader.d.ts +4 -8
- package/components/MenuHeader/MenuHeader.js +1 -5
- package/components/MenuHeader/MenuHeader.js.map +1 -1
- package/components/MenuItem/MenuItem.d.ts +11 -13
- package/components/MenuItem/MenuItem.js +1 -3
- package/components/MenuItem/MenuItem.js.map +1 -1
- package/components/MenuSeparator/MenuSeparator.d.ts +1 -3
- package/components/MenuSeparator/MenuSeparator.js +1 -3
- package/components/MenuSeparator/MenuSeparator.js.map +1 -1
- package/components/MiniModal/MiniModal.d.ts +1 -1
- package/components/MiniModal/MiniModal.js +1 -1
- package/components/MiniModal/MiniModal.js.map +1 -1
- package/components/MiniModal/MiniModalBody.d.ts +1 -1
- package/components/MiniModal/MiniModalBody.js +1 -1
- package/components/MiniModal/MiniModalBody.js.map +1 -1
- package/components/MiniModal/MiniModalFooter.d.ts +1 -1
- package/components/MiniModal/MiniModalFooter.js +1 -1
- package/components/MiniModal/MiniModalFooter.js.map +1 -1
- package/components/MiniModal/MiniModalHeader.d.ts +1 -1
- package/components/MiniModal/MiniModalHeader.js +1 -1
- package/components/MiniModal/MiniModalHeader.js.map +1 -1
- package/components/Paging/Paging.d.ts +2 -2
- package/components/Paging/Paging.js.map +1 -1
- package/components/Radio/Radio.d.ts +7 -7
- package/components/Radio/Radio.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +2 -2
- package/components/RadioGroup/RadioGroup.js.map +1 -1
- package/components/ResponsiveLayout/ResponsiveLayout.d.ts +2 -2
- package/components/ResponsiveLayout/ResponsiveLayout.js +1 -1
- package/components/ResponsiveLayout/ResponsiveLayout.js.map +1 -1
- package/components/ScrollContainer/ScrollBar.d.ts +4 -4
- package/components/ScrollContainer/ScrollBar.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +17 -12
- package/components/ScrollContainer/ScrollContainer.js +6 -1
- package/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/Select/Select.d.ts +6 -4
- package/components/Select/Select.js +2 -2
- package/components/Select/Select.js.map +1 -1
- package/components/SingleToast/SingleToast.d.ts +1 -6
- package/components/SingleToast/SingleToast.js +1 -6
- package/components/SingleToast/SingleToast.js.map +1 -1
- package/components/Spinner/Spinner.d.ts +1 -1
- package/components/Spinner/Spinner.js +1 -1
- package/components/Spinner/Spinner.js.map +1 -1
- package/components/Sticky/Sticky.d.ts +0 -4
- package/components/Sticky/Sticky.js +0 -4
- package/components/Sticky/Sticky.js.map +1 -1
- package/components/Switcher/Switcher.d.ts +8 -10
- package/components/Switcher/Switcher.js +1 -3
- package/components/Switcher/Switcher.js.map +1 -1
- package/components/Tabs/Indicator.styles.d.ts +0 -1
- package/components/Tabs/Indicator.styles.js +1 -4
- package/components/Tabs/Indicator.styles.js.map +1 -1
- package/components/TimePicker/TimeClockIcon.d.ts +3 -0
- package/components/TimePicker/TimeClockIcon.js +11 -0
- package/components/TimePicker/TimeClockIcon.js.map +1 -0
- package/components/TimePicker/TimeFragmentsView.d.ts +15 -0
- package/components/TimePicker/TimeFragmentsView.js +72 -0
- package/components/TimePicker/TimeFragmentsView.js.map +1 -0
- package/components/TimePicker/TimeFragmentsView.styles.d.ts +12 -0
- package/components/TimePicker/TimeFragmentsView.styles.js +43 -0
- package/components/TimePicker/TimeFragmentsView.styles.js.map +1 -0
- package/components/TimePicker/TimeInput.d.ts +23 -0
- package/components/TimePicker/TimeInput.js +86 -0
- package/components/TimePicker/TimeInput.js.map +1 -0
- package/components/TimePicker/TimePicker.d.ts +27 -0
- package/components/TimePicker/TimePicker.js +351 -0
- package/components/TimePicker/TimePicker.js.map +1 -0
- package/components/TimePicker/TimePicker.styles.d.ts +12 -0
- package/components/TimePicker/TimePicker.styles.js +39 -0
- package/components/TimePicker/TimePicker.styles.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.constants.d.ts +19 -0
- package/components/TimePicker/helpers/TimePicker.constants.js +42 -0
- package/components/TimePicker/helpers/TimePicker.constants.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.editing.d.ts +6 -0
- package/components/TimePicker/helpers/TimePicker.editing.js +77 -0
- package/components/TimePicker/helpers/TimePicker.editing.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.layout.d.ts +7 -0
- package/components/TimePicker/helpers/TimePicker.layout.js +17 -0
- package/components/TimePicker/helpers/TimePicker.layout.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.selection.d.ts +7 -0
- package/components/TimePicker/helpers/TimePicker.selection.js +51 -0
- package/components/TimePicker/helpers/TimePicker.selection.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.shared.d.ts +24 -0
- package/components/TimePicker/helpers/TimePicker.shared.js +50 -0
- package/components/TimePicker/helpers/TimePicker.shared.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.value.d.ts +10 -0
- package/components/TimePicker/helpers/TimePicker.value.js +47 -0
- package/components/TimePicker/helpers/TimePicker.value.js.map +1 -0
- package/components/TimePicker/helpers/scrollSelectedSlotIntoView.d.ts +1 -0
- package/components/TimePicker/helpers/scrollSelectedSlotIntoView.js +21 -0
- package/components/TimePicker/helpers/scrollSelectedSlotIntoView.js.map +1 -0
- package/components/TimePicker/hooks/useTimePickerDropdown.d.ts +17 -0
- package/components/TimePicker/hooks/useTimePickerDropdown.js +62 -0
- package/components/TimePicker/hooks/useTimePickerDropdown.js.map +1 -0
- package/components/TimePicker/hooks/useTimePickerSelection.d.ts +15 -0
- package/components/TimePicker/hooks/useTimePickerSelection.js +43 -0
- package/components/TimePicker/hooks/useTimePickerSelection.js.map +1 -0
- package/components/TimePicker/hooks/useTimePickerValue.d.ts +18 -0
- package/components/TimePicker/hooks/useTimePickerValue.js +47 -0
- package/components/TimePicker/hooks/useTimePickerValue.js.map +1 -0
- package/components/TimePicker/index.d.ts +2 -0
- package/components/TimePicker/index.js +2 -0
- package/components/TimePicker/index.js.map +1 -0
- package/components/Tooltip/Tooltip.d.ts +4 -4
- package/components/Tooltip/Tooltip.js.map +1 -1
- package/components/TooltipMenu/TooltipMenu.d.ts +13 -19
- package/components/TooltipMenu/TooltipMenu.js +2 -8
- package/components/TooltipMenu/TooltipMenu.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
- package/internal/CustomComboBox/ComboBoxMenu.js +2 -2
- package/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.d.ts +1 -0
- package/internal/CustomComboBox/ComboBoxView.js +2 -2
- package/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
- package/internal/CustomComboBox/CustomComboBox.js +1 -0
- package/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.js.map +1 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.js.map +1 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.js.map +1 -0
- package/internal/themes/BasicTheme.d.ts +3 -0
- package/internal/themes/BasicTheme.js +33 -0
- package/internal/themes/BasicTheme.js.map +1 -1
- package/package.json +5 -2
|
@@ -9,34 +9,34 @@ export type ScrollBehaviour = 'auto' | 'smooth';
|
|
|
9
9
|
type OffsetCSSPropsY = 'top' | 'right' | 'bottom';
|
|
10
10
|
type OffsetCSSPropsX = 'right' | 'bottom' | 'left';
|
|
11
11
|
export interface ScrollContainerProps extends CommonProps {
|
|
12
|
-
/** Инвертирует цвет
|
|
12
|
+
/** Инвертирует цвет полосы прокрутки.
|
|
13
13
|
* @default false */
|
|
14
14
|
invert?: boolean;
|
|
15
|
-
/**
|
|
15
|
+
/** Максимальная высота скролл-контейнера. */
|
|
16
16
|
maxHeight?: React.CSSProperties['maxHeight'];
|
|
17
|
-
/**
|
|
17
|
+
/** Максимальная ширина скролл-контейнера. */
|
|
18
18
|
maxWidth?: React.CSSProperties['maxWidth'];
|
|
19
19
|
/** Отключает скролл окна, когда меню открыто.
|
|
20
20
|
* @default false */
|
|
21
21
|
preventWindowScroll?: boolean;
|
|
22
|
-
/**
|
|
22
|
+
/** Поведение скролла. (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)
|
|
23
23
|
* @default 'auto' */
|
|
24
24
|
scrollBehaviour?: ScrollBehaviour;
|
|
25
|
-
/**
|
|
25
|
+
/** Событие скролла по горизонтали. */
|
|
26
26
|
onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;
|
|
27
|
-
/**
|
|
27
|
+
/** Событие скролла по вертикали. */
|
|
28
28
|
onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;
|
|
29
|
-
/**
|
|
29
|
+
/** Событие скролла. */
|
|
30
30
|
onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;
|
|
31
31
|
/** Отключает кастомный скролл. */
|
|
32
32
|
disabled?: boolean;
|
|
33
|
-
/**
|
|
33
|
+
/** Смещение вертикальной полосы прокрутки. */
|
|
34
34
|
offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;
|
|
35
|
-
/**
|
|
35
|
+
/** Смещение горизонтальной полосы прокрутки. */
|
|
36
36
|
offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;
|
|
37
|
-
/** Определяет, нужно ли показывать
|
|
37
|
+
/** Определяет, нужно ли показывать полосу прокрутки. */
|
|
38
38
|
showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';
|
|
39
|
-
/** Устанавливает задержку в миллисекундах перед скрытием
|
|
39
|
+
/** Устанавливает задержку в миллисекундах перед скрытием полосы прокрутки.
|
|
40
40
|
* Работает только при hideScrollBar = true или showScrollBar = 'scroll' | 'hover'. */
|
|
41
41
|
hideScrollBarDelay?: number;
|
|
42
42
|
/** Отключает анимацию. */
|
|
@@ -54,7 +54,7 @@ interface ScrollContainerState {
|
|
|
54
54
|
isHovered: boolean;
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
|
-
*
|
|
57
|
+
* Контейнер с кастомными полосами прокрутки при скролле.
|
|
58
58
|
*/
|
|
59
59
|
export declare class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {
|
|
60
60
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -76,23 +76,28 @@ export declare class ScrollContainer extends React.Component<ScrollContainerProp
|
|
|
76
76
|
componentDidUpdate(prevProps: ScrollContainerProps): void;
|
|
77
77
|
render(): React.ReactNode;
|
|
78
78
|
/**
|
|
79
|
+
* Прокручивает контейнер так, чтобы указанный элемент оказался в видимой области.
|
|
79
80
|
* @public
|
|
80
81
|
* @param {Element} element
|
|
81
82
|
*/
|
|
82
83
|
scrollTo(element: Nullable<HTMLElement>): void;
|
|
83
84
|
/**
|
|
85
|
+
* Прокручивает содержимое контейнера к верхнему краю.
|
|
84
86
|
* @public
|
|
85
87
|
*/
|
|
86
88
|
scrollToTop(): void;
|
|
87
89
|
/**
|
|
90
|
+
* Прокручивает содержимое контейнера к нижнему краю (максимальной вертикальной позиции).
|
|
88
91
|
* @public
|
|
89
92
|
*/
|
|
90
93
|
scrollToBottom(): void;
|
|
91
94
|
/**
|
|
95
|
+
* Прокручивает содержимое контейнера к левому краю.
|
|
92
96
|
* @public
|
|
93
97
|
*/
|
|
94
98
|
scrollToLeft(): void;
|
|
95
99
|
/**
|
|
100
|
+
* Прокручивает содержимое контейнера к правому краю (максимальной горизонтальной позиции).
|
|
96
101
|
* @public
|
|
97
102
|
*/
|
|
98
103
|
scrollToRight(): void;
|
|
@@ -50,7 +50,7 @@ export var ScrollContainerDataTids = {
|
|
|
50
50
|
inner: 'ScrollContainer__inner',
|
|
51
51
|
};
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
53
|
+
* Контейнер с кастомными полосами прокрутки при скролле.
|
|
54
54
|
*/
|
|
55
55
|
var ScrollContainer = /** @class */ (function (_super) {
|
|
56
56
|
__extends(ScrollContainer, _super);
|
|
@@ -235,6 +235,7 @@ var ScrollContainer = /** @class */ (function (_super) {
|
|
|
235
235
|
React.createElement("div", { style: innerStyle, ref: this.refInner, className: this.cx(this.styles.inner(), globalClasses.inner), "data-tid": ScrollContainerDataTids.inner, onScroll: this.handleNativeScroll }, props.children))));
|
|
236
236
|
};
|
|
237
237
|
/**
|
|
238
|
+
* Прокручивает контейнер так, чтобы указанный элемент оказался в видимой области.
|
|
238
239
|
* @public
|
|
239
240
|
* @param {Element} element
|
|
240
241
|
*/
|
|
@@ -246,6 +247,7 @@ var ScrollContainer = /** @class */ (function (_super) {
|
|
|
246
247
|
this.inner.scrollTop = getScrollYOffset(element, this.inner);
|
|
247
248
|
};
|
|
248
249
|
/**
|
|
250
|
+
* Прокручивает содержимое контейнера к верхнему краю.
|
|
249
251
|
* @public
|
|
250
252
|
*/
|
|
251
253
|
ScrollContainer.prototype.scrollToTop = function () {
|
|
@@ -255,6 +257,7 @@ var ScrollContainer = /** @class */ (function (_super) {
|
|
|
255
257
|
this.inner.scrollTop = 0;
|
|
256
258
|
};
|
|
257
259
|
/**
|
|
260
|
+
* Прокручивает содержимое контейнера к нижнему краю (максимальной вертикальной позиции).
|
|
258
261
|
* @public
|
|
259
262
|
*/
|
|
260
263
|
ScrollContainer.prototype.scrollToBottom = function () {
|
|
@@ -264,6 +267,7 @@ var ScrollContainer = /** @class */ (function (_super) {
|
|
|
264
267
|
this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;
|
|
265
268
|
};
|
|
266
269
|
/**
|
|
270
|
+
* Прокручивает содержимое контейнера к левому краю.
|
|
267
271
|
* @public
|
|
268
272
|
*/
|
|
269
273
|
ScrollContainer.prototype.scrollToLeft = function () {
|
|
@@ -273,6 +277,7 @@ var ScrollContainer = /** @class */ (function (_super) {
|
|
|
273
277
|
this.inner.scrollLeft = 0;
|
|
274
278
|
};
|
|
275
279
|
/**
|
|
280
|
+
* Прокручивает содержимое контейнера к правому краю (максимальной горизонтальной позиции).
|
|
276
281
|
* @public
|
|
277
282
|
*/
|
|
278
283
|
ScrollContainer.prototype.scrollToRight = function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollContainer.js","sourceRoot":"","sources":["../../../components/ScrollContainer/ScrollContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport debounce from 'lodash.debounce';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { isInstanceOf } from '../../lib/isInstanceOf.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { ScrollAxis, ScrollBarScrollState } from './ScrollBar.js';\nimport { ScrollBar } from './ScrollBar.js';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants.js';\nimport {\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n getScrollYOffset,\n} from './ScrollContainer.helpers.js';\nimport { getStyles, globalClasses } from './ScrollContainer.styles.js';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /** Инвертирует цвет скроллбара.\n * @default false */\n invert?: boolean;\n\n /** Задает максимальную высоту. */\n maxHeight?: React.CSSProperties['maxHeight'];\n\n /** Задает максимальную ширину. */\n maxWidth?: React.CSSProperties['maxWidth'];\n\n /** Отключает скролл окна, когда меню открыто.\n * @default false */\n preventWindowScroll?: boolean;\n\n /** Задает поведение скролла. (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto' */\n scrollBehaviour?: ScrollBehaviour;\n\n /** Задает функцию, которая вызывается при скроле по горизонтали. */\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n\n /** Задает функцию, которая вызывается при скроле по вертикали. */\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n\n /** Задает функцию, которая вызывается при скроле. */\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n\n /** Отключает кастомный скролл. */\n disabled?: boolean;\n\n /** Задает смещение вертикального скроллбара. */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n\n /** Задает смещение горизонтального скроллбара. */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n\n /** Определяет, нужно ли показывать скроллбар. */\n showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';\n\n /** Устанавливает задержку в миллисекундах перед скрытием скроллбара.\n * Работает только при hideScrollBar = true или showScrollBar = 'scroll' | 'hover'. */\n hideScrollBarDelay?: number;\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' | 'scrollBehaviour' | 'preventWindowScroll' | 'disableAnimations' | 'hideScrollBarDelay' | 'showScrollBar'\n >\n>;\n\ninterface ScrollContainerState {\n isScrollBarXVisible: boolean;\n isScrollBarYVisible: boolean;\n isHovered: boolean;\n}\n\n/**\n * `ScrollContainer` используется для создания контейнера с кастомными полосами прокрутки, который обеспечивает прокрутку содержимого по горизонтали или вертикали.\n */\n@withRenderEnvironment\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 defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n disableAnimations: isTestEnv,\n hideScrollBarDelay: 500,\n showScrollBar: 'always',\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private initialIsScrollBarVisible = 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(): React.ReactNode {\n this.styles = getStyles(this.emotion);\n\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={this.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={this.cx(this.styles.inner(), globalClasses.inner)}\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>): void {\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(): void {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom(): void {\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(): void {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight(): void {\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): boolean {\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.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 { showScrollBar } = this.getProps();\n 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, this.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,"file":"ScrollContainer.js","sourceRoot":"","sources":["../../../components/ScrollContainer/ScrollContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport debounce from 'lodash.debounce';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { isInstanceOf } from '../../lib/isInstanceOf.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { ScrollAxis, ScrollBarScrollState } from './ScrollBar.js';\nimport { ScrollBar } from './ScrollBar.js';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants.js';\nimport {\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n getScrollYOffset,\n} from './ScrollContainer.helpers.js';\nimport { getStyles, globalClasses } from './ScrollContainer.styles.js';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\n\nexport interface ScrollContainerProps extends CommonProps {\n /** Инвертирует цвет полосы прокрутки.\n * @default false */\n invert?: boolean;\n\n /** Максимальная высота скролл-контейнера. */\n maxHeight?: React.CSSProperties['maxHeight'];\n\n /** Максимальная ширина скролл-контейнера. */\n maxWidth?: React.CSSProperties['maxWidth'];\n\n /** Отключает скролл окна, когда меню открыто.\n * @default false */\n preventWindowScroll?: boolean;\n\n /** Поведение скролла. (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto' */\n scrollBehaviour?: ScrollBehaviour;\n\n /** Событие скролла по горизонтали. */\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n\n /** Событие скролла по вертикали. */\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n\n /** Событие скролла. */\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n\n /** Отключает кастомный скролл. */\n disabled?: boolean;\n\n /** Смещение вертикальной полосы прокрутки. */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n\n /** Смещение горизонтальной полосы прокрутки. */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n\n /** Определяет, нужно ли показывать полосу прокрутки. */\n showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';\n\n /** Устанавливает задержку в миллисекундах перед скрытием полосы прокрутки.\n * Работает только при hideScrollBar = true или showScrollBar = 'scroll' | 'hover'. */\n hideScrollBarDelay?: number;\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' | 'scrollBehaviour' | 'preventWindowScroll' | 'disableAnimations' | 'hideScrollBarDelay' | 'showScrollBar'\n >\n>;\n\ninterface ScrollContainerState {\n isScrollBarXVisible: boolean;\n isScrollBarYVisible: boolean;\n isHovered: boolean;\n}\n\n/**\n * Контейнер с кастомными полосами прокрутки при скролле.\n */\n@withRenderEnvironment\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 defaultProps: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n disableAnimations: isTestEnv,\n hideScrollBarDelay: 500,\n showScrollBar: 'always',\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private initialIsScrollBarVisible = 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(): React.ReactNode {\n this.styles = getStyles(this.emotion);\n\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={this.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={this.cx(this.styles.inner(), globalClasses.inner)}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n }\n\n /**\n * Прокручивает контейнер так, чтобы указанный элемент оказался в видимой области.\n * @public\n * @param {Element} element\n */\n public scrollTo(element: Nullable<HTMLElement>): void {\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 * Прокручивает содержимое контейнера к верхнему краю.\n * @public\n */\n public scrollToTop(): void {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * Прокручивает содержимое контейнера к нижнему краю (максимальной вертикальной позиции).\n * @public\n */\n public scrollToBottom(): void {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * Прокручивает содержимое контейнера к левому краю.\n * @public\n */\n public scrollToLeft(): void {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * Прокручивает содержимое контейнера к правому краю (максимальной горизонтальной позиции).\n * @public\n */\n public scrollToRight(): void {\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): boolean {\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.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 { showScrollBar } = this.getProps();\n 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, this.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"]}
|
|
@@ -14,9 +14,9 @@ export interface ButtonParams extends Pick<AriaAttributes, 'aria-describedby' |
|
|
|
14
14
|
disabled?: boolean;
|
|
15
15
|
/** Задаёт лейбл. */
|
|
16
16
|
label: React.ReactNode;
|
|
17
|
-
/**
|
|
17
|
+
/** Событие нажатия на компонент. */
|
|
18
18
|
onClick: () => void;
|
|
19
|
-
/**
|
|
19
|
+
/** Событие нажатия кнопки на клавиатуре. */
|
|
20
20
|
onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;
|
|
21
21
|
/** Определяет, открыто ли выпадающее меню. */
|
|
22
22
|
opened: boolean;
|
|
@@ -46,7 +46,7 @@ export interface SelectProps<TValue, TItem> extends CommonProps, Pick<AriaAttrib
|
|
|
46
46
|
disablePortal?: boolean;
|
|
47
47
|
/** Блокирует раскрывающийся список. */
|
|
48
48
|
disabled?: boolean;
|
|
49
|
-
/**
|
|
49
|
+
/** Переводит компонент в состояние ошибки. */
|
|
50
50
|
error?: boolean;
|
|
51
51
|
/** Отфильтровывает элементы по заданному паттерну. */
|
|
52
52
|
filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;
|
|
@@ -116,7 +116,7 @@ export interface SelectProps<TValue, TItem> extends CommonProps, Pick<AriaAttrib
|
|
|
116
116
|
theme?: ThemeIn | Theme;
|
|
117
117
|
/** Ширина раскрывающегося списка. */
|
|
118
118
|
width?: number | string;
|
|
119
|
-
/**
|
|
119
|
+
/** Переводит компонент в состояние предупреждения. */
|
|
120
120
|
warning?: boolean;
|
|
121
121
|
/** Стиль кнопки. Примеры стилей смотрите [в документации компонента Button](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_button-button--docs). */
|
|
122
122
|
use?: ButtonUse;
|
|
@@ -130,6 +130,8 @@ export interface SelectProps<TValue, TItem> extends CommonProps, Pick<AriaAttrib
|
|
|
130
130
|
onBlur?: React.FocusEventHandler<HTMLElement>;
|
|
131
131
|
/** Текст заголовка списка в мобильной версии. */
|
|
132
132
|
mobileMenuHeaderText?: string;
|
|
133
|
+
/** Отключает выравнивание текста элементов в списке относительно иконок в других элементах. */
|
|
134
|
+
preventIconsOffset?: boolean;
|
|
133
135
|
}
|
|
134
136
|
export interface SelectState<TValue> {
|
|
135
137
|
opened: boolean;
|
|
@@ -381,9 +381,9 @@ var Select = /** @class */ (function (_super) {
|
|
|
381
381
|
Select.prototype.renderMenu = function () {
|
|
382
382
|
var search = this.props.search ? this.getSearch() : null;
|
|
383
383
|
var value = this.getValue();
|
|
384
|
-
var _a = this.getProps(), menuWidth = _a.menuWidth, menuPos = _a.menuPos, menuAlign = _a.menuAlign, positions = _a.positions;
|
|
384
|
+
var _a = this.getProps(), menuWidth = _a.menuWidth, menuPos = _a.menuPos, menuAlign = _a.menuAlign, positions = _a.positions, preventIconsOffset = _a.preventIconsOffset;
|
|
385
385
|
return (React.createElement(Popup, { opened: true, hasShadow: true, id: this.menuId, "data-tid": SelectDataTids.menu, positions: positions !== null && positions !== void 0 ? positions : getMenuPositions(menuPos, menuAlign), anchorElement: this.popupGetParent(), priority: ZIndex.priorities.PopupMenu, disablePortal: this.props.disablePortal, margin: parseInt(this.theme.menuOffsetY) - 1, width: menuWidth, minWidth: menuWidth === undefined ? '100%' : undefined, popupOffset: this.props.menuOffset },
|
|
386
|
-
React.createElement(Menu, { hasMargin: false, ref: this.refMenu, onItemClick: this.close, maxHeight: this.props.maxMenuHeight, align: menuAlign },
|
|
386
|
+
React.createElement(Menu, { hasMargin: false, ref: this.refMenu, onItemClick: this.close, maxHeight: this.props.maxMenuHeight, align: menuAlign, preventIconsOffset: preventIconsOffset },
|
|
387
387
|
search,
|
|
388
388
|
this.getMenuItems(value))));
|
|
389
389
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../components/Select/Select.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport invariant from 'invariant';\nimport debounce from 'lodash.debounce';\nimport type { AriaAttributes, HTMLAttributes, ReactNode, ReactPortal } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { Menu } from '../../internal/Menu/index.js';\nimport { MobilePopup } from '../../internal/MobilePopup/index.js';\nimport { Popup, type PopupPositionsType } from '../../internal/Popup/index.js';\nimport { RenderLayer } from '../../internal/RenderLayer/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers.js';\nimport { filterProps } from '../../lib/filterProps.js';\nimport { getMenuPositions } from '../../lib/getMenuPositions.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { locale } from '../../lib/locale/decorators.js';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { Theme, ThemeIn } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { getRandomID, isFunction, isNonNullable, isReactUINode } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { ButtonProps, ButtonUse } from '../Button/index.js';\nimport { Button } from '../Button/index.js';\nimport { Input } from '../Input/index.js';\nimport { getStyles as getLinkStyles } from '../Link/Link.styles.js';\nimport type { MenuHeaderProps } from '../MenuHeader/index.js';\nimport { MenuItem } from '../MenuItem/index.js';\nimport type { MenuItemProps } from '../MenuItem/index.js';\nimport { MenuSeparator } from '../MenuSeparator/index.js';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator.js';\nimport { ArrowDownIcon } from './ArrowDownIcon.js';\nimport { Item } from './Item.js';\nimport type { SelectLocale } from './locale/index.js';\nimport { SelectLocaleHelper } from './locale/index.js';\nimport { getStyles } from './Select.styles.js';\nimport { getSelectTheme } from './selectTheme.js';\nimport { SelectDataTids } from './tids.js';\n\nexport * from './tids.js';\n\nexport interface ButtonParams extends Pick<\n AriaAttributes,\n 'aria-describedby' | 'aria-controls' | 'aria-label' | 'aria-expanded'\n> {\n /** Блокирует компонент. */\n disabled?: boolean;\n\n /** Задаёт лейбл. */\n label: React.ReactNode;\n\n /** Задаёт функцию, которая вызывается при клике на компонент. */\n onClick: () => void;\n\n /** Задает функцию, которая вызывается при нажатии кнопки на клавиатуре. */\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Определяет, открыто ли выпадающее меню. */\n opened: boolean;\n\n /** Определяет, есть ли Placeholder. */\n isPlaceholder: boolean;\n\n /** Задает размер контрола. */\n size: SizeProp;\n}\n\nconst PASS_BUTTON_PROPS = {\n id: true,\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n corners: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport const SelectIds = {\n menu: SelectDataTids.menu,\n} as const;\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | TValue\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem>\n extends\n CommonProps,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'> {\n /** @ignore */\n _icon?: React.ReactNode;\n\n /** Отрисовывает кнопку. */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n\n /** @ignore */\n corners?: React.CSSProperties;\n\n /** Значение по умолчанию. */\n defaultValue?: TValue;\n\n /** Смещение списка относительно поля по горизонтали. При нуле смещения нет, при положительном значении — список сдвигается вправо, при отрицательном — влево.\n * @default 0\n */\n menuOffset?: number;\n\n /** По умолчанию список рендерится через [паттерн Portal](https://react.dev/reference/react-dom/createPortal). Проп отключает использование Portal и список рендерится как обычный блок с абсолютным позиционированием внутри компонента. */\n disablePortal?: boolean;\n\n /** Блокирует раскрывающийся список. */\n disabled?: boolean;\n\n /** Меняет визуальное отображение раскрывающегося списка на состояние ошибки. Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */\n error?: boolean;\n\n /** Отфильтровывает элементы по заданному паттерну. */\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n\n /** Набор значений. Поддерживаются любые перечисляемые типы, в том числе `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом:\n * - если элемент — это массив, то первый элемент является значением, второй — отображается в списке, а третий – комментарий;\n * - если элемент не является массивом, то он используется и для отображения, и для значения.\n *\n * Для вставки разделителя между значениями можно использовать `Select.SEP`.\n *\n * @example\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.staticElement(() => <div>My Element</div>)]}\n * />\n * ```\n * @example\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ``` */\n items?: Array<SelectItem<TValue, TItem>>;\n\n /** Максимальная высота раскрывающегося списка. */\n maxMenuHeight?: number;\n\n /** Максимальная ширина кнопки. */\n maxWidth?: React.CSSProperties['maxWidth'];\n\n /** Список значений, определяющих расположение списка относительно кнопки. Если во всех позициях список выходит за пределы `viewport`, будет использована первая из этого списка.\n *\n * `\"top left\"`, `\"top center\"`, `\"top right\"`, `\"right top\"`, `\"right middle\"`, `\"right bottom\"`, `\"bottom left\"`, `\"bottom center\"`, `\"bottom right\"`, `\"left top\"`, `\"left middle\"`, `\"left bottom\"`.\n * @default ['bottom left', 'bottom right', 'top left', 'top right'] */\n positions?: PopupPositionsType[];\n\n /** Фиксирует расположение списка относительно кнопки. */\n menuPos?: 'top' | 'bottom' | 'middle';\n\n /** Выравнивание списка. */\n menuAlign?: 'left' | 'right';\n\n /** Ширина списка. */\n menuWidth?: React.CSSProperties['width'];\n\n /** Событие изменения значения (`value`) в поле. */\n onValueChange?: (value: TValue) => void;\n\n /** Событие закрытия меню. */\n onClose?: () => void;\n\n /** Событие наведения мышкой (событие `onmouseenter`). Смотрите разницу с `onMouseOver` в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave). */\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие ухода мышки с объекта (событие `onmouseleave`). */\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие наведения мышкой (событие `onmouseover`). */\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие нажатия кнопки на клавиатуре. */\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Событие открытия меню. */\n onOpen?: () => void;\n\n /** Текст, который отображается если не введено никакое значение. */\n placeholder?: React.ReactNode;\n\n /** Отрисовывает элементы в списке. */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Отрисовывает выбранный элемент. */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Сравнивает `value` с элементом из `items`. */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n\n /** Отображает строчку поиска в списке значений. */\n search?: boolean;\n\n /** Задаёт значение. */\n value?: TValue;\n\n /** Объект с переменными темы. */\n theme?: ThemeIn | Theme;\n\n /** Ширина раскрывающегося списка. */\n width?: number | string;\n\n /** Меняет визуальное отображение поля на состояние предупреждения. Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */\n warning?: boolean;\n\n /** Стиль кнопки. Примеры стилей смотрите [в документации компонента Button](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_button-button--docs). */\n use?: ButtonUse;\n\n /** Размер раскрывающегося списка.\n * @default small\n */\n size?: SizeProp;\n\n /** HTML-событие `onfocus`. */\n onFocus?: React.FocusEventHandler<HTMLElement>;\n\n /** HTML-событие `onblur`. */\n onBlur?: React.FocusEventHandler<HTMLElement>;\n\n /** Текст заголовка списка в мобильной версии. */\n mobileMenuHeaderText?: string;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<unknown> {\n focus: (event?: unknown) => void;\n}\n\ntype DefaultProps<TValue, TItem> = Required<\n Pick<SelectProps<TValue, TItem>, 'renderValue' | 'renderItem' | 'areValuesEqual' | 'filterItem' | 'use'>\n>;\n\n/**\n * Раскрывающийся список позволяет выбрать значение из заранее известного набора вариантов.\n */\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n@withSize\n// Suggested solutions break current behavior\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n public static displayName = 'Select';\n\n public static defaultProps: DefaultProps<unknown, ReactNode | ReactPortal> = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = (): React.JSX.Element => <MenuSeparator />;\n\n public static staticElement = (\n element: React.ReactElement | (() => React.ReactElement),\n ): React.ReactElement | (() => React.ReactElement) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.staticElement(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private linkStyles!: ReturnType<typeof getLinkStyles>;\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private size!: SizeProp;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private menuId = SelectIds.menu + getRandomID();\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n this.globalObject.addEventListener?.('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n this.globalObject.removeEventListener?.('popstate', this.close);\n }\n }\n\n public render(): React.JSX.Element {\n this.linkStyles = getLinkStyles(this.emotion);\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = ThemeFactory.create(\n {\n menuOffsetY: theme.selectMenuOffsetY,\n },\n theme,\n );\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /** Открывает раскрывающийся список.\n * @public\n */\n public open = (): void => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /** Закрывает раскрывающийся список.\n * @public\n */\n public close = (): void => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /** Программно устанавливает фокус на кнопку.\n * Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.\n * @public\n */\n public focus = (): void => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const dataTid = this.getProps()['data-tid'] ?? SelectDataTids.root;\n const button = (\n <ThemeContext.Provider value={getSelectTheme(this.theme, this.props)}>\n {this.getButton(buttonParams)}\n </ThemeContext.Provider>\n );\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span\n data-tid={dataTid}\n className={this.cx({ [this.styles.root()]: true, [this.styles.rootMobile(this.theme)]: isMobile })}\n style={style}\n >\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n size: this.size,\n disabled: this.getProps().disabled,\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder ?? this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: SizeProp | undefined) {\n if (this.getProps().use === 'link') {\n return this.styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return this.styles.leftIconLarge(this.theme);\n case 'medium':\n return this.styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return this.styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n size: params.size,\n };\n const use = this.getProps().use;\n\n const labelProps = {\n 'data-tid': SelectDataTids.label,\n className: this.cx({\n [this.styles.label()]: use !== 'link',\n [this.styles.placeholder(this.theme)]: params.isPlaceholder,\n [this.styles.customUsePlaceholder()]: params.isPlaceholder && use !== 'default',\n [this.styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = use !== 'default';\n\n const icon = <ArrowDownIcon size={this.size} />;\n\n return (\n <Button {...buttonProps}>\n <div\n className={this.cx(this.styles.selectButtonContainer(), {\n [this.linkStyles.root(this.theme)]: use === 'link',\n })}\n >\n {this.props._icon && <div className={this.getLeftIconClass(this.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={this.cx(this.styles.arrowWrap(this.theme), {\n [this.styles.arrowDisabled(this.theme)]: this.props.disabled,\n [this.styles.customUseArrow()]: useIsCustom,\n })}\n >\n {icon}\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch() : null;\n\n const value = this.getValue();\n const { menuWidth, menuPos, menuAlign, positions } = this.getProps();\n\n return (\n <Popup\n opened\n hasShadow\n id={this.menuId}\n data-tid={SelectDataTids.menu}\n positions={positions ?? getMenuPositions(menuPos, menuAlign)}\n anchorElement={this.popupGetParent()}\n priority={ZIndex.priorities.PopupMenu}\n disablePortal={this.props.disablePortal}\n margin={parseInt(this.theme.menuOffsetY) - 1}\n width={menuWidth}\n minWidth={menuWidth === undefined ? '100%' : undefined}\n popupOffset={this.props.menuOffset}\n >\n <Menu\n hasMargin={false}\n ref={this.refMenu}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={menuAlign}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </Popup>\n );\n }\n\n private getSearch = () => {\n return (\n <div className={this.styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.debouncedFocusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getMobileSearch() : null;\n const value = this.getValue();\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getMobileSearch = () => {\n return (\n <Input\n autoFocus\n value={this.state.searchPattern}\n ref={this.debouncedFocusInput}\n onValueChange={this.handleSearch}\n width=\"100%\"\n />\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n const size = this.size;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile, size } as MenuItemProps);\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile, size } as MenuItemProps);\n }\n if (isReactUINode('MenuHeader', item)) {\n return React.cloneElement(item, { size } as MenuHeaderProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n size={this.size}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private popupGetParent = () => {\n return getRootNode(this);\n };\n\n // fix cases when an Input is rendered in portal\n // https://github.com/skbkontur/retail-ui/issues/1995\n private focusInput = (input: Input) => input?.focus();\n private debouncedFocusInput = debounce(this.focusInput);\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(0);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (!this.areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange?.(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual(value1, value2);\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement<any>, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n size: this.size,\n 'aria-describedby': this.props['aria-describedby'],\n 'aria-expanded': this.state.opened ? 'true' : 'false',\n 'aria-controls': this.menuId,\n 'aria-label': (buttonElement as React.ReactElement<any>).props['aria-label'] ?? this.props['aria-label'],\n })\n : buttonElement;\n };\n}\n\nfunction renderValue<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: unknown) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: string | React.ReactNode | (() => React.ReactNode) | number): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../components/Select/Select.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAE,KAAK,EAA2B,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,UAAU,GACX,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG3F,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,cAAc,WAAW,CAAC;AA4B1B,IAAM,iBAAiB,GAAG;IACxB,EAAE,EAAE,IAAI;IACR,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IAEb,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF,MAAM,CAAC,IAAM,SAAS,GAAG;IACvB,IAAI,EAAE,cAAc,CAAC,IAAI;CACjB,CAAC;AAyKX;;GAEG;AAQH;IAAqD,0BAAgE;IAFrH,6CAA6C;IAC7C,wDAAwD;IACxD;;QAyBS,WAAK,GAAwB;YAClC,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,KAAI,CAAC,KAAK,CAAC,YAAY;YAC9B,aAAa,EAAE,EAAE;SAClB,CAAC;QAYM,YAAM,GAAG,SAAS,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;QACxC,mBAAa,GAAiC,IAAI,CAAC;QACnD,cAAQ,GAAG,iBAAiB,CAAC,QAAM,CAAC,YAAY,CAAC,CAAC;QAgC1D;;WAEG;QACI,UAAI,GAAG;YACZ,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACvB,KAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEhC,IAAI,KAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBACtB,KAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF;;WAEG;QACI,WAAK,GAAG;YACb,IAAI,KAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACtB,KAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEpD,IAAI,KAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACvB,KAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF;;;WAGG;QACI,WAAK,GAAG;YACb,IAAI,KAAI,CAAC,aAAa,IAAI,KAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBACnD,KAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC;QA0DM,4BAAsB,GAAG;YACzB,IAAA,KAA2B,KAAI,CAAC,WAAW,EAAE,EAA3C,KAAK,WAAA,EAAE,aAAa,mBAAuB,CAAC;YAEpD,IAAM,YAAY,GAAiB;gBACjC,MAAM,EAAE,KAAI,CAAC,KAAK,CAAC,MAAM;gBACzB,KAAK,OAAA;gBACL,aAAa,eAAA;gBACb,OAAO,EAAE,KAAI,CAAC,MAAM;gBACpB,SAAS,EAAE,KAAI,CAAC,SAAS;gBACzB,IAAI,EAAE,KAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,KAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ;aACnC,CAAC;YAEF,OAAO,YAAY,CAAC;QACtB,CAAC,CAAC;QA6IM,eAAS,GAAG;YAClB,OAAO,CACL,6BAAK,SAAS,EAAE,KAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAI,CAAC,SAAS;gBAC7D,oBAAC,KAAK,IAAC,GAAG,EAAE,KAAI,CAAC,mBAAmB,EAAE,aAAa,EAAE,KAAI,CAAC,YAAY,EAAE,KAAK,EAAC,MAAM,GAAG,CACnF,CACP,CAAC;QACJ,CAAC,CAAC;QAoBM,qBAAe,GAAG;YACxB,OAAO,CACL,oBAAC,KAAK,IACJ,SAAS,QACT,KAAK,EAAE,KAAI,CAAC,KAAK,CAAC,aAAa,EAC/B,GAAG,EAAE,KAAI,CAAC,mBAAmB,EAC7B,aAAa,EAAE,KAAI,CAAC,YAAY,EAChC,KAAK,EAAC,MAAM,GACZ,CACH,CAAC;QACJ,CAAC,CAAC;QAEM,kBAAY,GAAG,UAAC,KAAuB;YAC7C,IAAM,QAAQ,GAAG,KAAI,CAAC,cAAc,CAAC;YACrC,IAAM,IAAI,GAAG,KAAI,CAAC,IAAI,CAAC;YAEvB,OAAO,KAAI,CAAC,QAAQ,CAClB,UAAC,MAAc,EAAE,IAAqC,EAAE,CAAS,EAAE,OAAkC;gBACnG,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrB,IAAM,OAAO,GAAG,IAAI,EAAE,CAAC;oBAEvB,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;wBAClC,OAAO,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,UAAA,EAAE,IAAI,MAAA,EAAmB,CAAC,CAAC;oBAClF,CAAC;oBAED,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/B,IAAI,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;wBACpC,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,UAAA,EAAE,IAAI,MAAA,EAAmB,CAAC,CAAC;oBAC/E,CAAC;oBACD,IAAI,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;wBACtC,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,MAAA,EAAqB,CAAC,CAAC;oBAC/D,CAAC;oBACD,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9C,CAAC;gBAED,OAAO,CACL,oBAAC,QAAQ,IACP,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,KAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAC7D,OAAO,EAAE,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAI,EAAE,MAAM,CAAC,EACvC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,KAAI,CAAC,IAAI,IAEd,KAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAChC,CACZ,CAAC;YACJ,CAAC,CACF,CAAC;QACJ,CAAC,CAAC;QAEM,oBAAc,GAAG;YACvB,OAAO,WAAW,CAAC,KAAI,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,gDAAgD;QAChD,qDAAqD;QAC7C,gBAAU,GAAG,UAAC,KAAY,IAAK,OAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,EAAd,CAAc,CAAC;QAC9C,yBAAmB,GAAG,QAAQ,CAAC,KAAI,CAAC,UAAU,CAAC,CAAC;QAEhD,aAAO,GAAG,UAAC,IAAU;YAC3B,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;QAEM,YAAM,GAAG;YACf,IAAI,KAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACtB,KAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,KAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QAEM,eAAS,GAAG,UAAC,CAAmC;YACtD,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACvB,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3C,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,KAAI,CAAC,IAAI,EAAE,CAAC;gBACd,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,WAAW,CAAC,CAAC,CAAC;wBACjB,KAAI,CAAC,KAAK,EAAE,CAAC;wBACb,KAAI,CAAC,KAAK,EAAE,CAAC;wBACb,MAAM;oBACR,KAAK,YAAY,CAAC,CAAC,CAAC;wBAClB,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,IAAI,KAAI,CAAC,IAAI,EAAE,CAAC;4BACd,KAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;wBACjB,CAAC;wBACD,MAAM;oBACR,KAAK,cAAc,CAAC,CAAC,CAAC;wBACpB,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,IAAI,KAAI,CAAC,IAAI,EAAE,CAAC;4BACd,KAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;wBACnB,CAAC;wBACD,MAAM;oBACR,KAAK,UAAU,CAAC,CAAC,CAAC;wBAChB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,8BAA8B;wBAClD,IAAI,KAAI,CAAC,IAAI,EAAE,CAAC;4BACd,KAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACrB,CAAC;wBACD,MAAM;gBACV,CAAC;YACH,CAAC;YACD,IAAI,KAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACzB,KAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;QAEM,kBAAY,GAAG,UAAC,KAAa;;YACnC,KAAI,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;YACxC,MAAA,KAAI,CAAC,IAAI,0CAAE,aAAa,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC;QA4DM,eAAS,GAAG,UAAC,OAAqC;YACxD,KAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC/B,CAAC,CAAC;QAEM,eAAS,GAAG,UAAC,YAA0B;;YAC7C,IAAM,MAAM,GAAG,KAAI,CAAC,KAAK,CAAC,aAAa;gBACrC,CAAC,CAAC,KAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC;gBACxC,CAAC,CAAC,KAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;YAE3C,IAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAElD,OAAO,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC;gBACxC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,aAAwC,EAAE;oBAC3D,GAAG,EAAE,KAAI,CAAC,SAAS;oBACnB,OAAO,EAAE,KAAI,CAAC,KAAK,CAAC,OAAO;oBAC3B,MAAM,EAAE,KAAI,CAAC,KAAK,CAAC,MAAM;oBACzB,IAAI,EAAE,KAAI,CAAC,IAAI;oBACf,kBAAkB,EAAE,KAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;oBAClD,eAAe,EAAE,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;oBACrD,eAAe,EAAE,KAAI,CAAC,MAAM;oBAC5B,YAAY,EAAE,MAAC,aAAyC,CAAC,KAAK,CAAC,YAAY,CAAC,mCAAI,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC;iBACzG,CAAC;gBACJ,CAAC,CAAC,aAAa,CAAC;QACpB,CAAC,CAAC;;IACJ,CAAC;eAniBY,MAAM;IA+CV,mCAAkB,GAAzB,UAA0B,UAAsC,EAAE,SAA8B;;QAC9F,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3C,MAAA,MAAA,IAAI,CAAC,YAAY,EAAC,gBAAgB,mDAAG,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3C,MAAA,MAAA,IAAI,CAAC,YAAY,EAAC,mBAAmB,mDAAG,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAEM,uBAAM,GAAb;QAAA,iBAiBC;QAhBC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtC,OAAO,CACL,oBAAC,YAAY,CAAC,QAAQ,QACnB,UAAC,KAAK;YACL,KAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAC9B;gBACE,WAAW,EAAE,KAAK,CAAC,iBAAiB;aACrC,EACD,KAAK,CACN,CAAC;YACF,OAAO,oBAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAI,CAAC,KAAK,IAAG,KAAI,CAAC,UAAU,EAAE,CAAyB,CAAC;QAC/F,CAAC,CACqB,CACzB,CAAC;IACJ,CAAC;IAsCO,gCAAe,GAAvB;QACE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,2BAAU,GAAlB;;;QACE,IAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACnD,IAAM,OAAO,GAAG,MAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,mCAAI,cAAc,CAAC,IAAI,CAAC;QACnE,IAAM,MAAM,GAAG,CACb,oBAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IACjE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CACP,CACzB,CAAC;QAEF,IAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QAErC,IAAM,KAAK,GAAG;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YACvB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS;SAC3C,CAAC;QAEF,IAAM,IAAI,GAAG,CACX,0CACY,OAAO,EACjB,SAAS,EAAE,IAAI,CAAC,EAAE,WAAG,GAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAG,IAAI,EAAE,GAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAG,QAAQ,MAAG,EAClG,KAAK,EAAE,KAAK;YAEX,MAAM;YACN,IAAI,CAAC,eAAe,EAAE,CAClB,CACR,CAAC;QAEF,OAAO,CACL,oBAAC,aAAa,aAAC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAM,IAAI,CAAC,KAAK;YAC1D,oBAAC,WAAW,IACV,cAAc,EAAE,IAAI,CAAC,KAAK,EAC1B,cAAc,EAAE,IAAI,CAAC,KAAK,EAC1B,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAE3C,IAAI,CACO,CACA,CACjB,CAAC;IACJ,CAAC;IAkBO,4BAAW,GAAnB;;QACE,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;gBAC/C,aAAa,EAAE,KAAK;aACrB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK,EAAE,kCAAO,MAAA,IAAI,CAAC,KAAK,CAAC,WAAW,mCAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,WAAW,CAAQ;YACxE,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IAEO,iCAAgB,GAAxB,UAAyB,IAA0B;QACjD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QAED,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/C,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,KAAK,OAAO,CAAC;YACb;gBACE,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,oCAAmB,GAA3B,UAA4B,MAAoB;;QAC9C,IAAM,WAAW,yBACZ,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAC7C,KAAK,EAAE,MAA0C,EACjD,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,SAAS,EAAE,MAAM,CAAC,SAAS,EAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,IAAI,EAAE,MAAM,CAAC,IAAI,GAClB,CAAC;QACF,IAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC;QAEhC,IAAM,UAAU,GAAG;YACjB,UAAU,EAAE,cAAc,CAAC,KAAK;YAChC,SAAS,EAAE,IAAI,CAAC,EAAE;gBAChB,GAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAG,GAAG,KAAK,MAAM;gBACrC,GAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAG,MAAM,CAAC,aAAa;gBAC3D,GAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAG,MAAM,CAAC,aAAa,IAAI,GAAG,KAAK,SAAS;gBAC/E,GAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ;oBAC1F;YACF,KAAK,EAAE;gBACL,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE;aACtC;SACF,CAAC;QAEF,IAAM,WAAW,GAAG,GAAG,KAAK,SAAS,CAAC;QAEtC,IAAM,IAAI,GAAG,oBAAC,aAAa,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI,CAAC;QAEhD,OAAO,CACL,oBAAC,MAAM,eAAK,WAAW;YACrB,6BACE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;oBACpD,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAG,GAAG,KAAK,MAAM;wBAClD;gBAED,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,6BAAK,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAO;gBAC/F,yCAAU,UAAU,GAAG,MAAM,CAAC,KAAK,CAAQ;gBAE3C,6BACE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;wBAClD,GAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAG,IAAI,CAAC,KAAK,CAAC,QAAQ;wBAC5D,GAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAG,WAAW;4BAC3C,IAED,IAAI,CACD,CACF,CACC,CACV,CAAC;IACJ,CAAC;IAEO,iCAAgB,GAAxB;QAAA,iBAeC;QAdC,IAAM,eAAe,GAAG;YACtB,QAAQ,KAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,OAAO;oBACV,OAAO,KAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;gBACvC,KAAK,QAAQ;oBACX,OAAO,KAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBACxC,KAAK,OAAO,CAAC;gBACb;oBACE,OAAO,KAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;YACzC,CAAC;QACH,CAAC,CAAC;QACF,IAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC;QAE5D,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEO,2BAAU,GAAlB;QACE,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3D,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,IAAA,KAAmE,IAAI,CAAC,QAAQ,EAAE,EAAhF,SAAS,eAAA,EAAE,OAAO,aAAA,EAAE,SAAS,eAAA,EAAE,SAAS,eAAA,EAAE,kBAAkB,wBAAoB,CAAC;QAEzF,OAAO,CACL,oBAAC,KAAK,IACJ,MAAM,QACN,SAAS,QACT,EAAE,EAAE,IAAI,CAAC,MAAM,cACL,cAAc,CAAC,IAAI,EAC7B,SAAS,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,EAC5D,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,EACpC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,EACrC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EACvC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAC5C,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACtD,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;YAElC,oBAAC,IAAI,IACH,SAAS,EAAE,KAAK,EAChB,GAAG,EAAE,IAAI,CAAC,OAAO,EACjB,WAAW,EAAE,IAAI,CAAC,KAAK,EACvB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EACnC,KAAK,EAAE,SAAS,EAChB,kBAAkB,EAAE,kBAAkB;gBAErC,MAAM;gBACN,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CACpB,CACD,CACT,CAAC;IACJ,CAAC;IAUO,iCAAgB,GAAxB;QACE,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9B,OAAO,CACL,oBAAC,WAAW,IACV,oBAAoB,EAAE,MAAM,EAC5B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,EACxC,cAAc,EAAE,IAAI,CAAC,KAAK,EAC1B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YAEzB,oBAAC,IAAI,IAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,sBAAsB,QAAC,SAAS,EAAE,MAAM,IACpE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CACpB,CACK,CACf,CAAC;IACJ,CAAC;IAuHO,uBAAM,GAAd,UAAe,KAAa;;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;YACjD,MAAA,MAAA,IAAI,CAAC,KAAK,EAAC,aAAa,mDAAG,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,yBAAQ,GAAhB;QACE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAEO,yBAAQ,GAAhB,UAAiB,EAAoF;QAC3F,IAAA,KAAK,GAAK,IAAI,CAAC,KAAK,MAAf,CAAgB;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QAEnF,IAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAoB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE,CAAC;YAAvB,IAAM,KAAK,cAAA;YACR,IAAA,KAAyB,cAAc,CAAC,KAAc,CAAC,EAAtD,KAAK,QAAA,EAAE,IAAI,QAAA,EAAE,OAAO,QAAkC,CAAC;YAE9D,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;gBACjE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC7C,EAAE,KAAK,CAAC;YACV,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,+BAAc,GAAtB,UAAuB,KAAwB;QAC7C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAErC,KAAoB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE,CAAC;YAAvB,IAAM,KAAK,cAAA;YACR,IAAA,KAAoB,cAAc,CAAC,KAAK,CAAC,EAAxC,SAAS,QAAA,EAAE,IAAI,QAAyB,CAAC;YAEhD,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,+BAAc,GAAtB,UAAuB,MAAwB,EAAE,MAAwB;QACvE,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1G,CAAC;;IAxgBa,0BAAmB,GAAG,QAAQ,AAAX,CAAY;IAC/B,kBAAW,GAAG,QAAQ,AAAX,CAAY;IAEvB,mBAAY,GAAmD;QAC3E,WAAW,aAAA;QACX,UAAU,YAAA;QACV,cAAc,gBAAA;QACd,UAAU,YAAA;QACV,GAAG,EAAE,SAAS;KACf,AANyB,CAMxB;IAEY,WAAI,GAAG,IAAI,AAAP,CAAQ;IACZ,UAAG,GAAG,cAAyB,OAAA,oBAAC,aAAa,OAAG,EAAjB,CAAiB,AAA7C,CAA8C;IAEjD,oBAAa,GAAG,UAC5B,OAAwD;QAExD,SAAS,CACP,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,OAAO,OAAO,KAAK,UAAU,EAC9D,4EAA4E,CAC7E,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC,AAR0B,CAQzB;IAvBS,MAAM;QAPlB,qBAAqB;QACrB,gBAAgB;QAChB,QAAQ;QACR,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC;QACpC,QAAQ;QACT,6CAA6C;QAC7C,wDAAwD;OAC3C,MAAM,CAmiBlB;IAAD,aAAC;CAAA,AAniBD,CAAqD,KAAK,CAAC,SAAS,GAmiBnE;SAniBY,MAAM;AAqiBnB,SAAS,WAAW,CAAgB,KAAa,EAAE,IAAqB;IACtE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAgB,KAAa,EAAE,IAAY;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAS,MAAc,EAAE,MAAc;IAC5D,OAAO,MAAM,KAAK,MAAM,CAAC;AAC3B,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,IAAM,eAAe,GAAG,UAAC,IAAiE;IACxF,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,SAAS,UAAU,CAAS,KAAa,EAAE,IAAS,EAAE,OAAe;IACnE,IAAI,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEvC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport invariant from 'invariant';\nimport debounce from 'lodash.debounce';\nimport type { AriaAttributes, HTMLAttributes, ReactNode, ReactPortal } from 'react';\nimport React from 'react';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { Menu } from '../../internal/Menu/index.js';\nimport { MobilePopup } from '../../internal/MobilePopup/index.js';\nimport { Popup, type PopupPositionsType } from '../../internal/Popup/index.js';\nimport { RenderLayer } from '../../internal/RenderLayer/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers.js';\nimport { filterProps } from '../../lib/filterProps.js';\nimport { getMenuPositions } from '../../lib/getMenuPositions.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { locale } from '../../lib/locale/decorators.js';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { Theme, ThemeIn } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { getRandomID, isFunction, isNonNullable, isReactUINode } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { ButtonProps, ButtonUse } from '../Button/index.js';\nimport { Button } from '../Button/index.js';\nimport { Input } from '../Input/index.js';\nimport { getStyles as getLinkStyles } from '../Link/Link.styles.js';\nimport type { MenuHeaderProps } from '../MenuHeader/index.js';\nimport { MenuItem } from '../MenuItem/index.js';\nimport type { MenuItemProps } from '../MenuItem/index.js';\nimport { MenuSeparator } from '../MenuSeparator/index.js';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator.js';\nimport { ArrowDownIcon } from './ArrowDownIcon.js';\nimport { Item } from './Item.js';\nimport type { SelectLocale } from './locale/index.js';\nimport { SelectLocaleHelper } from './locale/index.js';\nimport { getStyles } from './Select.styles.js';\nimport { getSelectTheme } from './selectTheme.js';\nimport { SelectDataTids } from './tids.js';\n\nexport * from './tids.js';\n\nexport interface ButtonParams extends Pick<\n AriaAttributes,\n 'aria-describedby' | 'aria-controls' | 'aria-label' | 'aria-expanded'\n> {\n /** Блокирует компонент. */\n disabled?: boolean;\n\n /** Задаёт лейбл. */\n label: React.ReactNode;\n\n /** Событие нажатия на компонент. */\n onClick: () => void;\n\n /** Событие нажатия кнопки на клавиатуре. */\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Определяет, открыто ли выпадающее меню. */\n opened: boolean;\n\n /** Определяет, есть ли Placeholder. */\n isPlaceholder: boolean;\n\n /** Задает размер контрола. */\n size: SizeProp;\n}\n\nconst PASS_BUTTON_PROPS = {\n id: true,\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n corners: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport const SelectIds = {\n menu: SelectDataTids.menu,\n} as const;\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | TValue\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem>\n extends\n CommonProps,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'> {\n /** @ignore */\n _icon?: React.ReactNode;\n\n /** Отрисовывает кнопку. */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n\n /** @ignore */\n corners?: React.CSSProperties;\n\n /** Значение по умолчанию. */\n defaultValue?: TValue;\n\n /** Смещение списка относительно поля по горизонтали. При нуле смещения нет, при положительном значении — список сдвигается вправо, при отрицательном — влево.\n * @default 0\n */\n menuOffset?: number;\n\n /** По умолчанию список рендерится через [паттерн Portal](https://react.dev/reference/react-dom/createPortal). Проп отключает использование Portal и список рендерится как обычный блок с абсолютным позиционированием внутри компонента. */\n disablePortal?: boolean;\n\n /** Блокирует раскрывающийся список. */\n disabled?: boolean;\n\n /** Переводит компонент в состояние ошибки. */\n error?: boolean;\n\n /** Отфильтровывает элементы по заданному паттерну. */\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n\n /** Набор значений. Поддерживаются любые перечисляемые типы, в том числе `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом:\n * - если элемент — это массив, то первый элемент является значением, второй — отображается в списке, а третий – комментарий;\n * - если элемент не является массивом, то он используется и для отображения, и для значения.\n *\n * Для вставки разделителя между значениями можно использовать `Select.SEP`.\n *\n * @example\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.staticElement(() => <div>My Element</div>)]}\n * />\n * ```\n * @example\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ``` */\n items?: Array<SelectItem<TValue, TItem>>;\n\n /** Максимальная высота раскрывающегося списка. */\n maxMenuHeight?: number;\n\n /** Максимальная ширина кнопки. */\n maxWidth?: React.CSSProperties['maxWidth'];\n\n /** Список значений, определяющих расположение списка относительно кнопки. Если во всех позициях список выходит за пределы `viewport`, будет использована первая из этого списка.\n *\n * `\"top left\"`, `\"top center\"`, `\"top right\"`, `\"right top\"`, `\"right middle\"`, `\"right bottom\"`, `\"bottom left\"`, `\"bottom center\"`, `\"bottom right\"`, `\"left top\"`, `\"left middle\"`, `\"left bottom\"`.\n * @default ['bottom left', 'bottom right', 'top left', 'top right'] */\n positions?: PopupPositionsType[];\n\n /** Фиксирует расположение списка относительно кнопки. */\n menuPos?: 'top' | 'bottom' | 'middle';\n\n /** Выравнивание списка. */\n menuAlign?: 'left' | 'right';\n\n /** Ширина списка. */\n menuWidth?: React.CSSProperties['width'];\n\n /** Событие изменения значения (`value`) в поле. */\n onValueChange?: (value: TValue) => void;\n\n /** Событие закрытия меню. */\n onClose?: () => void;\n\n /** Событие наведения мышкой (событие `onmouseenter`). Смотрите разницу с `onMouseOver` в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave). */\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие ухода мышки с объекта (событие `onmouseleave`). */\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие наведения мышкой (событие `onmouseover`). */\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие нажатия кнопки на клавиатуре. */\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Событие открытия меню. */\n onOpen?: () => void;\n\n /** Текст, который отображается если не введено никакое значение. */\n placeholder?: React.ReactNode;\n\n /** Отрисовывает элементы в списке. */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Отрисовывает выбранный элемент. */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Сравнивает `value` с элементом из `items`. */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n\n /** Отображает строчку поиска в списке значений. */\n search?: boolean;\n\n /** Задаёт значение. */\n value?: TValue;\n\n /** Объект с переменными темы. */\n theme?: ThemeIn | Theme;\n\n /** Ширина раскрывающегося списка. */\n width?: number | string;\n\n /** Переводит компонент в состояние предупреждения. */\n warning?: boolean;\n\n /** Стиль кнопки. Примеры стилей смотрите [в документации компонента Button](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_button-button--docs). */\n use?: ButtonUse;\n\n /** Размер раскрывающегося списка.\n * @default small\n */\n size?: SizeProp;\n\n /** HTML-событие `onfocus`. */\n onFocus?: React.FocusEventHandler<HTMLElement>;\n\n /** HTML-событие `onblur`. */\n onBlur?: React.FocusEventHandler<HTMLElement>;\n\n /** Текст заголовка списка в мобильной версии. */\n mobileMenuHeaderText?: string;\n\n /** Отключает выравнивание текста элементов в списке относительно иконок в других элементах. */\n preventIconsOffset?: boolean;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<unknown> {\n focus: (event?: unknown) => void;\n}\n\ntype DefaultProps<TValue, TItem> = Required<\n Pick<SelectProps<TValue, TItem>, 'renderValue' | 'renderItem' | 'areValuesEqual' | 'filterItem' | 'use'>\n>;\n\n/**\n * Раскрывающийся список позволяет выбрать значение из заранее известного набора вариантов.\n */\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n@withSize\n// Suggested solutions break current behavior\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n public static displayName = 'Select';\n\n public static defaultProps: DefaultProps<unknown, ReactNode | ReactPortal> = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n };\n\n public static Item = Item;\n public static SEP = (): React.JSX.Element => <MenuSeparator />;\n\n public static staticElement = (\n element: React.ReactElement | (() => React.ReactElement),\n ): React.ReactElement | (() => React.ReactElement) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.staticElement(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private linkStyles!: ReturnType<typeof getLinkStyles>;\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private size!: SizeProp;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private menuId = SelectIds.menu + getRandomID();\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n this.globalObject.addEventListener?.('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n this.globalObject.removeEventListener?.('popstate', this.close);\n }\n }\n\n public render(): React.JSX.Element {\n this.linkStyles = getLinkStyles(this.emotion);\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = ThemeFactory.create(\n {\n menuOffsetY: theme.selectMenuOffsetY,\n },\n theme,\n );\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /** Открывает раскрывающийся список.\n * @public\n */\n public open = (): void => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /** Закрывает раскрывающийся список.\n * @public\n */\n public close = (): void => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /** Программно устанавливает фокус на кнопку.\n * Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.\n * @public\n */\n public focus = (): void => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const dataTid = this.getProps()['data-tid'] ?? SelectDataTids.root;\n const button = (\n <ThemeContext.Provider value={getSelectTheme(this.theme, this.props)}>\n {this.getButton(buttonParams)}\n </ThemeContext.Provider>\n );\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span\n data-tid={dataTid}\n className={this.cx({ [this.styles.root()]: true, [this.styles.rootMobile(this.theme)]: isMobile })}\n style={style}\n >\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n size: this.size,\n disabled: this.getProps().disabled,\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder ?? this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: SizeProp | undefined) {\n if (this.getProps().use === 'link') {\n return this.styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return this.styles.leftIconLarge(this.theme);\n case 'medium':\n return this.styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return this.styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n size: params.size,\n };\n const use = this.getProps().use;\n\n const labelProps = {\n 'data-tid': SelectDataTids.label,\n className: this.cx({\n [this.styles.label()]: use !== 'link',\n [this.styles.placeholder(this.theme)]: params.isPlaceholder,\n [this.styles.customUsePlaceholder()]: params.isPlaceholder && use !== 'default',\n [this.styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = use !== 'default';\n\n const icon = <ArrowDownIcon size={this.size} />;\n\n return (\n <Button {...buttonProps}>\n <div\n className={this.cx(this.styles.selectButtonContainer(), {\n [this.linkStyles.root(this.theme)]: use === 'link',\n })}\n >\n {this.props._icon && <div className={this.getLeftIconClass(this.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={this.cx(this.styles.arrowWrap(this.theme), {\n [this.styles.arrowDisabled(this.theme)]: this.props.disabled,\n [this.styles.customUseArrow()]: useIsCustom,\n })}\n >\n {icon}\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch() : null;\n\n const value = this.getValue();\n const { menuWidth, menuPos, menuAlign, positions, preventIconsOffset } = this.getProps();\n\n return (\n <Popup\n opened\n hasShadow\n id={this.menuId}\n data-tid={SelectDataTids.menu}\n positions={positions ?? getMenuPositions(menuPos, menuAlign)}\n anchorElement={this.popupGetParent()}\n priority={ZIndex.priorities.PopupMenu}\n disablePortal={this.props.disablePortal}\n margin={parseInt(this.theme.menuOffsetY) - 1}\n width={menuWidth}\n minWidth={menuWidth === undefined ? '100%' : undefined}\n popupOffset={this.props.menuOffset}\n >\n <Menu\n hasMargin={false}\n ref={this.refMenu}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={menuAlign}\n preventIconsOffset={preventIconsOffset}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </Popup>\n );\n }\n\n private getSearch = () => {\n return (\n <div className={this.styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.debouncedFocusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getMobileSearch() : null;\n const value = this.getValue();\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getMobileSearch = () => {\n return (\n <Input\n autoFocus\n value={this.state.searchPattern}\n ref={this.debouncedFocusInput}\n onValueChange={this.handleSearch}\n width=\"100%\"\n />\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n const size = this.size;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile, size } as MenuItemProps);\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile, size } as MenuItemProps);\n }\n if (isReactUINode('MenuHeader', item)) {\n return React.cloneElement(item, { size } as MenuHeaderProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n size={this.size}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private popupGetParent = () => {\n return getRootNode(this);\n };\n\n // fix cases when an Input is rendered in portal\n // https://github.com/skbkontur/retail-ui/issues/1995\n private focusInput = (input: Input) => input?.focus();\n private debouncedFocusInput = debounce(this.focusInput);\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(0);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (!this.areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange?.(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual(value1, value2);\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement<any>, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n size: this.size,\n 'aria-describedby': this.props['aria-describedby'],\n 'aria-expanded': this.state.opened ? 'true' : 'false',\n 'aria-controls': this.menuId,\n 'aria-label': (buttonElement as React.ReactElement<any>).props['aria-label'] ?? this.props['aria-label'],\n })\n : buttonElement;\n };\n}\n\nfunction renderValue<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: unknown) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: string | React.ReactNode | (() => React.ReactNode) | number): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
|
|
@@ -2,13 +2,8 @@ import React from 'react';
|
|
|
2
2
|
import type { ToastClose, ToastProps, ToastPushApi } from '../Toast/index.js';
|
|
3
3
|
import { Toast } from '../Toast/index.js';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Короткое немодальное уведомление, которое сообщает пользователю о результате выполнения его команды.
|
|
6
6
|
* Результат может быть положительным, отрицательным или нейтральным.
|
|
7
|
-
*
|
|
8
|
-
* Позволяет вызывать тосты с помощью статических методов.
|
|
9
|
-
*
|
|
10
|
-
* ##### Особенности компонента SingleToast
|
|
11
|
-
* Для корректной работы `<SingleToast />` должен быть отрисован только **один раз** на странице. После чего его можно вызывать из любого места приложения методом `SingleToast.push()`. Однако, переданные в компонент пропсы, такие как `theme`, `onPush` и остальные, будут применяться ко всем вызовам.
|
|
12
7
|
*/
|
|
13
8
|
export declare class SingleToast extends React.Component<ToastProps> {
|
|
14
9
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -29,13 +29,8 @@ import ReactDOM from 'react-dom';
|
|
|
29
29
|
import { REACT_MAJOR_VERSION } from '../../lib/react-is.js';
|
|
30
30
|
import { Toast } from '../Toast/index.js';
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Короткое немодальное уведомление, которое сообщает пользователю о результате выполнения его команды.
|
|
33
33
|
* Результат может быть положительным, отрицательным или нейтральным.
|
|
34
|
-
*
|
|
35
|
-
* Позволяет вызывать тосты с помощью статических методов.
|
|
36
|
-
*
|
|
37
|
-
* ##### Особенности компонента SingleToast
|
|
38
|
-
* Для корректной работы `<SingleToast />` должен быть отрисован только **один раз** на странице. После чего его можно вызывать из любого места приложения методом `SingleToast.push()`. Однако, переданные в компонент пропсы, такие как `theme`, `onPush` и остальные, будут применяться ко всем вызовам.
|
|
39
34
|
*/
|
|
40
35
|
var SingleToast = /** @class */ (function (_super) {
|
|
41
36
|
__extends(SingleToast, _super);
|