@react-ui-org/react-ui 0.47.0 → 0.48.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/dist/lib.development.js +330 -54
- package/dist/lib.js +1 -1
- package/package.json +1 -1
- package/src/lib/components/Alert/README.mdx +4 -2
- package/src/lib/components/Alert/index.js +1 -1
- package/src/lib/components/Badge/README.mdx +1 -1
- package/src/lib/components/Badge/index.js +1 -1
- package/src/lib/components/Button/Button.jsx +31 -31
- package/src/lib/components/Button/README.mdx +4 -2
- package/src/lib/components/Button/index.js +1 -1
- package/src/lib/components/ButtonGroup/ButtonGroup.jsx +2 -1
- package/src/lib/components/ButtonGroup/README.mdx +4 -2
- package/src/lib/components/Card/README.mdx +7 -5
- package/src/lib/components/CheckboxField/CheckboxField.jsx +27 -28
- package/src/lib/components/CheckboxField/README.mdx +1 -1
- package/src/lib/components/CheckboxField/index.js +1 -1
- package/src/lib/components/FileInputField/FileInputField.jsx +27 -27
- package/src/lib/components/FileInputField/README.mdx +1 -1
- package/src/lib/components/FileInputField/index.js +1 -1
- package/src/lib/components/FormLayout/README.mdx +15 -13
- package/src/lib/components/Grid/Grid.jsx +31 -28
- package/src/lib/components/Grid/Grid.scss +10 -15
- package/src/lib/components/Grid/GridSpan.jsx +5 -4
- package/src/lib/components/Grid/README.mdx +34 -36
- package/src/lib/components/Grid/_helpers/generateResponsiveCustomProperties.js +11 -3
- package/src/lib/components/Grid/_settings.scss +18 -0
- package/src/lib/components/Grid/_tools.scss +5 -5
- package/src/lib/components/Modal/Modal.jsx +147 -250
- package/src/lib/components/Modal/Modal.scss +7 -55
- package/src/lib/components/Modal/ModalBody.jsx +64 -0
- package/src/lib/components/Modal/ModalBody.scss +18 -0
- package/src/lib/components/Modal/ModalCloseButton.jsx +61 -0
- package/src/lib/components/Modal/ModalCloseButton.scss +18 -0
- package/src/lib/components/Modal/ModalContent.jsx +43 -0
- package/src/lib/components/Modal/ModalContent.scss +5 -0
- package/src/lib/components/Modal/ModalFooter.jsx +46 -0
- package/src/lib/components/Modal/ModalFooter.scss +35 -0
- package/src/lib/components/Modal/ModalHeader.jsx +48 -0
- package/src/lib/components/Modal/ModalHeader.scss +30 -0
- package/src/lib/components/Modal/ModalTitle.jsx +45 -0
- package/src/lib/components/Modal/ModalTitle.scss +10 -0
- package/src/lib/components/Modal/README.mdx +842 -197
- package/src/lib/components/Modal/_helpers/getJustifyClassName.js +19 -0
- package/src/lib/components/Modal/_helpers/getScrollingClassName.js +11 -0
- package/src/lib/components/Modal/_settings.scss +1 -5
- package/src/lib/components/Modal/_theme.scss +6 -0
- package/src/lib/components/Modal/index.js +7 -1
- package/src/lib/components/Paper/README.mdx +1 -1
- package/src/lib/components/Paper/index.js +1 -1
- package/src/lib/components/Popover/Popover.jsx +24 -24
- package/src/lib/components/Popover/Popover.scss +7 -6
- package/src/lib/components/Popover/PopoverWrapper.jsx +5 -5
- package/src/lib/components/Popover/PopoverWrapper.scss +3 -0
- package/src/lib/components/Popover/README.mdx +13 -11
- package/src/lib/components/Popover/_theme.scss +1 -1
- package/src/lib/components/Radio/README.mdx +1 -1
- package/src/lib/components/Radio/Radio.jsx +37 -27
- package/src/lib/components/Radio/index.js +1 -1
- package/src/lib/components/ScrollView/README.mdx +146 -84
- package/src/lib/components/ScrollView/ScrollView.jsx +104 -113
- package/src/lib/components/ScrollView/ScrollView.scss +18 -16
- package/src/lib/components/ScrollView/index.js +1 -1
- package/src/lib/components/SelectField/README.mdx +66 -2
- package/src/lib/components/SelectField/SelectField.jsx +93 -49
- package/src/lib/components/SelectField/_components/Option/Option.jsx +46 -0
- package/src/lib/components/SelectField/_components/Option/index.js +1 -0
- package/src/lib/components/SelectField/index.js +1 -1
- package/src/lib/components/Table/README.mdx +4 -2
- package/src/lib/components/Table/Table.jsx +1 -1
- package/src/lib/components/Table/index.js +1 -1
- package/src/lib/components/Tabs/README.mdx +5 -3
- package/src/lib/components/Tabs/TabsItem.scss +1 -2
- package/src/lib/components/Text/README.mdx +9 -7
- package/src/lib/components/Text/index.js +1 -1
- package/src/lib/components/TextArea/README.mdx +1 -1
- package/src/lib/components/TextArea/TextArea.jsx +33 -33
- package/src/lib/components/TextArea/index.js +1 -1
- package/src/lib/components/TextField/README.mdx +3 -3
- package/src/lib/components/TextField/TextField.jsx +33 -34
- package/src/lib/components/TextField/index.js +1 -1
- package/src/lib/components/TextLink/README.mdx +1 -1
- package/src/lib/components/TextLink/index.js +1 -1
- package/src/lib/components/Toggle/README.mdx +1 -1
- package/src/lib/components/Toggle/Toggle.jsx +28 -28
- package/src/lib/components/Toggle/index.js +1 -1
- package/src/lib/components/Toolbar/README.mdx +8 -6
- package/src/lib/components/_helpers/transferProps.js +1 -1
- package/src/lib/index.js +24 -16
- package/src/lib/provider/withGlobalProps.jsx +20 -3
- package/src/lib/theme.scss +18 -26
- package/src/lib/translations/en.js +1 -1
- package/src/lib/components/Grid/_theme.scss +0 -11
- package/src/lib/components/ScrollView/_theme.scss +0 -2
- package/src/lib/components/withForwardedRef.jsx +0 -11
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// 1. Scrolling shadows are implemented as pseudo elements. This way we can customise them only
|
|
2
2
|
// with custom properties.
|
|
3
3
|
//
|
|
4
|
-
// 2. Stack scrolling shadows
|
|
4
|
+
// 2. Stack scrolling shadows over viewport content while keeping the content interactive.
|
|
5
5
|
//
|
|
6
6
|
// - `.scrollingShadows` is positioned absolutely over the `.root`, with auto `z-index` (this is
|
|
7
7
|
// important!), and with `overflow: hidden` to clip the shadows (ie. its pseudo elements).
|
|
@@ -27,7 +27,6 @@
|
|
|
27
27
|
@use "../../styles/tools/scrollbar";
|
|
28
28
|
@use "../../styles/tools/spacing";
|
|
29
29
|
@use "../../styles/tools/transition";
|
|
30
|
-
@use "theme";
|
|
31
30
|
|
|
32
31
|
$_arrow-inner-spacing: spacing.of(2);
|
|
33
32
|
$_arrow-outer-spacing: spacing.of(4);
|
|
@@ -45,6 +44,7 @@ $_arrow-outer-spacing: spacing.of(4);
|
|
|
45
44
|
width: 100%; // 2.
|
|
46
45
|
height: 100%; // 2.
|
|
47
46
|
overflow: hidden; // 2.
|
|
47
|
+
pointer-events: none; // 2.
|
|
48
48
|
|
|
49
49
|
&::before,
|
|
50
50
|
&::after {
|
|
@@ -54,20 +54,16 @@ $_arrow-outer-spacing: spacing.of(4);
|
|
|
54
54
|
position: absolute;
|
|
55
55
|
z-index: 2; // 2.
|
|
56
56
|
display: block;
|
|
57
|
-
width: var(--rui-local-shadow-width);
|
|
58
|
-
height: var(--rui-local-shadow-height);
|
|
59
57
|
visibility: hidden;
|
|
60
58
|
opacity: 0;
|
|
61
59
|
}
|
|
62
60
|
|
|
63
61
|
&::before {
|
|
64
62
|
background: var(--rui-local-start-shadow-background);
|
|
65
|
-
box-shadow: var(--rui-local-start-shadow-box-shadow);
|
|
66
63
|
}
|
|
67
64
|
|
|
68
65
|
&::after {
|
|
69
66
|
background: var(--rui-local-end-shadow-background);
|
|
70
|
-
box-shadow: var(--rui-local-end-shadow-box-shadow);
|
|
71
67
|
}
|
|
72
68
|
}
|
|
73
69
|
|
|
@@ -75,7 +71,6 @@ $_arrow-outer-spacing: spacing.of(4);
|
|
|
75
71
|
z-index: 1; // 2.
|
|
76
72
|
width: 100%;
|
|
77
73
|
scroll-behavior: smooth;
|
|
78
|
-
-webkit-overflow-scrolling: touch;
|
|
79
74
|
}
|
|
80
75
|
|
|
81
76
|
.arrowPrev,
|
|
@@ -89,7 +84,6 @@ $_arrow-outer-spacing: spacing.of(4);
|
|
|
89
84
|
display: flex;
|
|
90
85
|
align-items: center;
|
|
91
86
|
justify-content: center;
|
|
92
|
-
color: var(--rui-local-arrow-color);
|
|
93
87
|
visibility: hidden;
|
|
94
88
|
opacity: 0;
|
|
95
89
|
}
|
|
@@ -116,7 +110,8 @@ $_arrow-outer-spacing: spacing.of(4);
|
|
|
116
110
|
width: 100%;
|
|
117
111
|
padding-top: $_arrow-outer-spacing;
|
|
118
112
|
padding-bottom: $_arrow-inner-spacing;
|
|
119
|
-
|
|
113
|
+
color: var(--rui-local-prev-arrow-color);
|
|
114
|
+
transform: translateY(var(--rui-local-prev-arrow-initial-offset));
|
|
120
115
|
}
|
|
121
116
|
|
|
122
117
|
.isRootVertical .arrowPrev .arrowIcon {
|
|
@@ -130,7 +125,8 @@ $_arrow-outer-spacing: spacing.of(4);
|
|
|
130
125
|
width: 100%;
|
|
131
126
|
padding-top: $_arrow-inner-spacing;
|
|
132
127
|
padding-bottom: $_arrow-outer-spacing;
|
|
133
|
-
|
|
128
|
+
color: var(--rui-local-next-arrow-color);
|
|
129
|
+
transform: translateY(calc(-1 * var(--rui-local-next-arrow-initial-offset)));
|
|
134
130
|
}
|
|
135
131
|
|
|
136
132
|
.isRootHorizontal {
|
|
@@ -143,7 +139,7 @@ $_arrow-outer-spacing: spacing.of(4);
|
|
|
143
139
|
left: 0;
|
|
144
140
|
padding-right: $_arrow-inner-spacing;
|
|
145
141
|
padding-left: $_arrow-outer-spacing;
|
|
146
|
-
transform: translateX(
|
|
142
|
+
transform: translateX(var(--rui-local-prev-arrow-initial-offset));
|
|
147
143
|
}
|
|
148
144
|
|
|
149
145
|
.isRootHorizontal .arrowPrev .arrowIcon {
|
|
@@ -156,7 +152,7 @@ $_arrow-outer-spacing: spacing.of(4);
|
|
|
156
152
|
bottom: 0;
|
|
157
153
|
padding-right: $_arrow-outer-spacing;
|
|
158
154
|
padding-left: $_arrow-inner-spacing;
|
|
159
|
-
transform: translateX(calc(-1 *
|
|
155
|
+
transform: translateX(calc(-1 * var(--rui-local-next-arrow-initial-offset)));
|
|
160
156
|
}
|
|
161
157
|
|
|
162
158
|
.isRootHorizontal .arrowNext .arrowIcon {
|
|
@@ -167,16 +163,19 @@ $_arrow-outer-spacing: spacing.of(4);
|
|
|
167
163
|
.isRootVertical .scrollingShadows::after {
|
|
168
164
|
right: 0;
|
|
169
165
|
left: 0;
|
|
166
|
+
width: auto;
|
|
170
167
|
}
|
|
171
168
|
|
|
172
169
|
.isRootVertical .scrollingShadows::before {
|
|
173
170
|
top: 0;
|
|
174
|
-
|
|
171
|
+
height: var(--rui-local-start-shadow-size);
|
|
172
|
+
transform: translateY(var(--rui-local-start-shadow-initial-offset));
|
|
175
173
|
}
|
|
176
174
|
|
|
177
175
|
.isRootVertical .scrollingShadows::after {
|
|
178
176
|
bottom: 0;
|
|
179
|
-
|
|
177
|
+
height: var(--rui-local-end-shadow-size);
|
|
178
|
+
transform: translateY(calc(-1 * var(--rui-local-end-shadow-initial-offset)));
|
|
180
179
|
}
|
|
181
180
|
|
|
182
181
|
.isRootHorizontal .viewport {
|
|
@@ -193,16 +192,19 @@ $_arrow-outer-spacing: spacing.of(4);
|
|
|
193
192
|
.isRootHorizontal .scrollingShadows::after {
|
|
194
193
|
top: 0;
|
|
195
194
|
bottom: 0;
|
|
195
|
+
height: auto;
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
.isRootHorizontal .scrollingShadows::before {
|
|
199
199
|
left: 0;
|
|
200
|
-
|
|
200
|
+
width: var(--rui-local-start-shadow-size);
|
|
201
|
+
transform: translateX(var(--rui-local-start-shadow-initial-offset));
|
|
201
202
|
}
|
|
202
203
|
|
|
203
204
|
.isRootHorizontal .scrollingShadows::after {
|
|
204
205
|
right: 0;
|
|
205
|
-
|
|
206
|
+
width: var(--rui-local-end-shadow-size);
|
|
207
|
+
transform: translateX(calc(-1 * var(--rui-local-end-shadow-initial-offset)));
|
|
206
208
|
}
|
|
207
209
|
|
|
208
210
|
.isRootScrolledAtStart .scrollingShadows::before,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default } from './ScrollView';
|
|
1
|
+
export { default as ScrollView } from './ScrollView';
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
Playground,
|
|
13
13
|
Props,
|
|
14
14
|
} from 'docz'
|
|
15
|
-
import { SelectField } from '
|
|
15
|
+
import { SelectField } from '../..'
|
|
16
16
|
|
|
17
17
|
## Basic Usage
|
|
18
18
|
|
|
@@ -79,7 +79,7 @@ See [API](#api) for all available options.
|
|
|
79
79
|
entered.
|
|
80
80
|
|
|
81
81
|
- In case of a large amount of options, consider **grouping related items
|
|
82
|
-
together** by nesting them
|
|
82
|
+
together** by nesting them.
|
|
83
83
|
|
|
84
84
|
👉 We use the **native `select`** HTML element to improve user experience on
|
|
85
85
|
mobile devices by using the native select of the platform.
|
|
@@ -240,6 +240,70 @@ Full-width fields span the full width of a parent:
|
|
|
240
240
|
}}
|
|
241
241
|
</Playground>
|
|
242
242
|
|
|
243
|
+
## Grouping Related Options
|
|
244
|
+
|
|
245
|
+
For a large amount of options you can group related items together by nesting
|
|
246
|
+
them (implements the `optgroup` HTML element).
|
|
247
|
+
|
|
248
|
+
<Playground>
|
|
249
|
+
{() => {
|
|
250
|
+
const [crop, setCrop] = React.useState('apple');
|
|
251
|
+
const options = [
|
|
252
|
+
{
|
|
253
|
+
label: 'Fruits',
|
|
254
|
+
options: [
|
|
255
|
+
{
|
|
256
|
+
label: 'Apple',
|
|
257
|
+
value: 'apple',
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
label: 'Banana',
|
|
261
|
+
value: 'banana',
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
label: 'Grapefruit',
|
|
265
|
+
value: 'grapefruit',
|
|
266
|
+
},
|
|
267
|
+
],
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
label: 'Vegetables',
|
|
271
|
+
options: [
|
|
272
|
+
{
|
|
273
|
+
label: 'Beetroot',
|
|
274
|
+
value: 'beetroot',
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
label: 'Carrot',
|
|
278
|
+
value: 'carrot',
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
label: 'Tomato',
|
|
282
|
+
value: 'tomato',
|
|
283
|
+
},
|
|
284
|
+
],
|
|
285
|
+
},
|
|
286
|
+
];
|
|
287
|
+
return (
|
|
288
|
+
<>
|
|
289
|
+
<SelectField
|
|
290
|
+
label="Your favourite crop"
|
|
291
|
+
onChange={(e) => setCrop(e.target.value)}
|
|
292
|
+
options={options}
|
|
293
|
+
value={crop}
|
|
294
|
+
/>
|
|
295
|
+
<SelectField
|
|
296
|
+
label="Your favourite crop"
|
|
297
|
+
onChange={(e) => setCrop(e.target.value)}
|
|
298
|
+
options={options}
|
|
299
|
+
value={crop}
|
|
300
|
+
variant="filled"
|
|
301
|
+
/>
|
|
302
|
+
</>
|
|
303
|
+
);
|
|
304
|
+
}}
|
|
305
|
+
</Playground>
|
|
306
|
+
|
|
243
307
|
## Invisible Label
|
|
244
308
|
|
|
245
309
|
While it may be acceptable for login screens with just a few fields or for other
|
|
@@ -7,27 +7,28 @@ import { getRootValidationStateClassName } from '../_helpers/getRootValidationSt
|
|
|
7
7
|
import { resolveContextOrProp } from '../_helpers/resolveContextOrProp';
|
|
8
8
|
import { transferProps } from '../_helpers/transferProps';
|
|
9
9
|
import { FormLayoutContext } from '../FormLayout';
|
|
10
|
-
import
|
|
10
|
+
import { Option } from './_components/Option';
|
|
11
11
|
import styles from './SelectField.scss';
|
|
12
12
|
|
|
13
|
-
export const SelectField = ({
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
13
|
+
export const SelectField = React.forwardRef((props, ref) => {
|
|
14
|
+
const {
|
|
15
|
+
disabled,
|
|
16
|
+
fullWidth,
|
|
17
|
+
helpText,
|
|
18
|
+
id,
|
|
19
|
+
isLabelVisible,
|
|
20
|
+
label,
|
|
21
|
+
layout,
|
|
22
|
+
options,
|
|
23
|
+
required,
|
|
24
|
+
size,
|
|
25
|
+
validationState,
|
|
26
|
+
validationText,
|
|
27
|
+
value,
|
|
28
|
+
variant,
|
|
29
|
+
...restProps
|
|
30
|
+
} = props;
|
|
31
|
+
|
|
31
32
|
const context = useContext(FormLayoutContext);
|
|
32
33
|
|
|
33
34
|
return (
|
|
@@ -64,21 +65,36 @@ export const SelectField = ({
|
|
|
64
65
|
className={styles.input}
|
|
65
66
|
disabled={disabled}
|
|
66
67
|
id={id}
|
|
67
|
-
ref={
|
|
68
|
+
ref={ref}
|
|
68
69
|
required={required}
|
|
69
70
|
value={value}
|
|
70
71
|
>
|
|
71
72
|
{
|
|
72
|
-
options.map((option) =>
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
73
|
+
options.map((option) => {
|
|
74
|
+
if ('options' in option) {
|
|
75
|
+
return (
|
|
76
|
+
<optgroup
|
|
77
|
+
key={option.key ?? option.label}
|
|
78
|
+
label={option.label}
|
|
79
|
+
>
|
|
80
|
+
{option.options.map((optgroupOption) => (
|
|
81
|
+
<Option
|
|
82
|
+
key={optgroupOption.key ?? optgroupOption.value}
|
|
83
|
+
{...optgroupOption}
|
|
84
|
+
{...(id && { id: `${id}__item__${optgroupOption.key ?? optgroupOption.value}` })}
|
|
85
|
+
/>
|
|
86
|
+
))}
|
|
87
|
+
</optgroup>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
return (
|
|
91
|
+
<Option
|
|
92
|
+
key={option.key ?? option.value}
|
|
93
|
+
{...option}
|
|
94
|
+
{...(id && { id: `${id}__item__${option.key ?? option.value}` })}
|
|
95
|
+
/>
|
|
96
|
+
);
|
|
97
|
+
})
|
|
82
98
|
}
|
|
83
99
|
</select>
|
|
84
100
|
<div className={styles.caret}>
|
|
@@ -107,16 +123,16 @@ export const SelectField = ({
|
|
|
107
123
|
</div>
|
|
108
124
|
</label>
|
|
109
125
|
);
|
|
110
|
-
};
|
|
126
|
+
});
|
|
111
127
|
|
|
112
128
|
SelectField.defaultProps = {
|
|
113
129
|
disabled: false,
|
|
114
|
-
forwardedRef: undefined,
|
|
115
130
|
fullWidth: false,
|
|
116
131
|
helpText: null,
|
|
117
132
|
id: undefined,
|
|
118
133
|
isLabelVisible: true,
|
|
119
134
|
layout: 'vertical',
|
|
135
|
+
ref: undefined,
|
|
120
136
|
required: false,
|
|
121
137
|
size: 'medium',
|
|
122
138
|
validationState: null,
|
|
@@ -130,14 +146,6 @@ SelectField.propTypes = {
|
|
|
130
146
|
* If `true`, the input will be disabled.
|
|
131
147
|
*/
|
|
132
148
|
disabled: PropTypes.bool,
|
|
133
|
-
/**
|
|
134
|
-
* Reference forwarded to the `select` element.
|
|
135
|
-
*/
|
|
136
|
-
forwardedRef: PropTypes.oneOfType([
|
|
137
|
-
PropTypes.func,
|
|
138
|
-
// eslint-disable-next-line react/forbid-prop-types
|
|
139
|
-
PropTypes.shape({ current: PropTypes.any }),
|
|
140
|
-
]),
|
|
141
149
|
/**
|
|
142
150
|
* If `true`, the field will span the full width of its parent.
|
|
143
151
|
*/
|
|
@@ -157,6 +165,9 @@ SelectField.propTypes = {
|
|
|
157
165
|
*
|
|
158
166
|
* and of individual options:
|
|
159
167
|
* * `<ID>__item__<VALUE>`
|
|
168
|
+
*
|
|
169
|
+
* If `key` in the option definition object is set,
|
|
170
|
+
* then `option.key` is used instead of `option.value` in place of `<VALUE>`.
|
|
160
171
|
*/
|
|
161
172
|
id: PropTypes.string,
|
|
162
173
|
/**
|
|
@@ -177,15 +188,48 @@ SelectField.propTypes = {
|
|
|
177
188
|
layout: PropTypes.oneOf(['horizontal', 'vertical']),
|
|
178
189
|
/**
|
|
179
190
|
* Set of options to be chosen from.
|
|
191
|
+
*
|
|
192
|
+
* Either set of individual or grouped options is acceptable.
|
|
193
|
+
*
|
|
194
|
+
* For generating unique IDs the `option.value` is normally used. For cases when this is not practical or
|
|
195
|
+
* the `option.value` values are not unique the `option.key` attribute can be set manually.
|
|
196
|
+
* The same applies for the `label` value of grouped options which is supposed to be unique.
|
|
197
|
+
* To ensure uniqueness `key` attribute can be set manually.
|
|
198
|
+
*/
|
|
199
|
+
options: PropTypes.oneOfType([
|
|
200
|
+
PropTypes.arrayOf(
|
|
201
|
+
PropTypes.shape({
|
|
202
|
+
key: PropTypes.string,
|
|
203
|
+
label: PropTypes.string.isRequired,
|
|
204
|
+
options: PropTypes.arrayOf(PropTypes.shape({
|
|
205
|
+
disabled: PropTypes.bool,
|
|
206
|
+
key: PropTypes.string,
|
|
207
|
+
label: PropTypes.string.isRequired,
|
|
208
|
+
value: PropTypes.oneOfType([
|
|
209
|
+
PropTypes.string,
|
|
210
|
+
PropTypes.number,
|
|
211
|
+
]),
|
|
212
|
+
})),
|
|
213
|
+
}),
|
|
214
|
+
),
|
|
215
|
+
PropTypes.arrayOf(PropTypes.shape({
|
|
216
|
+
disabled: PropTypes.bool,
|
|
217
|
+
key: PropTypes.string,
|
|
218
|
+
label: PropTypes.string.isRequired,
|
|
219
|
+
value: PropTypes.oneOfType([
|
|
220
|
+
PropTypes.string,
|
|
221
|
+
PropTypes.number,
|
|
222
|
+
]),
|
|
223
|
+
})),
|
|
224
|
+
]).isRequired,
|
|
225
|
+
/**
|
|
226
|
+
* Reference forwarded to the `select` element.
|
|
180
227
|
*/
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
PropTypes.number,
|
|
187
|
-
]),
|
|
188
|
-
})).isRequired,
|
|
228
|
+
ref: PropTypes.oneOfType([
|
|
229
|
+
PropTypes.func,
|
|
230
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
231
|
+
PropTypes.shape({ current: PropTypes.any }),
|
|
232
|
+
]),
|
|
189
233
|
/**
|
|
190
234
|
* If `true`, the input will be required.
|
|
191
235
|
*/
|
|
@@ -215,6 +259,6 @@ SelectField.propTypes = {
|
|
|
215
259
|
variant: PropTypes.oneOf(['filled', 'outline']),
|
|
216
260
|
};
|
|
217
261
|
|
|
218
|
-
export const SelectFieldWithGlobalProps =
|
|
262
|
+
export const SelectFieldWithGlobalProps = withGlobalProps(SelectField, 'SelectField');
|
|
219
263
|
|
|
220
264
|
export default SelectFieldWithGlobalProps;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
export const Option = ({
|
|
5
|
+
disabled,
|
|
6
|
+
id,
|
|
7
|
+
label,
|
|
8
|
+
value,
|
|
9
|
+
}) => (
|
|
10
|
+
<option
|
|
11
|
+
disabled={disabled}
|
|
12
|
+
id={id}
|
|
13
|
+
value={value}
|
|
14
|
+
>
|
|
15
|
+
{label}
|
|
16
|
+
</option>
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
Option.defaultProps = {
|
|
20
|
+
disabled: false,
|
|
21
|
+
id: undefined,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
Option.propTypes = {
|
|
25
|
+
/**
|
|
26
|
+
* If `true` the option cannot be selected.
|
|
27
|
+
*/
|
|
28
|
+
disabled: PropTypes.bool,
|
|
29
|
+
/**
|
|
30
|
+
* ID of an individual option.
|
|
31
|
+
*/
|
|
32
|
+
id: PropTypes.string,
|
|
33
|
+
/**
|
|
34
|
+
* Option label.
|
|
35
|
+
*/
|
|
36
|
+
label: PropTypes.string.isRequired,
|
|
37
|
+
/**
|
|
38
|
+
* Option value.
|
|
39
|
+
*/
|
|
40
|
+
value: PropTypes.oneOfType([
|
|
41
|
+
PropTypes.string,
|
|
42
|
+
PropTypes.number,
|
|
43
|
+
]).isRequired,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export default Option;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Option } from './Option';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default } from './SelectField';
|
|
1
|
+
export { default as SelectField } from './SelectField';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import PropTypes from 'prop-types';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { withGlobalProps } from '../../provider';
|
|
4
|
-
import Button from '
|
|
4
|
+
import { Button } from '../..';
|
|
5
5
|
import styles from './Table.scss';
|
|
6
6
|
|
|
7
7
|
export class Table extends React.Component {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default } from './Table';
|
|
1
|
+
export { default as Table } from './Table';
|
|
@@ -11,9 +11,11 @@ import {
|
|
|
11
11
|
Props,
|
|
12
12
|
} from 'docz'
|
|
13
13
|
import { Icon } from '../../../docs/_components/Icon/Icon'
|
|
14
|
-
import
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
import {
|
|
15
|
+
ScrollView,
|
|
16
|
+
Tabs,
|
|
17
|
+
TabsItem,
|
|
18
|
+
} from '../..'
|
|
17
19
|
|
|
18
20
|
Tabs separate related content into groups within a single context.
|
|
19
21
|
|
|
@@ -47,8 +47,7 @@
|
|
|
47
47
|
line-height: 1;
|
|
48
48
|
text-decoration: none;
|
|
49
49
|
color: theme.$item-color;
|
|
50
|
-
border
|
|
51
|
-
border-style: solid;
|
|
50
|
+
border: theme.$item-border-width solid;
|
|
52
51
|
border-color: theme.$item-border-color;
|
|
53
52
|
border-top-left-radius: theme.$item-border-radius;
|
|
54
53
|
border-top-right-radius: theme.$item-border-radius;
|
|
@@ -11,13 +11,15 @@ import {
|
|
|
11
11
|
Props,
|
|
12
12
|
} from 'docz'
|
|
13
13
|
import { Placeholder } from '../../../docs/_components/Placeholder/Placeholder'
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
import {
|
|
15
|
+
Button,
|
|
16
|
+
ButtonGroup,
|
|
17
|
+
Text,
|
|
18
|
+
TextField,
|
|
19
|
+
Toolbar,
|
|
20
|
+
ToolbarGroup,
|
|
21
|
+
ToolbarItem,
|
|
22
|
+
} from '../..'
|
|
21
23
|
|
|
22
24
|
Text is a tiny component to control wrapping of text content.
|
|
23
25
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default } from './Text';
|
|
1
|
+
export { default as Text } from './Text';
|