@ozen-ui/kit 0.16.0 → 0.17.0-canary.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/__inner__/cjs/components/DataList/DataList.css +19 -46
- package/__inner__/cjs/components/DataList/DataList.js +101 -40
- package/__inner__/cjs/components/DataList/components/DataListCheckIcon/DataListCheckIcon.css +13 -0
- package/__inner__/cjs/components/{Select/components/SelectCheckIcon/SelectCheckIcon.d.ts → DataList/components/DataListCheckIcon/DataListCheckIcon.d.ts} +2 -2
- package/__inner__/cjs/components/DataList/components/DataListCheckIcon/DataListCheckIcon.js +16 -0
- package/__inner__/cjs/components/DataList/components/DataListCheckIcon/index.d.ts +1 -0
- package/__inner__/cjs/components/DataList/components/DataListCheckIcon/index.js +4 -0
- package/__inner__/cjs/components/DataList/components/DataListOption/DataListOption.css +20 -0
- package/__inner__/{esm/components/DataList/components → cjs/components/DataList/components/DataListOption}/DataListOption.d.ts +15 -4
- package/__inner__/cjs/components/DataList/components/DataListOption/DataListOption.js +39 -0
- package/__inner__/cjs/components/DataList/components/DataListOption/index.d.ts +1 -0
- package/__inner__/cjs/components/{Select/components/SelectCheckIcon → DataList/components/DataListOption}/index.js +1 -1
- package/__inner__/cjs/components/DataList/constants.d.ts +1 -0
- package/__inner__/cjs/components/DataList/constants.js +3 -1
- package/__inner__/cjs/components/DataList/helpers/index.d.ts +4 -0
- package/__inner__/cjs/components/DataList/helpers/index.js +7 -0
- package/__inner__/cjs/components/DataList/helpers/lastSelectedValue.d.ts +1 -0
- package/__inner__/cjs/components/DataList/helpers/lastSelectedValue.js +8 -0
- package/__inner__/cjs/components/DataList/helpers/types.d.ts +10 -0
- package/__inner__/cjs/components/DataList/helpers/types.js +7 -0
- package/__inner__/cjs/components/DataList/helpers/useDataListNavigation.d.ts +23 -0
- package/__inner__/cjs/components/DataList/helpers/useDataListNavigation.js +85 -0
- package/__inner__/cjs/components/DataList/helpers/useScrollContainerToElement.d.ts +3 -0
- package/__inner__/cjs/components/DataList/helpers/useScrollContainerToElement.js +15 -0
- package/__inner__/cjs/components/DataList/types.d.ts +3 -4
- package/__inner__/cjs/components/DataList/types.js +0 -5
- package/__inner__/cjs/components/FieldControl/FieldControl.js +1 -0
- package/__inner__/cjs/components/IconButton/IconButton.css +1 -1
- package/__inner__/cjs/components/Input/Input.js +1 -1
- package/__inner__/cjs/components/Input/types.d.ts +3 -2
- package/__inner__/cjs/components/Select/Select.css +33 -128
- package/__inner__/cjs/components/Select/Select.d.ts +2 -3
- package/__inner__/cjs/components/Select/Select.js +92 -80
- package/__inner__/cjs/components/Select/components/SelectConsumer/SelectInputConsumer.d.ts +5 -0
- package/__inner__/cjs/components/Select/components/SelectConsumer/SelectInputConsumer.js +21 -0
- package/__inner__/cjs/components/Select/components/SelectConsumer/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/components/SelectConsumer/index.js +4 -0
- package/__inner__/cjs/components/Select/components/SelectInput/SelectInput.d.ts +1 -72
- package/__inner__/cjs/components/Select/components/SelectInput/SelectInput.js +23 -22
- package/__inner__/cjs/components/Select/components/SelectInput/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/components/SelectInput/index.js +1 -0
- package/__inner__/cjs/components/Select/components/SelectInput/types.d.ts +89 -0
- package/__inner__/cjs/components/Select/components/SelectInput/types.js +2 -0
- package/__inner__/cjs/components/Select/components/index.d.ts +0 -1
- package/__inner__/cjs/components/Select/components/index.js +0 -1
- package/__inner__/cjs/components/Select/constants.d.ts +1 -1
- package/__inner__/cjs/components/Select/constants.js +2 -2
- package/__inner__/cjs/components/Select/helpers/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/helpers/index.js +4 -0
- package/__inner__/cjs/components/Select/helpers/types.d.ts +8 -0
- package/__inner__/cjs/components/Select/helpers/types.js +7 -0
- package/__inner__/cjs/components/Select/index.d.ts +2 -1
- package/__inner__/cjs/components/Select/index.js +5 -4
- package/__inner__/cjs/components/Select/types.d.ts +31 -18
- package/__inner__/cjs/components/Textarea/Textarea.js +1 -1
- package/__inner__/cjs/components/Textarea/types.d.ts +2 -2
- package/__inner__/cjs/utils/scrollContainerToElement.d.ts +3 -4
- package/__inner__/esm/components/DataList/DataList.css +19 -46
- package/__inner__/esm/components/DataList/DataList.js +101 -40
- package/__inner__/esm/components/DataList/components/DataListCheckIcon/DataListCheckIcon.css +13 -0
- package/__inner__/esm/components/{Select/components/SelectCheckIcon/SelectCheckIcon.d.ts → DataList/components/DataListCheckIcon/DataListCheckIcon.d.ts} +2 -2
- package/__inner__/esm/components/DataList/components/DataListCheckIcon/DataListCheckIcon.js +11 -0
- package/__inner__/esm/components/DataList/components/DataListCheckIcon/index.d.ts +1 -0
- package/__inner__/esm/components/DataList/components/DataListCheckIcon/index.js +1 -0
- package/__inner__/esm/components/DataList/components/DataListOption/DataListOption.css +20 -0
- package/__inner__/{cjs/components/DataList/components → esm/components/DataList/components/DataListOption}/DataListOption.d.ts +15 -4
- package/__inner__/esm/components/DataList/components/DataListOption/DataListOption.js +36 -0
- package/__inner__/esm/components/DataList/components/DataListOption/index.d.ts +1 -0
- package/__inner__/esm/components/DataList/components/DataListOption/index.js +1 -0
- package/__inner__/esm/components/DataList/constants.d.ts +1 -0
- package/__inner__/esm/components/DataList/constants.js +2 -0
- package/__inner__/esm/components/DataList/helpers/index.d.ts +4 -0
- package/__inner__/esm/components/DataList/helpers/index.js +4 -0
- package/__inner__/esm/components/DataList/helpers/lastSelectedValue.d.ts +1 -0
- package/__inner__/esm/components/DataList/helpers/lastSelectedValue.js +4 -0
- package/__inner__/esm/components/DataList/helpers/types.d.ts +10 -0
- package/__inner__/esm/components/DataList/helpers/types.js +2 -0
- package/__inner__/esm/components/DataList/helpers/useDataListNavigation.d.ts +23 -0
- package/__inner__/esm/components/DataList/helpers/useDataListNavigation.js +81 -0
- package/__inner__/esm/components/DataList/helpers/useScrollContainerToElement.d.ts +3 -0
- package/__inner__/esm/components/DataList/helpers/useScrollContainerToElement.js +11 -0
- package/__inner__/esm/components/DataList/types.d.ts +3 -4
- package/__inner__/esm/components/DataList/types.js +1 -2
- package/__inner__/esm/components/FieldControl/FieldControl.js +1 -0
- package/__inner__/esm/components/IconButton/IconButton.css +1 -1
- package/__inner__/esm/components/Input/Input.js +1 -1
- package/__inner__/esm/components/Input/types.d.ts +3 -2
- package/__inner__/esm/components/Select/Select.css +33 -128
- package/__inner__/esm/components/Select/Select.d.ts +2 -3
- package/__inner__/esm/components/Select/Select.js +96 -84
- package/__inner__/esm/components/Select/components/SelectConsumer/SelectInputConsumer.d.ts +5 -0
- package/__inner__/esm/components/Select/components/SelectConsumer/SelectInputConsumer.js +17 -0
- package/__inner__/esm/components/Select/components/SelectConsumer/index.d.ts +1 -0
- package/__inner__/esm/components/Select/components/SelectConsumer/index.js +1 -0
- package/__inner__/esm/components/Select/components/SelectInput/SelectInput.d.ts +1 -72
- package/__inner__/esm/components/Select/components/SelectInput/SelectInput.js +25 -24
- package/__inner__/esm/components/Select/components/SelectInput/index.d.ts +1 -0
- package/__inner__/esm/components/Select/components/SelectInput/index.js +1 -0
- package/__inner__/esm/components/Select/components/SelectInput/types.d.ts +89 -0
- package/__inner__/esm/components/Select/components/SelectInput/types.js +1 -0
- package/__inner__/esm/components/Select/components/index.d.ts +0 -1
- package/__inner__/esm/components/Select/components/index.js +0 -1
- package/__inner__/esm/components/Select/constants.d.ts +1 -1
- package/__inner__/esm/components/Select/constants.js +1 -1
- package/__inner__/esm/components/Select/helpers/index.d.ts +1 -0
- package/__inner__/esm/components/Select/helpers/index.js +1 -0
- package/__inner__/esm/components/Select/helpers/types.d.ts +8 -0
- package/__inner__/esm/components/Select/helpers/types.js +2 -0
- package/__inner__/esm/components/Select/index.d.ts +2 -1
- package/__inner__/esm/components/Select/index.js +2 -1
- package/__inner__/esm/components/Select/types.d.ts +31 -18
- package/__inner__/esm/components/Textarea/Textarea.js +1 -1
- package/__inner__/esm/components/Textarea/types.d.ts +2 -2
- package/__inner__/esm/utils/scrollContainerToElement.d.ts +3 -4
- package/package.json +1 -1
- package/__inner__/cjs/components/DataList/DataListProvider.d.ts +0 -16
- package/__inner__/cjs/components/DataList/DataListProvider.js +0 -11
- package/__inner__/cjs/components/DataList/components/DataListOption.js +0 -40
- package/__inner__/cjs/components/DataList/useDataListNavigation.d.ts +0 -23
- package/__inner__/cjs/components/DataList/useDataListNavigation.js +0 -109
- package/__inner__/cjs/components/Select/components/SelectCheckIcon/SelectCheckIcon.css +0 -13
- package/__inner__/cjs/components/Select/components/SelectCheckIcon/SelectCheckIcon.js +0 -14
- package/__inner__/cjs/components/Select/components/SelectCheckIcon/index.d.ts +0 -1
- package/__inner__/esm/components/DataList/DataListProvider.d.ts +0 -16
- package/__inner__/esm/components/DataList/DataListProvider.js +0 -7
- package/__inner__/esm/components/DataList/components/DataListOption.js +0 -37
- package/__inner__/esm/components/DataList/useDataListNavigation.d.ts +0 -23
- package/__inner__/esm/components/DataList/useDataListNavigation.js +0 -105
- package/__inner__/esm/components/Select/components/SelectCheckIcon/SelectCheckIcon.css +0 -13
- package/__inner__/esm/components/Select/components/SelectCheckIcon/SelectCheckIcon.js +0 -9
- package/__inner__/esm/components/Select/components/SelectCheckIcon/index.d.ts +0 -1
- package/__inner__/esm/components/Select/components/SelectCheckIcon/index.js +0 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
import type { ScrollContainerToElement } from '../../../utils/scrollContainerToElement';
|
|
3
|
+
export declare function useScrollContainerToElement(container: RefObject<HTMLElement>, element: RefObject<HTMLElement>, behavior?: ScrollContainerToElement['behavior']): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useScrollContainerToElement = void 0;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var scrollContainerToElement_1 = require("../../../utils/scrollContainerToElement");
|
|
6
|
+
function useScrollContainerToElement(container, element, behavior) {
|
|
7
|
+
(0, react_1.useEffect)(function () {
|
|
8
|
+
(0, scrollContainerToElement_1.scrollContainerToElement)({
|
|
9
|
+
container: container.current,
|
|
10
|
+
element: element.current,
|
|
11
|
+
behavior: behavior,
|
|
12
|
+
});
|
|
13
|
+
}, [container, element]);
|
|
14
|
+
}
|
|
15
|
+
exports.useScrollContainerToElement = useScrollContainerToElement;
|
|
@@ -5,11 +5,12 @@ import type { PolymorphicComponentPropsWithRef, PolymorphicComponentRef } from '
|
|
|
5
5
|
import type { ListProps } from '../List';
|
|
6
6
|
import type { PopoverBaseProps } from '../Popover';
|
|
7
7
|
import type { DATA_LIST_DEFAULT_TAG } from './constants';
|
|
8
|
+
export type DataListValue = string | number;
|
|
9
|
+
export type DataListSelected<MULTIPLE extends boolean> = (MULTIPLE extends true ? DataListValue[] : DataListValue) | undefined;
|
|
8
10
|
export type DataListPayload<MULTIPLE extends boolean> = {
|
|
9
11
|
name?: string;
|
|
10
|
-
value: MULTIPLE
|
|
12
|
+
value: DataListSelected<MULTIPLE>;
|
|
11
13
|
};
|
|
12
|
-
export type DataListSelected<MULTIPLE extends boolean> = (MULTIPLE extends true ? string[] : string) | undefined;
|
|
13
14
|
export type DataListOnSelect<MULTIPLE extends boolean> = (event: React.SyntheticEvent | KeyboardEvent, payload: DataListPayload<MULTIPLE>) => void;
|
|
14
15
|
export type DataListBaseProps<MULTIPLE extends boolean = false> = {
|
|
15
16
|
/** Имя списка */
|
|
@@ -33,8 +34,6 @@ export type DataListBaseProps<MULTIPLE extends boolean = false> = {
|
|
|
33
34
|
/** Свойства компонента List */
|
|
34
35
|
listProps?: ListProps;
|
|
35
36
|
} & Omit<PopoverBaseProps, 'onSelect'>;
|
|
36
|
-
export declare const isMultipleParams: (params: DataListBaseProps<boolean>) => params is DataListBaseProps<true>;
|
|
37
|
-
export declare const isNotMultipleParams: (params: DataListBaseProps<boolean>) => params is DataListBaseProps<false>;
|
|
38
37
|
export type DataListRef = PolymorphicComponentRef<typeof DATA_LIST_DEFAULT_TAG>;
|
|
39
38
|
export type DataListProps<As extends ElementType = typeof DATA_LIST_DEFAULT_TAG, MULTIPLE extends boolean = false> = PolymorphicComponentPropsWithRef<DataListBaseProps<MULTIPLE>, As>;
|
|
40
39
|
export type DataListComponent = <As extends ElementType = typeof DATA_LIST_DEFAULT_TAG, MULTIPLE extends boolean = false>(props: PolymorphicComponentPropsWithRef<DataListBaseProps<MULTIPLE>, As>) => React.ReactElement | null;
|
|
@@ -1,7 +1,2 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isNotMultipleParams = exports.isMultipleParams = void 0;
|
|
4
|
-
var isMultipleParams = function (params) { return !!params.multiple; };
|
|
5
|
-
exports.isMultipleParams = isMultipleParams;
|
|
6
|
-
var isNotMultipleParams = function (params) { return !params.multiple; };
|
|
7
|
-
exports.isNotMultipleParams = isNotMultipleParams;
|
|
@@ -21,7 +21,7 @@ exports.Input = (0, react_1.forwardRef)(function (inProps, ref) {
|
|
|
21
21
|
props: inProps,
|
|
22
22
|
name: 'Input',
|
|
23
23
|
});
|
|
24
|
-
var _a = props.size, size = _a === void 0 ? constants_1.INPUT_DEFAULT_SIZE : _a, label = props.label, error = props.error, autoFocus = props.autoFocus, placeholder = props.placeholder, id = props.id, name = props.name, type = props.type, renderLeft = props.renderLeft, renderRight = props.renderRight,
|
|
24
|
+
var _a = props.size, size = _a === void 0 ? constants_1.INPUT_DEFAULT_SIZE : _a, label = props.label, error = props.error, autoFocus = props.autoFocus, placeholder = props.placeholder, id = props.id, name = props.name, type = props.type, renderLeft = props.renderLeft, renderRight = props.renderRight, fullWidth = props.fullWidth, disabled = props.disabled, hint = props.hint, required = props.required, className = props.className, value = props.value, defaultValue = props.defaultValue, onChange = props.onChange, inputProps = props.inputProps, bodyProps = props.bodyProps, labelProps = props.labelProps, inputRef = props.inputRef, labelRef = props.labelRef, other = tslib_1.__rest(props, ["size", "label", "error", "autoFocus", "placeholder", "id", "name", "type", "renderLeft", "renderRight", "fullWidth", "disabled", "hint", "required", "className", "value", "defaultValue", "onChange", "inputProps", "bodyProps", "labelProps", "inputRef", "labelRef"]);
|
|
25
25
|
var bodyInnerRef = (0, react_1.useRef)(null);
|
|
26
26
|
var fieldInnerRef = (0, react_1.useRef)(null);
|
|
27
27
|
/* Хук useEventListener необходим для того, чтобы при нажатии на кнопку мыши
|
|
@@ -8,12 +8,13 @@ export type InputTypeVariant = (typeof inputTypeVariant)[number];
|
|
|
8
8
|
export type InputSizeVariant = FormElementSizeVariant;
|
|
9
9
|
type InputPropsDeprecated = {
|
|
10
10
|
/**
|
|
11
|
-
* deprecated
|
|
12
11
|
* Ссылка на FieldLabel
|
|
12
|
+
* @deprecated Используйте labelProps.ref
|
|
13
13
|
* */
|
|
14
14
|
labelRef?: FieldLabelProps['ref'];
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
16
|
* Ссылка на элемент input
|
|
17
|
+
* @deprecated Используйте inputProps.ref
|
|
17
18
|
* */
|
|
18
19
|
inputRef?: Ref<HTMLInputElement>;
|
|
19
20
|
};
|
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
/* stylelint-disable */
|
|
2
1
|
.Select {
|
|
3
|
-
--textfield-color: var(--color-content-primary);
|
|
4
|
-
--textfield-background-color: var(--color-background-primary);
|
|
5
|
-
--textfield-border-width: var(--border-width-s);
|
|
6
|
-
--textfield-border-color: var(--color-border-main);
|
|
7
|
-
font: var(--textfield-input-font);
|
|
8
|
-
display: inline-flex;
|
|
9
|
-
vertical-align: top;
|
|
10
|
-
flex-direction: column;
|
|
11
2
|
min-inline-size: 120px;
|
|
12
3
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
.Select-Input {
|
|
4
|
+
|
|
5
|
+
.Select-Input {
|
|
17
6
|
inset-block-end: 0;
|
|
18
7
|
inset-inline-start: 0;
|
|
19
8
|
position: absolute;
|
|
@@ -22,7 +11,8 @@
|
|
|
22
11
|
inline-size: 100%;
|
|
23
12
|
box-sizing: border-box;
|
|
24
13
|
}
|
|
25
|
-
|
|
14
|
+
|
|
15
|
+
.Select-Body {
|
|
26
16
|
position: relative;
|
|
27
17
|
display: flex;
|
|
28
18
|
-moz-column-gap: var(--textfield-input-gap);
|
|
@@ -37,12 +27,14 @@
|
|
|
37
27
|
cursor: pointer;
|
|
38
28
|
outline: none;
|
|
39
29
|
}
|
|
40
|
-
|
|
30
|
+
|
|
31
|
+
.Select-FieldContainer {
|
|
41
32
|
inline-size: 100%;
|
|
42
33
|
position: relative;
|
|
43
34
|
overflow: hidden;
|
|
44
35
|
}
|
|
45
|
-
|
|
36
|
+
|
|
37
|
+
.Select-Field {
|
|
46
38
|
border: none;
|
|
47
39
|
position: relative;
|
|
48
40
|
display: flex;
|
|
@@ -51,143 +43,56 @@
|
|
|
51
43
|
background: none;
|
|
52
44
|
color: var(--textfield-color);
|
|
53
45
|
box-sizing: border-box;
|
|
54
|
-
block-size: var(--textfield-input-
|
|
46
|
+
block-size: var(--textfield-input-height);
|
|
55
47
|
align-items: center;
|
|
56
48
|
}
|
|
57
|
-
|
|
49
|
+
|
|
50
|
+
.Select-Field span {
|
|
58
51
|
overflow: hidden;
|
|
59
52
|
text-overflow: ellipsis;
|
|
60
53
|
white-space: nowrap;
|
|
61
54
|
}
|
|
62
|
-
|
|
55
|
+
|
|
56
|
+
.Select-Field_asPlaceholder {
|
|
63
57
|
color: var(--color-content-tertiary);
|
|
64
58
|
}
|
|
65
|
-
|
|
59
|
+
|
|
60
|
+
.Select_multiline .Select-FieldContainer {
|
|
66
61
|
overflow: auto;
|
|
67
62
|
}
|
|
68
|
-
|
|
63
|
+
|
|
64
|
+
.Select_multiline .Select-Field {
|
|
69
65
|
block-size: initial;
|
|
70
|
-
min-block-size: var(--textfield-input-
|
|
66
|
+
min-block-size: var(--textfield-input-height);
|
|
71
67
|
}
|
|
72
|
-
|
|
68
|
+
|
|
69
|
+
.Select_multiline .Select-Field > span {
|
|
73
70
|
overflow: auto;
|
|
74
71
|
text-overflow: initial;
|
|
75
72
|
white-space: initial;
|
|
76
73
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
--textfield-input-font: var(--typography-text-2xs-font);
|
|
81
|
-
--textfield-input-padding: 8px 0 8px;
|
|
82
|
-
--textfield-input-gap: var(--space-s);
|
|
83
|
-
}
|
|
84
|
-
.Select_size_xs {
|
|
85
|
-
--textfield-gutter-x: 12px;
|
|
86
|
-
--textfield-input-block-size: 40px;
|
|
87
|
-
--textfield-input-font: var(--typography-text-xs-font);
|
|
88
|
-
--textfield-input-padding: 19px 0 4px;
|
|
89
|
-
--textfield-input-gap: var(--space-s);
|
|
90
|
-
}
|
|
91
|
-
.Select_size_s {
|
|
92
|
-
--textfield-gutter-x: 16px;
|
|
93
|
-
--textfield-input-block-size: 48px;
|
|
94
|
-
--textfield-input-font: var(--typography-text-s-font);
|
|
95
|
-
--textfield-input-padding: 21px 0 6px;
|
|
96
|
-
--textfield-input-gap: var(--space-m);
|
|
97
|
-
}
|
|
98
|
-
.Select_size_m {
|
|
99
|
-
--textfield-gutter-x: 20px;
|
|
100
|
-
--textfield-input-block-size: 56px;
|
|
101
|
-
--textfield-input-font: var(--typography-text-m-font);
|
|
102
|
-
--textfield-input-padding: 24px 0 6px;
|
|
103
|
-
--textfield-input-gap: var(--space-m);
|
|
104
|
-
}
|
|
105
|
-
.Select_size_l {
|
|
106
|
-
--textfield-gutter-x: 24px;
|
|
107
|
-
--textfield-input-block-size: 64px;
|
|
108
|
-
--textfield-input-font: var(--typography-text-l-font);
|
|
109
|
-
--textfield-input-padding: 26px 0 6px;
|
|
110
|
-
--textfield-input-gap: var(--space-l);
|
|
111
|
-
}
|
|
112
|
-
.Select_fullWidth {
|
|
113
|
-
inline-size: 100%;
|
|
114
|
-
}
|
|
115
|
-
.Select_hasLabel .Select-Field {
|
|
116
|
-
padding: var(--textfield-input-padding);
|
|
117
|
-
font: var(--textfield-input-font);
|
|
118
|
-
}
|
|
119
|
-
.Select:hover {
|
|
120
|
-
--textfield-border-color: var(--color-border-main-hover);
|
|
121
|
-
}
|
|
122
|
-
.Select_focused,
|
|
123
|
-
.Select_focused:hover {
|
|
124
|
-
--textfield-border-width: var(--border-width-m);
|
|
125
|
-
--textfield-background-color: var(--color-background-main);
|
|
126
|
-
--textfield-border-color: var(--color-border-action);
|
|
127
|
-
}
|
|
128
|
-
.Select_error,
|
|
129
|
-
.Select_error.Select:hover,
|
|
130
|
-
.Select_error.Select_focused,
|
|
131
|
-
.Select_error.Select_focused:hover {
|
|
132
|
-
--textfield-border-color: var(--color-border-error);
|
|
133
|
-
}
|
|
134
|
-
.Select_disabled {
|
|
135
|
-
--textfield-border-color: var(--color-border-disabled);
|
|
136
|
-
--textfield-background-color: var(--color-background-disabled);
|
|
137
|
-
--textfield-color: var(--color-content-secondary);
|
|
138
|
-
pointer-events: none;
|
|
139
|
-
cursor: default;
|
|
140
|
-
}
|
|
141
|
-
.Select-RenderLeft {
|
|
142
|
-
pointer-events: none;
|
|
143
|
-
}
|
|
144
|
-
.Select-RenderRight {
|
|
74
|
+
|
|
75
|
+
.Select-RenderLeft,
|
|
76
|
+
.Select-RenderRight {
|
|
145
77
|
pointer-events: none;
|
|
146
78
|
}
|
|
147
|
-
|
|
79
|
+
|
|
80
|
+
.Select-DropDownIcon {
|
|
148
81
|
display: flex;
|
|
149
82
|
align-items: center;
|
|
150
83
|
transition: transform var(--transition-default);
|
|
151
84
|
will-change: transform;
|
|
152
85
|
}
|
|
153
|
-
|
|
86
|
+
|
|
87
|
+
.Select-DropDownIcon_open {
|
|
154
88
|
transform: rotate(180deg);
|
|
155
89
|
}
|
|
90
|
+
|
|
91
|
+
.FieldControl_hasLabel .Select-Field {
|
|
92
|
+
padding: var(--textfield-input-padding);
|
|
93
|
+
font: var(--textfield-input-font);
|
|
94
|
+
}
|
|
95
|
+
|
|
156
96
|
.Select .ListItemButton::after {
|
|
157
97
|
content: none;
|
|
158
98
|
}
|
|
159
|
-
.Select_animation-enter {
|
|
160
|
-
opacity: 0;
|
|
161
|
-
transform: translate(0, calc(var(--space-s) * -1));
|
|
162
|
-
pointer-events: none;
|
|
163
|
-
}
|
|
164
|
-
.Select_animation-enter-active {
|
|
165
|
-
opacity: 1;
|
|
166
|
-
transition:
|
|
167
|
-
opacity var(--transition-default),
|
|
168
|
-
transform var(--transition-default);
|
|
169
|
-
transform: translate(0);
|
|
170
|
-
pointer-events: none;
|
|
171
|
-
}
|
|
172
|
-
.Select_animation-enter-done {
|
|
173
|
-
opacity: 1;
|
|
174
|
-
transform: translate(0);
|
|
175
|
-
}
|
|
176
|
-
.Select_animation-exit {
|
|
177
|
-
opacity: 1;
|
|
178
|
-
transform: translate(0);
|
|
179
|
-
pointer-events: none;
|
|
180
|
-
}
|
|
181
|
-
.Select_animation-exit-active {
|
|
182
|
-
opacity: 0;
|
|
183
|
-
transition:
|
|
184
|
-
opacity var(--transition-default),
|
|
185
|
-
transform var(--transition-default);
|
|
186
|
-
transform: translate(0, calc(var(--space-s) * -1));
|
|
187
|
-
pointer-events: none;
|
|
188
|
-
}
|
|
189
|
-
.Select_animation-exit-done {
|
|
190
|
-
opacity: 0;
|
|
191
|
-
transform: translate(0, calc(var(--space-s) * -1));
|
|
192
|
-
pointer-events: none;
|
|
193
|
-
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import './Select.css';
|
|
2
|
-
import
|
|
3
|
-
import type { SelectProps } from './types';
|
|
2
|
+
import type { SelectComponent } from './types';
|
|
4
3
|
export declare const cnSelect: import("@bem-react/classname").ClassNameFormatter;
|
|
5
|
-
export declare const Select:
|
|
4
|
+
export declare const Select: SelectComponent;
|
|
@@ -5,48 +5,70 @@ var tslib_1 = require("tslib");
|
|
|
5
5
|
require("./Select.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
|
-
var useClickOutside_1 = require("../../hooks/useClickOutside");
|
|
10
8
|
var useControlled_1 = require("../../hooks/useControlled");
|
|
11
9
|
var useMultiRef_1 = require("../../hooks/useMultiRef");
|
|
12
10
|
var useThemeProps_1 = require("../../hooks/useThemeProps");
|
|
13
11
|
var classname_1 = require("../../utils/classname");
|
|
14
|
-
var getIconSizeToFormElement_1 = require("../../utils/getIconSizeToFormElement");
|
|
15
12
|
var isKey_1 = require("../../utils/isKey");
|
|
16
|
-
var
|
|
13
|
+
var DataList_1 = require("../DataList");
|
|
17
14
|
var components_1 = require("./components");
|
|
18
15
|
var constants_1 = require("./constants");
|
|
19
|
-
var
|
|
16
|
+
var helpers_1 = require("./helpers");
|
|
20
17
|
exports.cnSelect = (0, classname_1.cn)('Select');
|
|
21
|
-
|
|
18
|
+
var SelectRender = function (inProps, ref) {
|
|
22
19
|
var props = (0, useThemeProps_1.useThemeProps)({
|
|
23
20
|
props: inProps,
|
|
24
21
|
name: 'Select',
|
|
25
22
|
});
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
|
|
29
|
-
var
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var iconSize = (0, getIconSizeToFormElement_1.getIconSizeToFormElement)(size);
|
|
33
|
-
var currentOption = {};
|
|
34
|
-
var _l = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
23
|
+
var _a = props.size, size = _a === void 0 ? constants_1.SELECT_DEFAULT_SIZE : _a, _b = props.autoFocus, autoFocus = _b === void 0 ? constants_1.SELECT_DEFAULT_AUTO_FOCUS : _b, _c = props.fullWidth, fullWidth = _c === void 0 ? constants_1.SELECT_DEFAULT_FULL_WIDTH : _c, _d = props.disabled, disabled = _d === void 0 ? constants_1.SELECT_DEFAULT_DISABLED : _d, _e = props.required, required = _e === void 0 ? constants_1.SELECT_DEFAULT_REQUIRED : _e, _f = props.multiline, multiline = _f === void 0 ? constants_1.SELECT_DEFAULT_MULTILINE : _f, _g = props.defaultOpen, defaultOpen = _g === void 0 ? constants_1.SELECT_DEFAULT_DEFAULT_OPEN : _g, id = props.id, name = props.name, valueProp = props.value, defaultValue = props.defaultValue, error = props.error, onChange = props.onChange, label = props.label, placeholder = props.placeholder, renderValueProp = props.renderValue, renderLeft = props.renderLeft, renderRight = props.renderRight, hint = props.hint, children = props.children, onClick = props.onClick, onKeyDown = props.onKeyDown, menuProps = props.menuProps, dataListPropsProp = props.dataListProps, bodyProps = props.bodyProps, bodeRefProp = props.bodyRef, onCloseProp = props.onClose, onOpenProp = props.onOpen, openProp = props.open, multiple = props.multiple, other = tslib_1.__rest(props, ["size", "autoFocus", "fullWidth", "disabled", "required", "multiline", "defaultOpen", "id", "name", "value", "defaultValue", "error", "onChange", "label", "placeholder", "renderValue", "renderLeft", "renderRight", "hint", "children", "onClick", "onKeyDown", "menuProps", "dataListProps", "bodyProps", "bodyRef", "onClose", "onOpen", "open", "multiple"]);
|
|
24
|
+
var bodyInnerRef = (0, react_1.useRef)(null);
|
|
25
|
+
/** @deprecated props */
|
|
26
|
+
var bodyRef = (bodyProps === null || bodyProps === void 0 ? void 0 : bodyProps.ref) || bodeRefProp;
|
|
27
|
+
var dataListProps = dataListPropsProp || menuProps;
|
|
28
|
+
var _h = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
35
29
|
value: valueProp,
|
|
36
30
|
defaultValue: defaultValue,
|
|
37
31
|
name: 'Select',
|
|
38
32
|
state: 'value',
|
|
39
|
-
}), 3), valueState =
|
|
40
|
-
var
|
|
33
|
+
}), 3), valueState = _h[0], setValueState = _h[1], isValueControlled = _h[2];
|
|
34
|
+
var _j = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
41
35
|
value: openProp,
|
|
42
36
|
defaultValue: defaultOpen,
|
|
43
37
|
name: 'Select',
|
|
44
38
|
state: 'open',
|
|
45
|
-
}), 3), open =
|
|
46
|
-
var
|
|
39
|
+
}), 3), open = _j[0], setOpen = _j[1], isOpenControlled = _j[2];
|
|
40
|
+
var currentLabel;
|
|
41
|
+
var isNotSelectOption = function (child) { return !(0, react_1.isValidElement)(child) || child.type !== DataList_1.DataListOption; };
|
|
47
42
|
var resolvedChildren = (0, react_is_1.isFragment)(children)
|
|
48
43
|
? children.props.children
|
|
49
44
|
: children;
|
|
45
|
+
react_1.Children.forEach(resolvedChildren, function (child) {
|
|
46
|
+
var _a, _b;
|
|
47
|
+
if (!isNotSelectOption(child)) {
|
|
48
|
+
var label_1 = typeof child.props.children === 'string'
|
|
49
|
+
? (_a = child.props.label) !== null && _a !== void 0 ? _a : child.props.children
|
|
50
|
+
: child.props.label;
|
|
51
|
+
var params = {
|
|
52
|
+
multiple: multiple,
|
|
53
|
+
label: currentLabel,
|
|
54
|
+
value: valueState,
|
|
55
|
+
};
|
|
56
|
+
if ((0, helpers_1.isMultipleParams)(params)) {
|
|
57
|
+
var selected = (_b = params.value) === null || _b === void 0 ? void 0 : _b.includes(child.props.value);
|
|
58
|
+
if (selected) {
|
|
59
|
+
currentLabel = tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read((params.label || [])), false), [
|
|
60
|
+
label_1,
|
|
61
|
+
], false);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if ((0, helpers_1.isNotMultipleParams)(params)) {
|
|
65
|
+
var selected = params.value === child.props.value;
|
|
66
|
+
if (selected) {
|
|
67
|
+
currentLabel = label_1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
50
72
|
var handleClose = function () {
|
|
51
73
|
setOpen(false);
|
|
52
74
|
onCloseProp === null || onCloseProp === void 0 ? void 0 : onCloseProp();
|
|
@@ -65,75 +87,64 @@ exports.Select = (0, react_1.forwardRef)(function (inProps, ref) {
|
|
|
65
87
|
handleOpen();
|
|
66
88
|
}
|
|
67
89
|
};
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
refs: [selectRef, menuRef],
|
|
72
|
-
handler: function () {
|
|
73
|
-
offFocus();
|
|
74
|
-
},
|
|
75
|
-
active: focused,
|
|
76
|
-
});
|
|
77
|
-
/** Управление фокусом элемента контроля */
|
|
78
|
-
var handleFocus = function () {
|
|
79
|
-
onFocus();
|
|
80
|
-
};
|
|
81
|
-
/** Управление потерей фокуса с элемента контроля */
|
|
82
|
-
var handleBlur = function () {
|
|
83
|
-
if (!open) {
|
|
84
|
-
offFocus();
|
|
85
|
-
}
|
|
90
|
+
var handleClick = function (event) {
|
|
91
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(event);
|
|
92
|
+
handleToggle();
|
|
86
93
|
};
|
|
87
94
|
/** Управление элементом контроля через клавиатуру */
|
|
88
95
|
var handleKeyDown = function (event) {
|
|
89
|
-
if ((0, isKey_1.isKey)(event, '
|
|
90
|
-
(0, isKey_1.isKey)(event, 'Space') ||
|
|
96
|
+
if (((0, isKey_1.isKey)(event, 'Space') ||
|
|
91
97
|
(0, isKey_1.isKey)(event, 'ArrowDown') ||
|
|
92
|
-
(0, isKey_1.isKey)(event, 'ArrowUp'))
|
|
98
|
+
(0, isKey_1.isKey)(event, 'ArrowUp')) &&
|
|
99
|
+
!open) {
|
|
93
100
|
event.preventDefault();
|
|
94
101
|
handleToggle();
|
|
95
102
|
}
|
|
103
|
+
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
|
|
96
104
|
};
|
|
97
105
|
/** Событие выбора значения из раскрывающегося списка */
|
|
98
|
-
var handleChange = function (
|
|
106
|
+
var handleChange = function (event, _a) {
|
|
107
|
+
var value = _a.value;
|
|
99
108
|
if (!isValueControlled || onChange) {
|
|
100
109
|
setValueState(value);
|
|
101
110
|
}
|
|
102
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(value,
|
|
103
|
-
|
|
111
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
|
|
112
|
+
if (!multiple)
|
|
113
|
+
handleClose();
|
|
104
114
|
};
|
|
105
|
-
/** Представление раскрывающегося списка */
|
|
106
|
-
var renderChildren = react_1.Children.map(resolvedChildren, function (child) {
|
|
107
|
-
if (isNotSelectOption(child)) {
|
|
108
|
-
return child;
|
|
109
|
-
}
|
|
110
|
-
var elementChild = child;
|
|
111
|
-
var label = typeof child.props.children === 'string'
|
|
112
|
-
? child.props.children || child.props.label
|
|
113
|
-
: child.props.label;
|
|
114
|
-
var selected = valueState === child.props.value;
|
|
115
|
-
var props = tslib_1.__assign(tslib_1.__assign({}, child.props), { onClick: function (event) {
|
|
116
|
-
var _a, _b;
|
|
117
|
-
handleChange(event, child.props.value || '');
|
|
118
|
-
(_b = (_a = child.props).onClick) === null || _b === void 0 ? void 0 : _b.call(_a, event);
|
|
119
|
-
} });
|
|
120
|
-
if (selected) {
|
|
121
|
-
currentOption = {
|
|
122
|
-
label: label,
|
|
123
|
-
value: child.props.value,
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
if (typeof child.props.children === 'string') {
|
|
127
|
-
return (react_1.default.createElement(index_1.Option, tslib_1.__assign({}, props, { ref: ref, selected: selected }),
|
|
128
|
-
react_1.default.createElement(index_1.OptionItemText, { primary: label || '' }),
|
|
129
|
-
react_1.default.createElement(components_1.SelectCheckIcon, { size: iconSize, selected: selected })));
|
|
130
|
-
}
|
|
131
|
-
return react_1.default.cloneElement(elementChild, tslib_1.__assign({}, props));
|
|
132
|
-
});
|
|
133
115
|
/** Представление значение элемента контроля по умолчанию */
|
|
134
116
|
var renderDefaultValue = function (option) {
|
|
135
117
|
var _a = option.label, label = _a === void 0 ? '' : _a, _b = option.value, value = _b === void 0 ? '' : _b;
|
|
136
|
-
|
|
118
|
+
if (!value && value !== 0) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
var params = {
|
|
122
|
+
multiple: multiple,
|
|
123
|
+
label: label,
|
|
124
|
+
value: value,
|
|
125
|
+
};
|
|
126
|
+
if ((0, helpers_1.isMultipleParams)(params)) {
|
|
127
|
+
return react_1.default.createElement("span", null, tslib_1.__spreadArray([], tslib_1.__read(params.label), false).join(', '));
|
|
128
|
+
}
|
|
129
|
+
if ((0, helpers_1.isNotMultipleParams)(params)) {
|
|
130
|
+
return react_1.default.createElement("span", null, params.label);
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
};
|
|
134
|
+
/** Значение для текстового поля компонента */
|
|
135
|
+
var inputValue = function () {
|
|
136
|
+
var _a;
|
|
137
|
+
var params = {
|
|
138
|
+
multiple: multiple,
|
|
139
|
+
value: valueState,
|
|
140
|
+
};
|
|
141
|
+
if ((0, helpers_1.isMultipleParams)(params)) {
|
|
142
|
+
return (_a = params.value) === null || _a === void 0 ? void 0 : _a.join(',');
|
|
143
|
+
}
|
|
144
|
+
if ((0, helpers_1.isNotMultipleParams)(params)) {
|
|
145
|
+
return params.value;
|
|
146
|
+
}
|
|
147
|
+
return '';
|
|
137
148
|
};
|
|
138
149
|
/** Представление значение элемента контроля */
|
|
139
150
|
var renderValue = renderValueProp || renderDefaultValue;
|
|
@@ -143,20 +154,21 @@ exports.Select = (0, react_1.forwardRef)(function (inProps, ref) {
|
|
|
143
154
|
* если компонент по умолчанию открыт – defaultOpen={true}
|
|
144
155
|
* и является неконтролируемым */
|
|
145
156
|
if (defaultOpen && !isOpenControlled) {
|
|
146
|
-
(_a =
|
|
157
|
+
(_a = bodyInnerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
147
158
|
}
|
|
148
159
|
}, [open]);
|
|
149
160
|
(0, react_1.useEffect)(function () {
|
|
150
161
|
var _a;
|
|
151
162
|
/** Автофокус на элементе контроля */
|
|
152
163
|
if (autoFocus) {
|
|
153
|
-
(_a =
|
|
164
|
+
(_a = bodyInnerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
154
165
|
}
|
|
155
166
|
}, [autoFocus]);
|
|
156
167
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
157
|
-
react_1.default.createElement(components_1.SelectInput, tslib_1.__assign({ id: id, name: name,
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
|
|
168
|
+
react_1.default.createElement(components_1.SelectInput, tslib_1.__assign({ id: id, name: name, label: label, placeholder: placeholder, size: size, disabled: disabled, required: required, multiline: multiline, error: error, hint: hint, fullWidth: fullWidth, renderLeft: renderLeft, renderRight: renderRight }, other, { open: open, value: inputValue() || '', onKeyDown: handleKeyDown, onClick: handleClick, bodyProps: tslib_1.__assign(tslib_1.__assign({}, bodyProps), { ref: (0, useMultiRef_1.useMultiRef)([bodyRef, bodyInnerRef]) }), ref: ref, renderedValue: renderValue({
|
|
169
|
+
label: currentLabel,
|
|
170
|
+
value: valueState,
|
|
171
|
+
}) })),
|
|
172
|
+
react_1.default.createElement(DataList_1.DataList, tslib_1.__assign({ equalAnchorWidth: true }, dataListProps, { listProps: tslib_1.__assign({ size: size, role: 'listbox' }, dataListProps === null || dataListProps === void 0 ? void 0 : dataListProps.listProps), open: open, multiple: multiple, selected: (valueState || ''), onSelect: handleChange, anchorRef: bodyInnerRef, onClose: handleClose }), children)));
|
|
173
|
+
};
|
|
174
|
+
exports.Select = (0, react_1.forwardRef)(SelectRender);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FC } from 'react';
|
|
2
|
+
import type { SelectInputProps } from '../SelectInput';
|
|
3
|
+
type SelectInputConsumerProps = Pick<SelectInputProps, 'value' | 'placeholder' | 'defaultValue' | 'id' | 'name' | 'fieldProps' | 'fieldRef' | 'inputProps' | 'inputRef' | 'renderedValue'>;
|
|
4
|
+
export declare const SelectInputConsumer: FC<SelectInputConsumerProps>;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SelectInputConsumer = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
var FieldControl_1 = require("../../../FieldControl");
|
|
7
|
+
var index_1 = require("../../index");
|
|
8
|
+
var SelectInputConsumer = function (_a) {
|
|
9
|
+
var id = _a.id, name = _a.name, _b = _a.value, valueProp = _b === void 0 ? '' : _b, placeholderProp = _a.placeholder, defaultValue = _a.defaultValue, inputProps = _a.inputProps, inputRef = _a.inputRef, fieldRef = _a.fieldRef, fieldProps = _a.fieldProps, renderedValue = _a.renderedValue;
|
|
10
|
+
var context = (0, react_1.useContext)(FieldControl_1.FieldControlContext);
|
|
11
|
+
var _c = tslib_1.__read(context, 1), fieldControl = _c[0];
|
|
12
|
+
var disabled = fieldControl.disabled, required = fieldControl.required, filled = fieldControl.filled, focused = fieldControl.focused, label = fieldControl.label;
|
|
13
|
+
var hasLabel = !!label;
|
|
14
|
+
var placeholder = (focused || !hasLabel) && !valueProp && placeholderProp;
|
|
15
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
16
|
+
react_1.default.createElement("div", tslib_1.__assign({}, fieldProps, { className: (0, index_1.cnSelect)('Field', { filled: filled, asPlaceholder: !!placeholder }, [
|
|
17
|
+
fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.className,
|
|
18
|
+
]), ref: fieldRef }), placeholder || renderedValue),
|
|
19
|
+
react_1.default.createElement("input", tslib_1.__assign({ id: id, name: name, defaultValue: defaultValue, value: valueProp, disabled: disabled, required: required, tabIndex: -1, "aria-hidden": true, readOnly: true }, inputProps, { className: (0, index_1.cnSelect)('Input', [inputProps === null || inputProps === void 0 ? void 0 : inputProps.className]), ref: inputRef }))));
|
|
20
|
+
};
|
|
21
|
+
exports.SelectInputConsumer = SelectInputConsumer;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SelectInputConsumer';
|