@ozen-ui/kit 0.32.2 → 0.34.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/Autocomplete/package.json +5 -0
- package/__inner__/cjs/components/Autocomplete/Autocomplete.css +46 -0
- package/__inner__/cjs/components/Autocomplete/Autocomplete.d.ts +4 -0
- package/__inner__/cjs/components/Autocomplete/Autocomplete.js +202 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteLoading/AutocompleteLoading.d.ts +6 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteLoading/AutocompleteLoading.js +23 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteLoading/index.d.ts +1 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteLoading/index.js +4 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteNoOptions/AutocompleteNoOptions.d.ts +6 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteNoOptions/AutocompleteNoOptions.js +17 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteNoOptions/index.d.ts +1 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteNoOptions/index.js +4 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteRenderRight/AutocompleteRenderRight.d.ts +10 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteRenderRight/AutocompleteRenderRight.js +26 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteRenderRight/index.d.ts +1 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteRenderRight/index.js +4 -0
- package/__inner__/cjs/components/Autocomplete/components/index.d.ts +3 -0
- package/__inner__/cjs/components/Autocomplete/components/index.js +6 -0
- package/__inner__/cjs/components/Autocomplete/constants.d.ts +10 -0
- package/__inner__/cjs/components/Autocomplete/constants.js +13 -0
- package/__inner__/cjs/components/Autocomplete/helper.d.ts +166 -0
- package/__inner__/cjs/components/Autocomplete/helper.js +14 -0
- package/__inner__/cjs/components/Autocomplete/index.d.ts +2 -0
- package/__inner__/cjs/components/Autocomplete/index.js +5 -0
- package/__inner__/cjs/components/Autocomplete/types.d.ts +105 -0
- package/__inner__/cjs/components/Autocomplete/types.js +2 -0
- package/__inner__/cjs/components/DataList/DataList.js +1 -1
- package/__inner__/cjs/components/DataList/components/DataListOption/DataListOption.css +10 -2
- package/__inner__/cjs/components/DataList/helpers/useDataListNavigation.js +4 -12
- package/__inner__/cjs/components/List/List.css +5 -0
- package/__inner__/cjs/components/List/List.js +2 -2
- package/__inner__/cjs/components/List/constants.d.ts +1 -0
- package/__inner__/cjs/components/List/constants.js +2 -1
- package/__inner__/cjs/components/List/types.d.ts +2 -0
- package/__inner__/cjs/components/Popover/Popover.js +8 -7
- package/__inner__/cjs/components/Popover/constants.d.ts +2 -0
- package/__inner__/cjs/components/Popover/constants.js +3 -1
- package/__inner__/cjs/components/Popover/types.d.ts +6 -0
- package/__inner__/cjs/components/Popover/types.js +2 -1
- package/__inner__/cjs/components/ThemeProvider/types.d.ts +2 -0
- package/__inner__/cjs/components/Tooltip/Tooltip.js +1 -1
- package/__inner__/cjs/hooks/useEventListener/useEventListener.js +2 -4
- package/__inner__/cjs/hooks/useHover/useHover.d.ts +2 -2
- package/__inner__/cjs/hooks/useHover/useHover.js +2 -2
- package/__inner__/cjs/hooks/useMutableRef/index.d.ts +1 -0
- package/__inner__/cjs/hooks/useMutableRef/index.js +4 -0
- package/__inner__/cjs/hooks/useMutableRef/useMutableRef.d.ts +2 -0
- package/__inner__/cjs/hooks/useMutableRef/useMutableRef.js +10 -0
- package/__inner__/cjs/locale/locale.js +21 -0
- package/__inner__/esm/components/Autocomplete/Autocomplete.css +46 -0
- package/__inner__/esm/components/Autocomplete/Autocomplete.d.ts +4 -0
- package/__inner__/esm/components/Autocomplete/Autocomplete.js +199 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteLoading/AutocompleteLoading.d.ts +6 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteLoading/AutocompleteLoading.js +18 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteLoading/index.d.ts +1 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteLoading/index.js +1 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteNoOptions/AutocompleteNoOptions.d.ts +6 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteNoOptions/AutocompleteNoOptions.js +12 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteNoOptions/index.d.ts +1 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteNoOptions/index.js +1 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteRenderRight/AutocompleteRenderRight.d.ts +10 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteRenderRight/AutocompleteRenderRight.js +22 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteRenderRight/index.d.ts +1 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteRenderRight/index.js +1 -0
- package/__inner__/esm/components/Autocomplete/components/index.d.ts +3 -0
- package/__inner__/esm/components/Autocomplete/components/index.js +3 -0
- package/__inner__/esm/components/Autocomplete/constants.d.ts +10 -0
- package/__inner__/esm/components/Autocomplete/constants.js +10 -0
- package/__inner__/esm/components/Autocomplete/helper.d.ts +166 -0
- package/__inner__/esm/components/Autocomplete/helper.js +7 -0
- package/__inner__/esm/components/Autocomplete/index.d.ts +2 -0
- package/__inner__/esm/components/Autocomplete/index.js +2 -0
- package/__inner__/esm/components/Autocomplete/types.d.ts +105 -0
- package/__inner__/esm/components/Autocomplete/types.js +1 -0
- package/__inner__/esm/components/DataList/DataList.js +1 -1
- package/__inner__/esm/components/DataList/components/DataListOption/DataListOption.css +10 -2
- package/__inner__/esm/components/DataList/helpers/useDataListNavigation.js +5 -13
- package/__inner__/esm/components/List/List.css +5 -0
- package/__inner__/esm/components/List/List.js +3 -3
- package/__inner__/esm/components/List/constants.d.ts +1 -0
- package/__inner__/esm/components/List/constants.js +1 -0
- package/__inner__/esm/components/List/types.d.ts +2 -0
- package/__inner__/esm/components/Popover/Popover.js +9 -8
- package/__inner__/esm/components/Popover/constants.d.ts +2 -0
- package/__inner__/esm/components/Popover/constants.js +2 -0
- package/__inner__/esm/components/Popover/types.d.ts +6 -0
- package/__inner__/esm/components/Popover/types.js +1 -0
- package/__inner__/esm/components/ThemeProvider/types.d.ts +2 -0
- package/__inner__/esm/components/Tooltip/Tooltip.js +1 -1
- package/__inner__/esm/hooks/useEventListener/useEventListener.js +3 -5
- package/__inner__/esm/hooks/useHover/useHover.d.ts +2 -2
- package/__inner__/esm/hooks/useHover/useHover.js +2 -2
- package/__inner__/esm/hooks/useMutableRef/index.d.ts +1 -0
- package/__inner__/esm/hooks/useMutableRef/index.js +1 -0
- package/__inner__/esm/hooks/useMutableRef/useMutableRef.d.ts +2 -0
- package/__inner__/esm/hooks/useMutableRef/useMutableRef.js +6 -0
- package/__inner__/esm/locale/locale.js +21 -0
- package/package.json +1 -1
- package/useMutableRef/package.json +5 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { SyntheticEvent, ChangeEvent, ReactElement, ReactNode } from 'react';
|
|
2
|
+
import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
|
|
3
|
+
import type { DataListBaseProps } from '../DataList';
|
|
4
|
+
import type { InputProps } from '../Input';
|
|
5
|
+
export type AutocompleteRenderOptionProps<OPTION> = {
|
|
6
|
+
option: OPTION;
|
|
7
|
+
selected: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type AutocompletePropValue<OPTION> = OPTION | null | undefined;
|
|
10
|
+
export type AutocompletePropGetOptionLabel<OPTION> = (option: OPTION) => string;
|
|
11
|
+
export type AutocompletePropGetOptionKey<OPTION> = (option: OPTION) => string | number;
|
|
12
|
+
export type AutocompletePropRenderValue<OPTION> = (value: OPTION) => ReactNode | null;
|
|
13
|
+
export type AutocompletePropGetOptionDisabled<OPTION> = (option: OPTION) => boolean | undefined;
|
|
14
|
+
export type AutocompletePropRenderOption<OPTION> = (props: AutocompleteRenderOptionProps<OPTION>) => ReactElement | null;
|
|
15
|
+
export type AutocompleteDefaultOption = {
|
|
16
|
+
id: string | number;
|
|
17
|
+
label: string;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
};
|
|
20
|
+
export type AutocompleteSearchFunction<OPTION> = (options: OPTION[], searchValue: string) => OPTION[];
|
|
21
|
+
export type AutocompleteRenderInput = (props: InputProps) => ReactNode;
|
|
22
|
+
type AutocompleteOpenControlledProps = {
|
|
23
|
+
/** Текущее состояние списка. Если `true`, список отображается. */
|
|
24
|
+
open?: boolean;
|
|
25
|
+
/** Состояние открытие по умолчанию (неконтролируемый компонент) */
|
|
26
|
+
defaultOpen?: never;
|
|
27
|
+
};
|
|
28
|
+
type AutocompleteOpenUncontrolledProps = {
|
|
29
|
+
/** Текущее состояние списка. Если `true`, список отображается. */
|
|
30
|
+
open?: never;
|
|
31
|
+
/** Состояние открытие по умолчанию (неконтролируемый компонент) */
|
|
32
|
+
defaultOpen?: boolean;
|
|
33
|
+
};
|
|
34
|
+
type AutocompleteInputProps = Pick<InputProps, 'placeholder' | 'autoFocus' | 'fullWidth' | 'disabled' | 'label' | 'required' | 'style' | 'error' | 'hint' | 'renderLeft' | 'className' | 'inputProps' | 'onKeyDown'>;
|
|
35
|
+
type AutocompleteDataListProps = Partial<Omit<DataListBaseProps, 'onClose' | 'open' | 'anchorRef' | 'multiple' | 'selected' | 'onSelect'>>;
|
|
36
|
+
export type AutocompleteProps<OPTION = AutocompleteDefaultOption> = {
|
|
37
|
+
/** Список вариантов выбора (опции) */
|
|
38
|
+
options: OPTION[];
|
|
39
|
+
/** Размер */
|
|
40
|
+
size?: FormElementSizeVariant;
|
|
41
|
+
/** Выбранное значение опции */
|
|
42
|
+
value?: AutocompletePropValue<OPTION>;
|
|
43
|
+
/** Выбранное значение опции по умолчанию */
|
|
44
|
+
defaultValue?: AutocompletePropValue<OPTION>;
|
|
45
|
+
/** Функция обратного вызова, которая будет вызвана при выборе значения */
|
|
46
|
+
onChange?: (e: SyntheticEvent | KeyboardEvent, value: OPTION | null) => void;
|
|
47
|
+
/** Введённое значение в текстовом поле */
|
|
48
|
+
inputValue?: string;
|
|
49
|
+
/** Функция обратного вызова, которая будет вызвана при вводе значения с клавиатуры */
|
|
50
|
+
onInputChange?: (e: ChangeEvent<HTMLInputElement> | null, value: string) => void;
|
|
51
|
+
/** Функция для кастомизации текстового поля */
|
|
52
|
+
renderInput?: AutocompleteRenderInput;
|
|
53
|
+
/** Функция для кастомизации отображения опции */
|
|
54
|
+
renderOption?: AutocompletePropRenderOption<OPTION>;
|
|
55
|
+
/** Функция для определения названия элемента */
|
|
56
|
+
getOptionLabel?: AutocompletePropGetOptionLabel<OPTION>;
|
|
57
|
+
/** Функция для определения уникального ключа элемента */
|
|
58
|
+
getOptionKey?: AutocompletePropGetOptionKey<OPTION>;
|
|
59
|
+
/** Функция для определения заблокированного элемента */
|
|
60
|
+
getOptionDisabled?: AutocompletePropGetOptionDisabled<OPTION>;
|
|
61
|
+
/** Если {true} не закрывает выпадающий список при выборе опции */
|
|
62
|
+
disableCloseOnSelect?: boolean;
|
|
63
|
+
/** Если {true} позволяет вводить кастомное значение в текстовом поле */
|
|
64
|
+
allowCustomValue?: boolean;
|
|
65
|
+
/** Если {true} отображает статус загрузки (при условии отсутствующих опций) */
|
|
66
|
+
loading?: boolean;
|
|
67
|
+
/** Текст компонента при отсутствующих опций */
|
|
68
|
+
noOptionsText?: ReactNode;
|
|
69
|
+
/** Текст для кнопки очистки поля */
|
|
70
|
+
clearText?: string;
|
|
71
|
+
/** Текст для кнопки открытия выпадающего списка */
|
|
72
|
+
openText?: string;
|
|
73
|
+
/** Текст для кнопки закрытия выпадающего списка */
|
|
74
|
+
closeText?: string;
|
|
75
|
+
/** Текст компонента в состоянии загрузки */
|
|
76
|
+
loadingText?: ReactNode;
|
|
77
|
+
/** Функция обратного вызова, которая будет вызвана когда компонент запрашивает закрытие */
|
|
78
|
+
onClose?: () => void;
|
|
79
|
+
/** Функция обратного вызова, которая будет вызвана когда компонент запрашивает открытие */
|
|
80
|
+
onOpen?: () => void;
|
|
81
|
+
/** Если {true}, то не отображает кнопку закрытия */
|
|
82
|
+
disableClearButton?: boolean;
|
|
83
|
+
/** Функция поиска */
|
|
84
|
+
searchFunction?: AutocompleteSearchFunction<OPTION>;
|
|
85
|
+
/** Если {true} не показывает список с отсутствующими опциями */
|
|
86
|
+
disableShowEmptyOptionsList?: boolean;
|
|
87
|
+
/** Если {true} скрывает кнопку раскрытия/скрытия списка */
|
|
88
|
+
disableShowChevron?: boolean;
|
|
89
|
+
/** Свойства компонента DataList */
|
|
90
|
+
dataListProps?: AutocompleteDataListProps;
|
|
91
|
+
} & AutocompleteInputProps & (AutocompleteOpenControlledProps | AutocompleteOpenUncontrolledProps) & (OPTION extends {
|
|
92
|
+
label: AutocompleteDefaultOption['label'];
|
|
93
|
+
} ? Record<string, unknown> : {
|
|
94
|
+
getOptionLabel?: AutocompletePropGetOptionLabel<OPTION>;
|
|
95
|
+
}) & (OPTION extends {
|
|
96
|
+
id: AutocompleteDefaultOption['id'];
|
|
97
|
+
} ? Record<string, unknown> : {
|
|
98
|
+
getOptionKey?: AutocompletePropGetOptionKey<OPTION>;
|
|
99
|
+
}) & (OPTION extends {
|
|
100
|
+
id: AutocompleteDefaultOption['disabled'];
|
|
101
|
+
} ? Record<string, unknown> : {
|
|
102
|
+
getOptionDisabled?: AutocompletePropGetOptionKey<OPTION>;
|
|
103
|
+
});
|
|
104
|
+
export type AutocompleteComponent = <OPTION = AutocompleteDefaultOption>(props: AutocompleteProps<OPTION>) => ReactElement | null;
|
|
105
|
+
export {};
|
|
@@ -134,7 +134,7 @@ var DataListRender = function (inProps, ref) {
|
|
|
134
134
|
return (0, react_1.cloneElement)(elementChild, props);
|
|
135
135
|
});
|
|
136
136
|
}, [resolvedChildren, selectedState, focused, onClick]);
|
|
137
|
-
return (react_1.default.createElement(Popover_1.Popover, tslib_1.__assign({ as: as, open: open, placement: "bottom-start", disableReturnFocus: true, disableEnforceFocus: true, offset: [0, 4], onClose: onClose, anchorRef: anchorRef, className: (0, exports.cnDataList)('', [className]), transitionProps: {
|
|
137
|
+
return (react_1.default.createElement(Popover_1.Popover, tslib_1.__assign({ as: as, open: open, placement: "bottom-start", strategy: "absolute", disableReturnFocus: true, disableEnforceFocus: true, offset: [0, 4], onClose: onClose, anchorRef: anchorRef, className: (0, exports.cnDataList)('', [className]), transitionProps: {
|
|
138
138
|
classNames: 'DataList-animation',
|
|
139
139
|
} }, other, { onEntered: function () {
|
|
140
140
|
onEntered();
|
|
@@ -15,11 +15,19 @@
|
|
|
15
15
|
box-shadow: inset var(--shadow-outline-focused);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
.DataListOption_disabled
|
|
18
|
+
.DataListOption_disabled,
|
|
19
|
+
.DataListOption_disabled:hover,
|
|
20
|
+
.DataListOption_disabled:active {
|
|
19
21
|
cursor: not-allowed;
|
|
22
|
+
|
|
23
|
+
background-color: unset;
|
|
20
24
|
}
|
|
21
25
|
|
|
22
26
|
.DataListOption_disabled .ListItemText-TextPrimary,
|
|
23
|
-
.DataListOption_disabled .ListItemText-TextSecondary
|
|
27
|
+
.DataListOption_disabled .ListItemText-TextSecondary,
|
|
28
|
+
.DataListOption_disabled:hover .ListItemText-TextPrimary,
|
|
29
|
+
.DataListOption_disabled:hover .ListItemText-TextSecondary,
|
|
30
|
+
.DataListOption_disabled:active .ListItemText-TextPrimary,
|
|
31
|
+
.DataListOption_disabled:active .ListItemText-TextSecondary {
|
|
24
32
|
color: var(--color-content-tertiary);
|
|
25
33
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.useDataListNavigation = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var react_1 = require("react");
|
|
6
|
+
var useMutableRef_1 = require("../../../hooks/useMutableRef");
|
|
6
7
|
var getNextIndex_1 = require("../../../utils/getNextIndex");
|
|
7
8
|
var getPrevIndex_1 = require("../../../utils/getPrevIndex");
|
|
8
9
|
var isKey_1 = require("../../../utils/isKey");
|
|
@@ -10,19 +11,10 @@ var isKeys_1 = require("../../../utils/isKeys");
|
|
|
10
11
|
/** Навигация по элементам списка без перехвата фокуса с элемента контроля */
|
|
11
12
|
function useDataListNavigation(_a) {
|
|
12
13
|
var selected = _a.selected, onSelect = _a.onSelect, _b = _a.active, active = _b === void 0 ? false : _b, itemsProps = _a.items;
|
|
13
|
-
var savedItems = (0,
|
|
14
|
-
var savedSelected = (0,
|
|
15
|
-
var savedOnSelect = (0,
|
|
14
|
+
var savedItems = (0, useMutableRef_1.useMutableRef)(itemsProps);
|
|
15
|
+
var savedSelected = (0, useMutableRef_1.useMutableRef)(selected);
|
|
16
|
+
var savedOnSelect = (0, useMutableRef_1.useMutableRef)(onSelect);
|
|
16
17
|
var _c = tslib_1.__read((0, react_1.useState)({}), 2), state = _c[0], setState = _c[1];
|
|
17
|
-
(0, react_1.useEffect)(function () {
|
|
18
|
-
savedItems.current = itemsProps;
|
|
19
|
-
}, [itemsProps]);
|
|
20
|
-
(0, react_1.useEffect)(function () {
|
|
21
|
-
savedOnSelect.current = onSelect;
|
|
22
|
-
}, [onSelect]);
|
|
23
|
-
(0, react_1.useEffect)(function () {
|
|
24
|
-
savedSelected.current = selected;
|
|
25
|
-
}, [selected]);
|
|
26
18
|
var findInItems = function (value) { var _a; return (_a = savedItems.current) === null || _a === void 0 ? void 0 : _a.find(function (item) { return item === value; }); };
|
|
27
19
|
(0, react_1.useEffect)(function () {
|
|
28
20
|
if (!active) {
|
|
@@ -12,8 +12,8 @@ var ListContext_1 = require("./ListContext");
|
|
|
12
12
|
exports.cnList = (0, classname_1.cn)('List');
|
|
13
13
|
exports.List = (0, polymorphicComponentWithRef_1.polymorphicComponentWithRef)(function (inProps, ref) {
|
|
14
14
|
var props = (0, useThemeProps_1.useThemeProps)({ props: inProps, name: 'List' });
|
|
15
|
-
var _a = props.as, Tag = _a === void 0 ? constants_1.LIST_DEFAULT_TAG : _a, _b = props.size, size = _b === void 0 ? constants_1.LIST_DEFAULT_SIZE : _b, children = props.children, className = props.className, other = tslib_1.__rest(props, ["as", "size", "children", "className"]);
|
|
15
|
+
var _a = props.as, Tag = _a === void 0 ? constants_1.LIST_DEFAULT_TAG : _a, _b = props.size, size = _b === void 0 ? constants_1.LIST_DEFAULT_SIZE : _b, _c = props.disablePadding, disablePadding = _c === void 0 ? constants_1.LIST_DEFAULT_DISABLE_PADDING : _c, children = props.children, className = props.className, other = tslib_1.__rest(props, ["as", "size", "disablePadding", "children", "className"]);
|
|
16
16
|
return (react_1.default.createElement(ListContext_1.ListContext.Provider, { value: { size: size } },
|
|
17
|
-
react_1.default.createElement(Tag, tslib_1.__assign({ className: (0, exports.cnList)({ size: size }, [className]) }, other, { ref: ref }), children)));
|
|
17
|
+
react_1.default.createElement(Tag, tslib_1.__assign({ className: (0, exports.cnList)({ size: size, disablePadding: disablePadding }, [className]) }, other, { ref: ref }), children)));
|
|
18
18
|
});
|
|
19
19
|
exports.List.displayName = 'List';
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LIST_ITEM_BUTTON_DEFAULT_ALIGN = exports.LIST_ITEM_BUTTON_DEFAULT_TAG = exports.LIST_ITEM_DEFAULT_ALIGN = exports.LIST_ITEM_DEFAULT_TAG = exports.LIST_DEFAULT_TAG = exports.LIST_DEFAULT_SIZE = void 0;
|
|
3
|
+
exports.LIST_ITEM_BUTTON_DEFAULT_ALIGN = exports.LIST_ITEM_BUTTON_DEFAULT_TAG = exports.LIST_ITEM_DEFAULT_ALIGN = exports.LIST_ITEM_DEFAULT_TAG = exports.LIST_DEFAULT_TAG = exports.LIST_DEFAULT_DISABLE_PADDING = exports.LIST_DEFAULT_SIZE = void 0;
|
|
4
4
|
exports.LIST_DEFAULT_SIZE = 'm';
|
|
5
|
+
exports.LIST_DEFAULT_DISABLE_PADDING = false;
|
|
5
6
|
exports.LIST_DEFAULT_TAG = 'ul';
|
|
6
7
|
exports.LIST_ITEM_DEFAULT_TAG = 'li';
|
|
7
8
|
exports.LIST_ITEM_DEFAULT_ALIGN = 'center';
|
|
@@ -11,6 +11,8 @@ export type ListBaseProps = {
|
|
|
11
11
|
children?: ReactNode;
|
|
12
12
|
/** Размер компонента */
|
|
13
13
|
size?: ListSizeVariant;
|
|
14
|
+
/** Если {true} отключает боковые отступы */
|
|
15
|
+
disablePadding?: boolean;
|
|
14
16
|
/** Идентификатор компонента для тестов */
|
|
15
17
|
'data-testid'?: string;
|
|
16
18
|
};
|
|
@@ -22,11 +22,11 @@ var PopoverContext_1 = require("./PopoverContext");
|
|
|
22
22
|
exports.cnPopover = (0, classname_1.cn)('Popover');
|
|
23
23
|
exports.Popover = (0, polymorphicComponentWithRef_1.polymorphicComponentWithRef)(function (inProps, ref) {
|
|
24
24
|
var props = (0, useThemeProps_1.useThemeProps)({ props: inProps, name: 'Popover' });
|
|
25
|
-
var _a = props.arrow, arrow = _a === void 0 ? constants_1.POPOVER_DEFAULT_ARROW : _a, _b = props.open, open = _b === void 0 ? constants_1.POPOVER_DEFAULT_OPEN : _b, _c = props.disableInteractive, disableInteractive = _c === void 0 ? constants_1.POPOVER_DEFAULT_DISABLE_INTERACTIVE : _c, _d = props.disableEnforceFocus, disableEnforceFocus = _d === void 0 ? constants_1.POPOVER_DEFAULT_DISABLE_ENFORCE_FOCUS : _d, _e = props.disableReturnFocus, disableReturnFocus = _e === void 0 ? constants_1.POPOVER_DEFAULT_DISABLE_RETURN_FOCUS : _e, _f = props.disableClickOutside, disableClickOutside = _f === void 0 ? constants_1.POPOVER_DEFAULT_DISABLE_CLICK_OUTSIDE : _f, _g = props.placement, placement = _g === void 0 ? constants_1.POPOVER_DEFAULT_PLACEMENT : _g, ignoreClickOutsideRefs = props.ignoreClickOutsideRefs, arrowProps = props.arrowProps, anchorRef = props.anchorRef, equalAnchorWidth = props.equalAnchorWidth, offset = props.offset, children = props.children, transitionProps = props.transitionProps, onClose = props.onClose, onEnter = props.onEnter, onEntered = props.onEntered, onExit = props.onExit, onExitedProp = props.onExited, className = props.className, position = props.position, style = props.style, setUpdate = props.setUpdate,
|
|
26
|
-
var
|
|
25
|
+
var _a = props.arrow, arrow = _a === void 0 ? constants_1.POPOVER_DEFAULT_ARROW : _a, _b = props.open, open = _b === void 0 ? constants_1.POPOVER_DEFAULT_OPEN : _b, _c = props.disableInteractive, disableInteractive = _c === void 0 ? constants_1.POPOVER_DEFAULT_DISABLE_INTERACTIVE : _c, _d = props.disableEnforceFocus, disableEnforceFocus = _d === void 0 ? constants_1.POPOVER_DEFAULT_DISABLE_ENFORCE_FOCUS : _d, _e = props.disableReturnFocus, disableReturnFocus = _e === void 0 ? constants_1.POPOVER_DEFAULT_DISABLE_RETURN_FOCUS : _e, _f = props.disableClickOutside, disableClickOutside = _f === void 0 ? constants_1.POPOVER_DEFAULT_DISABLE_CLICK_OUTSIDE : _f, _g = props.placement, placement = _g === void 0 ? constants_1.POPOVER_DEFAULT_PLACEMENT : _g, _h = props.strategy, strategy = _h === void 0 ? constants_1.POPOVER_DEFAULT_STRATEGY : _h, _j = props.disablePreventOverflow, disablePreventOverflow = _j === void 0 ? constants_1.POPOVER_DEFAULT_DISABLE_PREVENT_OVERFLOW : _j, ignoreClickOutsideRefs = props.ignoreClickOutsideRefs, arrowProps = props.arrowProps, anchorRef = props.anchorRef, equalAnchorWidth = props.equalAnchorWidth, offset = props.offset, children = props.children, transitionProps = props.transitionProps, onClose = props.onClose, onEnter = props.onEnter, onEntered = props.onEntered, onExit = props.onExit, onExitedProp = props.onExited, className = props.className, position = props.position, style = props.style, setUpdate = props.setUpdate, _k = props.as, as = _k === void 0 ? constants_1.POPOVER_DEFAULT_TAG : _k, other = tslib_1.__rest(props, ["arrow", "open", "disableInteractive", "disableEnforceFocus", "disableReturnFocus", "disableClickOutside", "placement", "strategy", "disablePreventOverflow", "ignoreClickOutsideRefs", "arrowProps", "anchorRef", "equalAnchorWidth", "offset", "children", "transitionProps", "onClose", "onEnter", "onEntered", "onExit", "onExited", "className", "position", "style", "setUpdate", "as"]);
|
|
26
|
+
var _l = tslib_1.__read((0, react_1.useState)(false), 2), openState = _l[0], setOpenState = _l[1];
|
|
27
27
|
var focusedElement = (0, react_1.useRef)(null);
|
|
28
28
|
var popoverRef = (0, react_1.useRef)(null);
|
|
29
|
-
var
|
|
29
|
+
var _m = (0, index_1.usePopoverManager)(popoverRef, 1000, openState), refsClickOutside = _m.refsClickOutside, isTop = _m.isTop;
|
|
30
30
|
// Ловушка фокуса
|
|
31
31
|
var trapRef = (0, useFocusTrap_1.useFocusTrap)({
|
|
32
32
|
active: !disableEnforceFocus && isTop,
|
|
@@ -72,6 +72,7 @@ exports.Popover = (0, polymorphicComponentWithRef_1.polymorphicComponentWithRef)
|
|
|
72
72
|
gpuAcceleration: false,
|
|
73
73
|
},
|
|
74
74
|
},
|
|
75
|
+
{ name: 'preventOverflow', enabled: disablePreventOverflow },
|
|
75
76
|
// Ширина всплывающего элемента
|
|
76
77
|
{
|
|
77
78
|
name: 'sameWidth',
|
|
@@ -119,12 +120,12 @@ exports.Popover = (0, polymorphicComponentWithRef_1.polymorphicComponentWithRef)
|
|
|
119
120
|
};
|
|
120
121
|
return undefined;
|
|
121
122
|
}, [anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current, position]);
|
|
122
|
-
var
|
|
123
|
-
var
|
|
123
|
+
var _o = tslib_1.__read((0, react_1.useState)(null), 2), popperElement = _o[0], setPopperElement = _o[1];
|
|
124
|
+
var _p = (0, react_popper_1.usePopper)(resolveReferenceElement, popperElement, {
|
|
124
125
|
placement: placement,
|
|
125
|
-
strategy:
|
|
126
|
+
strategy: strategy,
|
|
126
127
|
modifiers: modifiers,
|
|
127
|
-
}), styles =
|
|
128
|
+
}), styles = _p.styles, attributes = _p.attributes, update = _p.update;
|
|
128
129
|
// Передача метода по перерасчету расположения компонента Popover в родительский компонент
|
|
129
130
|
(0, react_1.useEffect)(function () {
|
|
130
131
|
setUpdate === null || setUpdate === void 0 ? void 0 : setUpdate(update);
|
|
@@ -6,3 +6,5 @@ export declare const POPOVER_DEFAULT_DISABLE_ENFORCE_FOCUS = false;
|
|
|
6
6
|
export declare const POPOVER_DEFAULT_DISABLE_RETURN_FOCUS = false;
|
|
7
7
|
export declare const POPOVER_DEFAULT_DISABLE_CLICK_OUTSIDE = false;
|
|
8
8
|
export declare const POPOVER_DEFAULT_PLACEMENT = "auto";
|
|
9
|
+
export declare const POPOVER_DEFAULT_STRATEGY = "fixed";
|
|
10
|
+
export declare const POPOVER_DEFAULT_DISABLE_PREVENT_OVERFLOW = false;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.POPOVER_DEFAULT_PLACEMENT = exports.POPOVER_DEFAULT_DISABLE_CLICK_OUTSIDE = exports.POPOVER_DEFAULT_DISABLE_RETURN_FOCUS = exports.POPOVER_DEFAULT_DISABLE_ENFORCE_FOCUS = exports.POPOVER_DEFAULT_DISABLE_INTERACTIVE = exports.POPOVER_DEFAULT_OPEN = exports.POPOVER_DEFAULT_ARROW = exports.POPOVER_DEFAULT_TAG = void 0;
|
|
3
|
+
exports.POPOVER_DEFAULT_DISABLE_PREVENT_OVERFLOW = exports.POPOVER_DEFAULT_STRATEGY = exports.POPOVER_DEFAULT_PLACEMENT = exports.POPOVER_DEFAULT_DISABLE_CLICK_OUTSIDE = exports.POPOVER_DEFAULT_DISABLE_RETURN_FOCUS = exports.POPOVER_DEFAULT_DISABLE_ENFORCE_FOCUS = exports.POPOVER_DEFAULT_DISABLE_INTERACTIVE = exports.POPOVER_DEFAULT_OPEN = exports.POPOVER_DEFAULT_ARROW = exports.POPOVER_DEFAULT_TAG = void 0;
|
|
4
4
|
var Paper_1 = require("../Paper");
|
|
5
5
|
exports.POPOVER_DEFAULT_TAG = Paper_1.Paper;
|
|
6
6
|
exports.POPOVER_DEFAULT_ARROW = false;
|
|
@@ -10,3 +10,5 @@ exports.POPOVER_DEFAULT_DISABLE_ENFORCE_FOCUS = false;
|
|
|
10
10
|
exports.POPOVER_DEFAULT_DISABLE_RETURN_FOCUS = false;
|
|
11
11
|
exports.POPOVER_DEFAULT_DISABLE_CLICK_OUTSIDE = false;
|
|
12
12
|
exports.POPOVER_DEFAULT_PLACEMENT = 'auto';
|
|
13
|
+
exports.POPOVER_DEFAULT_STRATEGY = 'fixed';
|
|
14
|
+
exports.POPOVER_DEFAULT_DISABLE_PREVENT_OVERFLOW = false;
|
|
@@ -11,6 +11,8 @@ export type VirtualElement = {
|
|
|
11
11
|
};
|
|
12
12
|
export declare const popoverPlacementVariant: readonly ["top-start", "top-end", "bottom-start", "bottom-end", "right-start", "right-end", "left-start", "left-end", "auto", "auto-start", "auto-end", "top", "bottom", "right", "left"];
|
|
13
13
|
export type PopoverPlacementVariant = (typeof popoverPlacementVariant)[number];
|
|
14
|
+
export declare const popoverStrategyVariant: readonly ["absolute", "fixed"];
|
|
15
|
+
export type PopoverStrategyVariant = (typeof popoverStrategyVariant)[number];
|
|
14
16
|
export type PopoverBaseProps = {
|
|
15
17
|
/** Признак по которому компонент будет представлен */
|
|
16
18
|
open?: boolean;
|
|
@@ -70,6 +72,10 @@ export type PopoverBaseProps = {
|
|
|
70
72
|
setUpdate?: (update: PopperJS.Instance['update'] | null) => void;
|
|
71
73
|
/** Контейнер для монтирования всплывающего окна */
|
|
72
74
|
container?: PortalProps['container'];
|
|
75
|
+
/** Стратегия позиционирования */
|
|
76
|
+
strategy?: PopoverStrategyVariant;
|
|
77
|
+
/** Если {true} позволяет смещаться по границе якорного элемента компонента */
|
|
78
|
+
disablePreventOverflow?: boolean;
|
|
73
79
|
};
|
|
74
80
|
export type PopoverRef = ComponentRef<typeof POPOVER_DEFAULT_TAG>;
|
|
75
81
|
export type PopoverProps<As extends ElementType = typeof POPOVER_DEFAULT_TAG> = PolymorphicComponentPropsWithRef<PopoverBaseProps, As>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.popoverPlacementVariant = void 0;
|
|
3
|
+
exports.popoverStrategyVariant = exports.popoverPlacementVariant = void 0;
|
|
4
4
|
exports.popoverPlacementVariant = [
|
|
5
5
|
'top-start',
|
|
6
6
|
'top-end',
|
|
@@ -18,3 +18,4 @@ exports.popoverPlacementVariant = [
|
|
|
18
18
|
'right',
|
|
19
19
|
'left',
|
|
20
20
|
];
|
|
21
|
+
exports.popoverStrategyVariant = ['absolute', 'fixed'];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AccordionProps, AccordionSummaryProps } from '../Accordion';
|
|
2
2
|
import type { AlertProps } from '../Alert';
|
|
3
|
+
import type { AutocompleteProps } from '../Autocomplete';
|
|
3
4
|
import type { AvatarProps } from '../Avatar';
|
|
4
5
|
import type { BackdropProps } from '../Backdrop';
|
|
5
6
|
import type { BadgeProps } from '../Badge';
|
|
@@ -64,6 +65,7 @@ export type Theme = {
|
|
|
64
65
|
Accordion?: Partial<AccordionProps>;
|
|
65
66
|
AccordionSummary?: Partial<AccordionSummaryProps>;
|
|
66
67
|
Alert?: Partial<AlertProps>;
|
|
68
|
+
Autocomplete?: Partial<AutocompleteProps>;
|
|
67
69
|
Avatar?: Partial<AvatarProps>;
|
|
68
70
|
Backdrop?: Partial<BackdropProps>;
|
|
69
71
|
Badge?: Partial<BadgeProps>;
|
|
@@ -115,7 +115,7 @@ exports.Tooltip = (0, polymorphicComponentWithRef_1.polymorphicComponentWithRef)
|
|
|
115
115
|
]);
|
|
116
116
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
117
117
|
react_1.default.cloneElement(resolveChildren, composeChildrenProps),
|
|
118
|
-
react_1.default.createElement(Popover_1.Popover, tslib_1.__assign({ anchorRef: anchorRef, as: as, background: variant === 'light' ? 'main' : 'main-inverse', radius: size }, other, { ref: ref, offset: offset, placement: placement, open: openState && !disabled, onClose: handleClose, className: (0, exports.cnTooltip)({ size: size, variant: variant }, [className]), disableInteractive: disableInteractive, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, arrow: arrow, arrowProps: {
|
|
118
|
+
react_1.default.createElement(Popover_1.Popover, tslib_1.__assign({ anchorRef: anchorRef, strategy: "absolute", as: as, background: variant === 'light' ? 'main' : 'main-inverse', radius: size }, other, { ref: ref, offset: offset, placement: placement, open: openState && !disabled, onClose: handleClose, className: (0, exports.cnTooltip)({ size: size, variant: variant }, [className]), disableInteractive: disableInteractive, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, arrow: arrow, arrowProps: {
|
|
119
119
|
size: size,
|
|
120
120
|
}, disableEnforceFocus: true, disableReturnFocus: true }), label)));
|
|
121
121
|
});
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useEventListener = void 0;
|
|
4
4
|
var react_1 = require("react");
|
|
5
|
+
var useMutableRef_1 = require("../../hooks/useMutableRef");
|
|
5
6
|
/** Хук добавляющий обработчики событий и удаляющий их на выходе */
|
|
6
7
|
function useEventListener(_a) {
|
|
7
8
|
var eventName = _a.eventName, handler = _a.handler, element = _a.element, options = _a.options, _b = _a.active, active = _b === void 0 ? true : _b;
|
|
8
|
-
var savedListener = (0,
|
|
9
|
-
(0, react_1.useEffect)(function () {
|
|
10
|
-
savedListener.current = handler;
|
|
11
|
-
}, [handler]);
|
|
9
|
+
var savedListener = (0, useMutableRef_1.useMutableRef)(handler);
|
|
12
10
|
var handleEventListener = (0, react_1.useCallback)(function (event) {
|
|
13
11
|
var _a;
|
|
14
12
|
(_a = savedListener.current) === null || _a === void 0 ? void 0 : _a.call(savedListener, event);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { RefObject } from 'react';
|
|
2
2
|
export type UseHoverOptions = {
|
|
3
3
|
/** Функция обратного вызова на событие перехода курсора на целевой элемент */
|
|
4
|
-
onEnter?: (e:
|
|
4
|
+
onEnter?: (e: MouseEvent) => void;
|
|
5
5
|
/** Функция обратного вызова на событие покидания курсора с целевого элемента */
|
|
6
|
-
onLeave?: (e:
|
|
6
|
+
onLeave?: (e: MouseEvent) => void;
|
|
7
7
|
/** Признак активности обработчика события, используется для повышения производительности. */
|
|
8
8
|
active?: boolean;
|
|
9
9
|
};
|
|
@@ -23,13 +23,13 @@ options) {
|
|
|
23
23
|
(0, useEventListener_1.useEventListener)({
|
|
24
24
|
handler: handleEnter,
|
|
25
25
|
element: elRef,
|
|
26
|
-
eventName: '
|
|
26
|
+
eventName: 'mouseenter',
|
|
27
27
|
active: active,
|
|
28
28
|
});
|
|
29
29
|
(0, useEventListener_1.useEventListener)({
|
|
30
30
|
handler: handleLeave,
|
|
31
31
|
element: elRef,
|
|
32
|
-
eventName: '
|
|
32
|
+
eventName: 'mouseleave',
|
|
33
33
|
active: active,
|
|
34
34
|
});
|
|
35
35
|
return value;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useMutableRef';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useMutableRef = void 0;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
function useMutableRef(value) {
|
|
6
|
+
var ref = (0, react_1.useRef)(value);
|
|
7
|
+
ref.current = value;
|
|
8
|
+
return ref;
|
|
9
|
+
}
|
|
10
|
+
exports.useMutableRef = useMutableRef;
|
|
@@ -3,6 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.enUS = exports.kkKZ = exports.ruRU = void 0;
|
|
4
4
|
exports.ruRU = {
|
|
5
5
|
defaultProps: {
|
|
6
|
+
Autocomplete: {
|
|
7
|
+
noOptionsText: 'Ничего не найдено',
|
|
8
|
+
closeText: 'Закрыть',
|
|
9
|
+
openText: 'Открыть',
|
|
10
|
+
clearText: 'Очистить',
|
|
11
|
+
loadingText: 'Загрузка…',
|
|
12
|
+
},
|
|
6
13
|
Loader: {
|
|
7
14
|
'aria-label': 'Загрузка',
|
|
8
15
|
},
|
|
@@ -18,6 +25,13 @@ exports.ruRU = {
|
|
|
18
25
|
};
|
|
19
26
|
exports.kkKZ = {
|
|
20
27
|
defaultProps: {
|
|
28
|
+
Autocomplete: {
|
|
29
|
+
noOptionsText: 'Ештеңе табылған жоқ',
|
|
30
|
+
closeText: 'Жабу',
|
|
31
|
+
openText: 'Ашу',
|
|
32
|
+
clearText: 'Тазалау',
|
|
33
|
+
loadingText: 'Жүктеу…',
|
|
34
|
+
},
|
|
21
35
|
Loader: {
|
|
22
36
|
'aria-label': 'Жүктеу',
|
|
23
37
|
},
|
|
@@ -33,6 +47,13 @@ exports.kkKZ = {
|
|
|
33
47
|
};
|
|
34
48
|
exports.enUS = {
|
|
35
49
|
defaultProps: {
|
|
50
|
+
Autocomplete: {
|
|
51
|
+
noOptionsText: 'No options',
|
|
52
|
+
closeText: 'Close',
|
|
53
|
+
openText: 'Open',
|
|
54
|
+
clearText: 'Clear',
|
|
55
|
+
loadingText: 'Loading…',
|
|
56
|
+
},
|
|
36
57
|
Loader: {
|
|
37
58
|
'aria-label': 'Loading',
|
|
38
59
|
},
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
.Autocomplete {
|
|
2
|
+
--autocomplete-gutter-x: 0 var(--textfield-gutter-x);
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.Autocomplete_hasChevron.Autocomplete_size_2xs {
|
|
6
|
+
--autocomplete-gutter-x: 0 var(--control-padding-2xs) 0
|
|
7
|
+
var(--control-padding-xs);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.Autocomplete_hasChevron.Autocomplete_size_xs {
|
|
11
|
+
--autocomplete-gutter-x: 0 var(--control-padding-2xs) 0
|
|
12
|
+
var(--control-padding-xs);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.Autocomplete_hasChevron.Autocomplete_size_s {
|
|
16
|
+
--autocomplete-gutter-x: 0 var(--control-padding-2xs) 0
|
|
17
|
+
var(--control-padding-s);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.Autocomplete_hasChevron.Autocomplete_size_m {
|
|
21
|
+
--autocomplete-gutter-x: 0 var(--control-padding-2xs) 0
|
|
22
|
+
var(--control-padding-m);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.Autocomplete_hasChevron.Autocomplete_size_l {
|
|
26
|
+
--autocomplete-gutter-x: 0 var(--control-padding-2xs) 0
|
|
27
|
+
var(--control-padding-l);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.Autocomplete-RenderRight {
|
|
31
|
+
display: flex;
|
|
32
|
+
gap: var(--spacing-2xs);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.Autocomplete-ClearButton {
|
|
36
|
+
visibility: hidden;
|
|
37
|
+
transition: visibility var(--transition-default);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.Autocomplete-ClearButton_visibility {
|
|
41
|
+
visibility: visible;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.Autocomplete .Input-Body {
|
|
45
|
+
padding: var(--autocomplete-gutter-x);
|
|
46
|
+
}
|