@ozen-ui/kit 0.33.0 → 0.34.1
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 +19 -26
- 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/ThemeProvider/types.d.ts +2 -0
- package/__inner__/cjs/hooks/useEventListener/useEventListener.js +2 -4
- 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 +21 -28
- 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/ThemeProvider/types.d.ts +2 -0
- package/__inner__/esm/hooks/useEventListener/useEventListener.js +3 -5
- 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 { DataListProps } 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<DataListProps, '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 {};
|
|
@@ -5,7 +5,6 @@ var tslib_1 = require("tslib");
|
|
|
5
5
|
require("./DataList.css");
|
|
6
6
|
var react_1 = tslib_1.__importStar(require("react"));
|
|
7
7
|
var react_is_1 = require("react-is");
|
|
8
|
-
var useBoolean_1 = require("../../hooks/useBoolean");
|
|
9
8
|
var useControlled_1 = require("../../hooks/useControlled");
|
|
10
9
|
var useEventListener_1 = require("../../hooks/useEventListener");
|
|
11
10
|
var useMultiRef_1 = require("../../hooks/useMultiRef");
|
|
@@ -13,6 +12,7 @@ var useThemeProps_1 = require("../../hooks/useThemeProps");
|
|
|
13
12
|
var classname_1 = require("../../utils/classname");
|
|
14
13
|
var isKey_1 = require("../../utils/isKey");
|
|
15
14
|
var polymorphicComponentWithRef_1 = require("../../utils/polymorphicComponentWithRef");
|
|
15
|
+
var scrollContainerToElement_1 = require("../../utils/scrollContainerToElement");
|
|
16
16
|
var List_1 = require("../List");
|
|
17
17
|
var Popover_1 = require("../Popover");
|
|
18
18
|
var constants_1 = require("./constants");
|
|
@@ -20,17 +20,15 @@ var helpers_1 = require("./helpers");
|
|
|
20
20
|
var index_1 = require("./index");
|
|
21
21
|
exports.cnDataList = (0, classname_1.cn)('DataList');
|
|
22
22
|
var DataListRender = function (inProps, ref) {
|
|
23
|
-
var _a = (0, useThemeProps_1.useThemeProps)({ props: inProps, name: 'DataList' }), _b = _a.open, open = _b === void 0 ? constants_1.DATA_LIST_DEFAULT_OPEN : _b, _c = _a.size, size = _c === void 0 ? constants_1.DATA_LIST_DEFAULT_SIZE : _c, _d = _a.as, as = _d === void 0 ? constants_1.DATA_LIST_DEFAULT_TAG : _d, name = _a.name, children = _a.children, anchorRef = _a.anchorRef, selectedProp = _a.selected, defaultSelected = _a.defaultSelected, onClose = _a.onClose,
|
|
23
|
+
var _a = (0, useThemeProps_1.useThemeProps)({ props: inProps, name: 'DataList' }), _b = _a.open, open = _b === void 0 ? constants_1.DATA_LIST_DEFAULT_OPEN : _b, _c = _a.size, size = _c === void 0 ? constants_1.DATA_LIST_DEFAULT_SIZE : _c, _d = _a.as, as = _d === void 0 ? constants_1.DATA_LIST_DEFAULT_TAG : _d, name = _a.name, children = _a.children, anchorRef = _a.anchorRef, selectedProp = _a.selected, defaultSelected = _a.defaultSelected, onClose = _a.onClose, listProps = _a.listProps, className = _a.className, other = tslib_1.__rest(_a, ["open", "size", "as", "name", "children", "anchorRef", "selected", "defaultSelected", "onClose", "listProps", "className"]);
|
|
24
24
|
var dataListRef = (0, react_1.useRef)(null);
|
|
25
25
|
var listRef = (0, react_1.useRef)(null);
|
|
26
|
-
|
|
27
|
-
var _e = tslib_1.__read((0, useBoolean_1.useBoolean)(false), 2), opened = _e[0], _f = _e[1], onEntered = _f.on, onExited = _f.off;
|
|
28
|
-
var _g = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
26
|
+
var _e = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
29
27
|
name: 'DataList',
|
|
30
28
|
defaultValue: defaultSelected,
|
|
31
29
|
value: selectedProp,
|
|
32
30
|
state: 'selected',
|
|
33
|
-
}), 2), selectedState =
|
|
31
|
+
}), 2), selectedState = _e[0], setSelected = _e[1];
|
|
34
32
|
var nodes = (0, react_1.useMemo)(function () { return new Map(); }, [children]);
|
|
35
33
|
var items = (0, react_1.useMemo)(function () { return new Array(); }, [children]);
|
|
36
34
|
var resolvedChildren = (0, react_is_1.isFragment)(children)
|
|
@@ -70,29 +68,34 @@ var DataListRender = function (inProps, ref) {
|
|
|
70
68
|
setSelected_2(value);
|
|
71
69
|
}
|
|
72
70
|
};
|
|
71
|
+
var handleOnMouseDownList = function (e) {
|
|
72
|
+
var _a;
|
|
73
|
+
e.preventDefault();
|
|
74
|
+
(_a = listProps === null || listProps === void 0 ? void 0 : listProps.onMouseDown) === null || _a === void 0 ? void 0 : _a.call(listProps, e);
|
|
75
|
+
};
|
|
73
76
|
// Навигация по списку
|
|
74
|
-
var
|
|
75
|
-
active:
|
|
77
|
+
var _f = (0, helpers_1.useDataListNavigation)({
|
|
78
|
+
active: open,
|
|
76
79
|
items: items,
|
|
77
80
|
selected: (0, helpers_1.lastSelectedValue)(selectedState),
|
|
78
81
|
onSelect: function (event, item) {
|
|
79
82
|
handleSelect(event, item || '');
|
|
80
83
|
},
|
|
81
|
-
}), current =
|
|
82
|
-
var _j = tslib_1.__read((0, react_1.useState)({ current: null }), 2), selectedElRef = _j[0], setSelectedElRef = _j[1];
|
|
84
|
+
}), current = _f.current, focused = _f.focused, onKeyDown = _f.onKeyDown, onClick = _f.onClick;
|
|
83
85
|
(0, react_1.useEffect)(function () {
|
|
84
86
|
var _a, _b;
|
|
85
87
|
var selected = focused || current || '';
|
|
86
88
|
// Находит элемент по ключу
|
|
87
89
|
var idx = nodes.get(selected);
|
|
88
90
|
if (idx !== undefined) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
+
// Прокрутка списка
|
|
92
|
+
(0, scrollContainerToElement_1.scrollContainerToElement)({
|
|
93
|
+
container: dataListRef.current,
|
|
94
|
+
element: (_b = (_a = listRef.current) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b[idx],
|
|
95
|
+
behavior: focused ? 'smooth' : 'instant',
|
|
91
96
|
});
|
|
92
97
|
}
|
|
93
98
|
}, [focused, current]);
|
|
94
|
-
// Прокрутка списка
|
|
95
|
-
(0, helpers_1.useScrollContainerToElement)(dataListRef, selectedElRef, focused ? 'smooth' : 'instant');
|
|
96
99
|
// Назначает элементу контроля событие управления списком с клавиатуры
|
|
97
100
|
(0, useEventListener_1.useEventListener)({
|
|
98
101
|
eventName: 'keydown',
|
|
@@ -136,17 +139,7 @@ var DataListRender = function (inProps, ref) {
|
|
|
136
139
|
}, [resolvedChildren, selectedState, focused, onClick]);
|
|
137
140
|
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
141
|
classNames: 'DataList-animation',
|
|
139
|
-
} }, other, {
|
|
140
|
-
|
|
141
|
-
onEnteredProp === null || onEnteredProp === void 0 ? void 0 : onEnteredProp();
|
|
142
|
-
}, onExited: function () {
|
|
143
|
-
onExited();
|
|
144
|
-
onExitedProp === null || onExitedProp === void 0 ? void 0 : onExitedProp();
|
|
145
|
-
}, ref: (0, useMultiRef_1.useMultiRef)([ref, dataListRef]) }),
|
|
146
|
-
react_1.default.createElement(List_1.List, tslib_1.__assign({ as: "ul", size: size }, listProps, { onMouseDown: function (e) {
|
|
147
|
-
var _a;
|
|
148
|
-
e.preventDefault();
|
|
149
|
-
(_a = listProps === null || listProps === void 0 ? void 0 : listProps.onMouseDown) === null || _a === void 0 ? void 0 : _a.call(listProps, e);
|
|
150
|
-
}, ref: (0, useMultiRef_1.useMultiRef)([listRef, listProps === null || listProps === void 0 ? void 0 : listProps.ref]) }), renderChildren)));
|
|
142
|
+
} }, other, { ref: (0, useMultiRef_1.useMultiRef)([ref, dataListRef]) }),
|
|
143
|
+
react_1.default.createElement(List_1.List, tslib_1.__assign({ as: "ul", size: size }, listProps, { onMouseDown: handleOnMouseDownList, ref: (0, useMultiRef_1.useMultiRef)([listRef, listProps === null || listProps === void 0 ? void 0 : listProps.ref]) }), renderChildren)));
|
|
151
144
|
};
|
|
152
145
|
exports.DataList = (0, polymorphicComponentWithRef_1.polymorphicComponentWithRef)(DataListRender);
|
|
@@ -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
|
};
|
|
@@ -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>;
|
|
@@ -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);
|
|
@@ -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
|
+
}
|