@ozen-ui/kit 0.16.1 → 0.17.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/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/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
|
@@ -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;
|
|
@@ -1,49 +1,71 @@
|
|
|
1
|
-
import { __assign, __read, __rest } from "tslib";
|
|
1
|
+
import { __assign, __read, __rest, __spreadArray } from "tslib";
|
|
2
2
|
import './Select.css';
|
|
3
|
-
import React, { useRef, useEffect, forwardRef,
|
|
3
|
+
import React, { useRef, useEffect, forwardRef, isValidElement, Children, } from 'react';
|
|
4
4
|
import { isFragment } from 'react-is';
|
|
5
|
-
import { useBoolean } from '../../hooks/useBoolean';
|
|
6
|
-
import { useClickOutside } from '../../hooks/useClickOutside';
|
|
7
5
|
import { useControlled } from '../../hooks/useControlled';
|
|
8
6
|
import { useMultiRef } from '../../hooks/useMultiRef';
|
|
9
7
|
import { useThemeProps } from '../../hooks/useThemeProps';
|
|
10
8
|
import { cn } from '../../utils/classname';
|
|
11
|
-
import { getIconSizeToFormElement } from '../../utils/getIconSizeToFormElement';
|
|
12
9
|
import { isKey } from '../../utils/isKey';
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { SELECT_DEFAULT_AUTO_FOCUS, SELECT_DEFAULT_DEFAULT_OPEN, SELECT_DEFAULT_DISABLED, SELECT_DEFAULT_FULL_WIDTH, SELECT_DEFAULT_MULTILINE, SELECT_DEFAULT_REQUIRED,
|
|
16
|
-
import {
|
|
10
|
+
import { DataList, DataListOption } from '../DataList';
|
|
11
|
+
import { SelectInput } from './components';
|
|
12
|
+
import { SELECT_DEFAULT_AUTO_FOCUS, SELECT_DEFAULT_DEFAULT_OPEN, SELECT_DEFAULT_DISABLED, SELECT_DEFAULT_FULL_WIDTH, SELECT_DEFAULT_MULTILINE, SELECT_DEFAULT_REQUIRED, SELECT_DEFAULT_SIZE, } from './constants';
|
|
13
|
+
import { isMultipleParams, isNotMultipleParams } from './helpers';
|
|
17
14
|
export var cnSelect = cn('Select');
|
|
18
|
-
|
|
15
|
+
var SelectRender = function (inProps, ref) {
|
|
19
16
|
var props = useThemeProps({
|
|
20
17
|
props: inProps,
|
|
21
18
|
name: 'Select',
|
|
22
19
|
});
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
var iconSize = getIconSizeToFormElement(size);
|
|
30
|
-
var currentOption = {};
|
|
31
|
-
var _l = __read(useControlled({
|
|
20
|
+
var _a = props.size, size = _a === void 0 ? SELECT_DEFAULT_SIZE : _a, _b = props.autoFocus, autoFocus = _b === void 0 ? SELECT_DEFAULT_AUTO_FOCUS : _b, _c = props.fullWidth, fullWidth = _c === void 0 ? SELECT_DEFAULT_FULL_WIDTH : _c, _d = props.disabled, disabled = _d === void 0 ? SELECT_DEFAULT_DISABLED : _d, _e = props.required, required = _e === void 0 ? SELECT_DEFAULT_REQUIRED : _e, _f = props.multiline, multiline = _f === void 0 ? SELECT_DEFAULT_MULTILINE : _f, _g = props.defaultOpen, defaultOpen = _g === void 0 ? 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 = __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"]);
|
|
21
|
+
var bodyInnerRef = useRef(null);
|
|
22
|
+
/** @deprecated props */
|
|
23
|
+
var bodyRef = (bodyProps === null || bodyProps === void 0 ? void 0 : bodyProps.ref) || bodeRefProp;
|
|
24
|
+
var dataListProps = dataListPropsProp || menuProps;
|
|
25
|
+
var _h = __read(useControlled({
|
|
32
26
|
value: valueProp,
|
|
33
27
|
defaultValue: defaultValue,
|
|
34
28
|
name: 'Select',
|
|
35
29
|
state: 'value',
|
|
36
|
-
}), 3), valueState =
|
|
37
|
-
var
|
|
30
|
+
}), 3), valueState = _h[0], setValueState = _h[1], isValueControlled = _h[2];
|
|
31
|
+
var _j = __read(useControlled({
|
|
38
32
|
value: openProp,
|
|
39
33
|
defaultValue: defaultOpen,
|
|
40
34
|
name: 'Select',
|
|
41
35
|
state: 'open',
|
|
42
|
-
}), 3), open =
|
|
43
|
-
var
|
|
36
|
+
}), 3), open = _j[0], setOpen = _j[1], isOpenControlled = _j[2];
|
|
37
|
+
var currentLabel;
|
|
38
|
+
var isNotSelectOption = function (child) { return !isValidElement(child) || child.type !== DataListOption; };
|
|
44
39
|
var resolvedChildren = isFragment(children)
|
|
45
40
|
? children.props.children
|
|
46
41
|
: children;
|
|
42
|
+
Children.forEach(resolvedChildren, function (child) {
|
|
43
|
+
var _a, _b;
|
|
44
|
+
if (!isNotSelectOption(child)) {
|
|
45
|
+
var label_1 = typeof child.props.children === 'string'
|
|
46
|
+
? (_a = child.props.label) !== null && _a !== void 0 ? _a : child.props.children
|
|
47
|
+
: child.props.label;
|
|
48
|
+
var params = {
|
|
49
|
+
multiple: multiple,
|
|
50
|
+
label: currentLabel,
|
|
51
|
+
value: valueState,
|
|
52
|
+
};
|
|
53
|
+
if (isMultipleParams(params)) {
|
|
54
|
+
var selected = (_b = params.value) === null || _b === void 0 ? void 0 : _b.includes(child.props.value);
|
|
55
|
+
if (selected) {
|
|
56
|
+
currentLabel = __spreadArray(__spreadArray([], __read((params.label || [])), false), [
|
|
57
|
+
label_1,
|
|
58
|
+
], false);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (isNotMultipleParams(params)) {
|
|
62
|
+
var selected = params.value === child.props.value;
|
|
63
|
+
if (selected) {
|
|
64
|
+
currentLabel = label_1;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
47
69
|
var handleClose = function () {
|
|
48
70
|
setOpen(false);
|
|
49
71
|
onCloseProp === null || onCloseProp === void 0 ? void 0 : onCloseProp();
|
|
@@ -62,75 +84,64 @@ export var Select = forwardRef(function (inProps, ref) {
|
|
|
62
84
|
handleOpen();
|
|
63
85
|
}
|
|
64
86
|
};
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
refs: [selectRef, menuRef],
|
|
69
|
-
handler: function () {
|
|
70
|
-
offFocus();
|
|
71
|
-
},
|
|
72
|
-
active: focused,
|
|
73
|
-
});
|
|
74
|
-
/** Управление фокусом элемента контроля */
|
|
75
|
-
var handleFocus = function () {
|
|
76
|
-
onFocus();
|
|
77
|
-
};
|
|
78
|
-
/** Управление потерей фокуса с элемента контроля */
|
|
79
|
-
var handleBlur = function () {
|
|
80
|
-
if (!open) {
|
|
81
|
-
offFocus();
|
|
82
|
-
}
|
|
87
|
+
var handleClick = function (event) {
|
|
88
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(event);
|
|
89
|
+
handleToggle();
|
|
83
90
|
};
|
|
84
91
|
/** Управление элементом контроля через клавиатуру */
|
|
85
92
|
var handleKeyDown = function (event) {
|
|
86
|
-
if (isKey(event, '
|
|
87
|
-
isKey(event, 'Space') ||
|
|
93
|
+
if ((isKey(event, 'Space') ||
|
|
88
94
|
isKey(event, 'ArrowDown') ||
|
|
89
|
-
isKey(event, 'ArrowUp'))
|
|
95
|
+
isKey(event, 'ArrowUp')) &&
|
|
96
|
+
!open) {
|
|
90
97
|
event.preventDefault();
|
|
91
98
|
handleToggle();
|
|
92
99
|
}
|
|
100
|
+
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
|
|
93
101
|
};
|
|
94
102
|
/** Событие выбора значения из раскрывающегося списка */
|
|
95
|
-
var handleChange = function (
|
|
103
|
+
var handleChange = function (event, _a) {
|
|
104
|
+
var value = _a.value;
|
|
96
105
|
if (!isValueControlled || onChange) {
|
|
97
106
|
setValueState(value);
|
|
98
107
|
}
|
|
99
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(value,
|
|
100
|
-
|
|
108
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
|
|
109
|
+
if (!multiple)
|
|
110
|
+
handleClose();
|
|
101
111
|
};
|
|
102
|
-
/** Представление раскрывающегося списка */
|
|
103
|
-
var renderChildren = Children.map(resolvedChildren, function (child) {
|
|
104
|
-
if (isNotSelectOption(child)) {
|
|
105
|
-
return child;
|
|
106
|
-
}
|
|
107
|
-
var elementChild = child;
|
|
108
|
-
var label = typeof child.props.children === 'string'
|
|
109
|
-
? child.props.children || child.props.label
|
|
110
|
-
: child.props.label;
|
|
111
|
-
var selected = valueState === child.props.value;
|
|
112
|
-
var props = __assign(__assign({}, child.props), { onClick: function (event) {
|
|
113
|
-
var _a, _b;
|
|
114
|
-
handleChange(event, child.props.value || '');
|
|
115
|
-
(_b = (_a = child.props).onClick) === null || _b === void 0 ? void 0 : _b.call(_a, event);
|
|
116
|
-
} });
|
|
117
|
-
if (selected) {
|
|
118
|
-
currentOption = {
|
|
119
|
-
label: label,
|
|
120
|
-
value: child.props.value,
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
if (typeof child.props.children === 'string') {
|
|
124
|
-
return (React.createElement(Option, __assign({}, props, { ref: ref, selected: selected }),
|
|
125
|
-
React.createElement(OptionItemText, { primary: label || '' }),
|
|
126
|
-
React.createElement(SelectCheckIcon, { size: iconSize, selected: selected })));
|
|
127
|
-
}
|
|
128
|
-
return React.cloneElement(elementChild, __assign({}, props));
|
|
129
|
-
});
|
|
130
112
|
/** Представление значение элемента контроля по умолчанию */
|
|
131
113
|
var renderDefaultValue = function (option) {
|
|
132
114
|
var _a = option.label, label = _a === void 0 ? '' : _a, _b = option.value, value = _b === void 0 ? '' : _b;
|
|
133
|
-
|
|
115
|
+
if (!value && value !== 0) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
var params = {
|
|
119
|
+
multiple: multiple,
|
|
120
|
+
label: label,
|
|
121
|
+
value: value,
|
|
122
|
+
};
|
|
123
|
+
if (isMultipleParams(params)) {
|
|
124
|
+
return React.createElement("span", null, __spreadArray([], __read(params.label), false).join(', '));
|
|
125
|
+
}
|
|
126
|
+
if (isNotMultipleParams(params)) {
|
|
127
|
+
return React.createElement("span", null, params.label);
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
};
|
|
131
|
+
/** Значение для текстового поля компонента */
|
|
132
|
+
var inputValue = function () {
|
|
133
|
+
var _a;
|
|
134
|
+
var params = {
|
|
135
|
+
multiple: multiple,
|
|
136
|
+
value: valueState,
|
|
137
|
+
};
|
|
138
|
+
if (isMultipleParams(params)) {
|
|
139
|
+
return (_a = params.value) === null || _a === void 0 ? void 0 : _a.join(',');
|
|
140
|
+
}
|
|
141
|
+
if (isNotMultipleParams(params)) {
|
|
142
|
+
return params.value;
|
|
143
|
+
}
|
|
144
|
+
return '';
|
|
134
145
|
};
|
|
135
146
|
/** Представление значение элемента контроля */
|
|
136
147
|
var renderValue = renderValueProp || renderDefaultValue;
|
|
@@ -140,20 +151,21 @@ export var Select = forwardRef(function (inProps, ref) {
|
|
|
140
151
|
* если компонент по умолчанию открыт – defaultOpen={true}
|
|
141
152
|
* и является неконтролируемым */
|
|
142
153
|
if (defaultOpen && !isOpenControlled) {
|
|
143
|
-
(_a =
|
|
154
|
+
(_a = bodyInnerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
144
155
|
}
|
|
145
156
|
}, [open]);
|
|
146
157
|
useEffect(function () {
|
|
147
158
|
var _a;
|
|
148
159
|
/** Автофокус на элементе контроля */
|
|
149
160
|
if (autoFocus) {
|
|
150
|
-
(_a =
|
|
161
|
+
(_a = bodyInnerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
151
162
|
}
|
|
152
163
|
}, [autoFocus]);
|
|
153
164
|
return (React.createElement(React.Fragment, null,
|
|
154
|
-
React.createElement(SelectInput, __assign({ id: id, name: name,
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
|
|
165
|
+
React.createElement(SelectInput, __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: __assign(__assign({}, bodyProps), { ref: useMultiRef([bodyRef, bodyInnerRef]) }), ref: ref, renderedValue: renderValue({
|
|
166
|
+
label: currentLabel,
|
|
167
|
+
value: valueState,
|
|
168
|
+
}) })),
|
|
169
|
+
React.createElement(DataList, __assign({ equalAnchorWidth: true }, dataListProps, { listProps: __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)));
|
|
170
|
+
};
|
|
171
|
+
export var Select = 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,17 @@
|
|
|
1
|
+
import { __assign, __read } from "tslib";
|
|
2
|
+
import React, { useContext } from 'react';
|
|
3
|
+
import { FieldControlContext } from '../../../FieldControl';
|
|
4
|
+
import { cnSelect } from '../../index';
|
|
5
|
+
export var SelectInputConsumer = function (_a) {
|
|
6
|
+
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;
|
|
7
|
+
var context = useContext(FieldControlContext);
|
|
8
|
+
var _c = __read(context, 1), fieldControl = _c[0];
|
|
9
|
+
var disabled = fieldControl.disabled, required = fieldControl.required, filled = fieldControl.filled, focused = fieldControl.focused, label = fieldControl.label;
|
|
10
|
+
var hasLabel = !!label;
|
|
11
|
+
var placeholder = (focused || !hasLabel) && !valueProp && placeholderProp;
|
|
12
|
+
return (React.createElement(React.Fragment, null,
|
|
13
|
+
React.createElement("div", __assign({}, fieldProps, { className: cnSelect('Field', { filled: filled, asPlaceholder: !!placeholder }, [
|
|
14
|
+
fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.className,
|
|
15
|
+
]), ref: fieldRef }), placeholder || renderedValue),
|
|
16
|
+
React.createElement("input", __assign({ id: id, name: name, defaultValue: defaultValue, value: valueProp, disabled: disabled, required: required, tabIndex: -1, "aria-hidden": true, readOnly: true }, inputProps, { className: cnSelect('Input', [inputProps === null || inputProps === void 0 ? void 0 : inputProps.className]), ref: inputRef }))));
|
|
17
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SelectInputConsumer';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SelectInputConsumer';
|
|
@@ -1,75 +1,4 @@
|
|
|
1
1
|
import '../../Select.css';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import type {
|
|
4
|
-
import type { FormElementSizeVariant } from '../../../../types/FormElementSizeVariant';
|
|
5
|
-
import { type FieldIconProps } from '../../../FieldIcon';
|
|
6
|
-
import { type FieldLabelProps } from '../../../FieldLabel';
|
|
7
|
-
export type SelectInputSizeVariant = FormElementSizeVariant;
|
|
8
|
-
type DivElement = HTMLAttributes<HTMLDivElement>;
|
|
9
|
-
type InputElement = InputHTMLAttributes<HTMLInputElement>;
|
|
10
|
-
export type SelectInputProps = {
|
|
11
|
-
/** Атрибут id для элемента input */
|
|
12
|
-
id?: string;
|
|
13
|
-
/** Атрибут name для элемента input */
|
|
14
|
-
name?: string;
|
|
15
|
-
/** Лейбл */
|
|
16
|
-
label?: string;
|
|
17
|
-
/** Размер компонента */
|
|
18
|
-
size?: SelectInputSizeVariant;
|
|
19
|
-
/** Подсказка. Отображается, когда вариант не выбран */
|
|
20
|
-
placeholder?: string;
|
|
21
|
-
/** Если {true} устанавливает автофокус */
|
|
22
|
-
autoFocus?: boolean;
|
|
23
|
-
/** Если {true} переводит поле в состояние ошибки */
|
|
24
|
-
error?: boolean;
|
|
25
|
-
/** Если {true} растягивает поле на всю ширину */
|
|
26
|
-
fullWidth?: boolean;
|
|
27
|
-
/** Дополнительное описание к полю */
|
|
28
|
-
hint?: string | null | undefined;
|
|
29
|
-
/** Если {true} делает элемент неактивным */
|
|
30
|
-
disabled?: boolean;
|
|
31
|
-
/** Если {true} делает элемент обязательным к заполнению */
|
|
32
|
-
required?: boolean;
|
|
33
|
-
/** Признак визуального состояния компонента с фокусом */
|
|
34
|
-
focused?: boolean;
|
|
35
|
-
/** Если {true} предотвращает сокращение текста в значении и
|
|
36
|
-
* задает гибкую высоту контейнера компонента */
|
|
37
|
-
multiline?: boolean;
|
|
38
|
-
/** Текст или иконка слева */
|
|
39
|
-
renderLeft?: FieldIconProps['icon'];
|
|
40
|
-
/** Текст или иконка справа */
|
|
41
|
-
renderRight?: FieldIconProps['icon'];
|
|
42
|
-
/** Значение для отображения */
|
|
43
|
-
renderedValue?: React.ReactNode;
|
|
44
|
-
/** Выбранное значение */
|
|
45
|
-
value?: InputElement['value'];
|
|
46
|
-
/** Значение умолчанию (неконтролируемый компонент) */
|
|
47
|
-
defaultValue?: InputElement['defaultValue'];
|
|
48
|
-
/** Ссылка на Field */
|
|
49
|
-
fieldRef?: Ref<HTMLDivElement>;
|
|
50
|
-
/** Свойства Field */
|
|
51
|
-
fieldProps?: DivElement & {
|
|
52
|
-
'data-testid'?: string;
|
|
53
|
-
};
|
|
54
|
-
/** Ссылка на элемент input */
|
|
55
|
-
inputRef?: Ref<HTMLInputElement>;
|
|
56
|
-
/** Свойства элемента input */
|
|
57
|
-
inputProps?: InputElement & {
|
|
58
|
-
'data-testid'?: string;
|
|
59
|
-
};
|
|
60
|
-
/** Ссылка на FieldLabel */
|
|
61
|
-
labelRef?: FieldLabelProps['ref'];
|
|
62
|
-
/** Свойства FieldLabel */
|
|
63
|
-
labelProps?: FieldLabelProps;
|
|
64
|
-
/** Ссылка на Body */
|
|
65
|
-
bodyRef?: Ref<HTMLDivElement>;
|
|
66
|
-
/** Свойства Body */
|
|
67
|
-
bodyProps?: DivElement;
|
|
68
|
-
/** Ссылка на корневой DOM-элемент компонента */
|
|
69
|
-
ref?: Ref<HTMLDivElement>;
|
|
70
|
-
open?: boolean;
|
|
71
|
-
'data-testid'?: string;
|
|
72
|
-
children?: never;
|
|
73
|
-
} & Omit<HTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>;
|
|
3
|
+
import type { SelectInputProps } from './types';
|
|
74
4
|
export declare const SelectInput: React.ForwardRefExoticComponent<Omit<SelectInputProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
75
|
-
export {};
|