@react-ui-org/react-ui 0.48.0 → 0.50.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 +162 -66
- package/dist/lib.js +1 -1
- package/package.json +1 -1
- package/src/lib/components/Alert/Alert.jsx +3 -0
- package/src/lib/components/Alert/Alert.scss +10 -10
- package/src/lib/components/Alert/README.mdx +14 -0
- package/src/lib/components/Badge/Badge.jsx +4 -8
- package/src/lib/components/Badge/Badge.scss +21 -21
- package/src/lib/components/Badge/README.mdx +14 -0
- package/src/lib/components/Button/Button.jsx +2 -13
- package/src/lib/components/Button/README.mdx +17 -5
- package/src/lib/components/Button/_base.scss +20 -20
- package/src/lib/components/Button/_priorities.scss +35 -35
- package/src/lib/components/Button/helpers/getRootLabelVisibilityClassName.js +7 -7
- package/src/lib/components/Button/helpers/getRootPriorityClassName.js +3 -3
- package/src/lib/components/ButtonGroup/ButtonGroup.jsx +0 -7
- package/src/lib/components/ButtonGroup/README.mdx +14 -0
- package/src/lib/components/Card/Card.jsx +6 -10
- package/src/lib/components/Card/Card.scss +13 -13
- package/src/lib/components/Card/CardBody.jsx +6 -10
- package/src/lib/components/Card/CardFooter.jsx +6 -7
- package/src/lib/components/Card/README.mdx +14 -0
- package/src/lib/components/CheckboxField/CheckboxField.jsx +1 -27
- package/src/lib/components/CheckboxField/README.mdx +17 -5
- package/src/lib/components/FileInputField/FileInputField.jsx +2 -12
- package/src/lib/components/FileInputField/FileInputField.scss +3 -7
- package/src/lib/components/FileInputField/README.mdx +29 -27
- package/src/lib/components/FormLayout/FormLayout.jsx +5 -9
- package/src/lib/components/FormLayout/FormLayout.scss +3 -3
- package/src/lib/components/FormLayout/FormLayoutCustomField.jsx +4 -1
- package/src/lib/components/FormLayout/FormLayoutCustomField.scss +8 -8
- package/src/lib/components/FormLayout/README.mdx +13 -0
- package/src/lib/components/Grid/Grid.jsx +0 -7
- package/src/lib/components/Grid/GridSpan.jsx +0 -7
- package/src/lib/components/Grid/README.mdx +14 -0
- package/src/lib/components/Modal/Modal.jsx +7 -11
- package/src/lib/components/Modal/ModalBody.jsx +3 -7
- package/src/lib/components/Modal/ModalCloseButton.jsx +0 -16
- package/src/lib/components/Modal/ModalContent.jsx +3 -7
- package/src/lib/components/Modal/ModalFooter.jsx +3 -7
- package/src/lib/components/Modal/ModalFooter.scss +5 -5
- package/src/lib/components/Modal/ModalHeader.jsx +3 -7
- package/src/lib/components/Modal/ModalHeader.scss +5 -5
- package/src/lib/components/Modal/ModalTitle.jsx +6 -7
- package/src/lib/components/Modal/README.mdx +32 -6
- package/src/lib/components/Modal/_helpers/getJustifyClassName.js +5 -5
- package/src/lib/components/Paper/Paper.jsx +5 -9
- package/src/lib/components/Paper/Paper.scss +2 -2
- package/src/lib/components/Paper/README.mdx +14 -0
- package/src/lib/components/Popover/Popover.jsx +0 -16
- package/src/lib/components/Popover/PopoverWrapper.jsx +0 -7
- package/src/lib/components/Popover/README.mdx +19 -0
- package/src/lib/components/Radio/README.mdx +12 -5
- package/src/lib/components/Radio/Radio.jsx +2 -2
- package/src/lib/components/Radio/Radio.scss +3 -3
- package/src/lib/components/ScrollView/README.mdx +19 -0
- package/src/lib/components/ScrollView/ScrollView.jsx +11 -4
- package/src/lib/components/SelectField/README.mdx +17 -5
- package/src/lib/components/SelectField/SelectField.jsx +3 -22
- package/src/lib/components/SelectField/SelectField.scss +8 -8
- package/src/lib/components/Table/README.mdx +21 -7
- package/src/lib/components/Table/Table.jsx +43 -101
- package/src/lib/components/Table/Table.scss +0 -24
- package/src/lib/components/Table/_components/TableBodyCell/TableBodyCell.jsx +46 -0
- package/src/lib/components/Table/_components/TableBodyCell/index.js +1 -0
- package/src/lib/components/Table/_components/TableCell.scss +25 -0
- package/src/lib/components/Table/_components/TableHeaderCell/TableHeaderCell.jsx +71 -0
- package/src/lib/components/Table/_components/TableHeaderCell/index.js +1 -0
- package/src/lib/components/Tabs/README.mdx +16 -0
- package/src/lib/components/Tabs/Tabs.jsx +6 -1
- package/src/lib/components/Tabs/TabsItem.jsx +3 -0
- package/src/lib/components/Text/README.mdx +16 -0
- package/src/lib/components/Text/Text.jsx +3 -7
- package/src/lib/components/Text/Text.scss +6 -6
- package/src/lib/components/Text/_helpers/getRootClampClassName.js +2 -2
- package/src/lib/components/Text/_helpers/getRootHyphensClassName.js +2 -2
- package/src/lib/components/Text/_helpers/getRootWordWrappingClassName.js +2 -2
- package/src/lib/components/TextArea/README.mdx +33 -30
- package/src/lib/components/TextArea/TextArea.jsx +3 -43
- package/src/lib/components/TextArea/TextArea.scss +8 -8
- package/src/lib/components/TextField/README.mdx +53 -51
- package/src/lib/components/TextField/TextField.jsx +3 -29
- package/src/lib/components/TextField/TextField.scss +9 -9
- package/src/lib/components/TextLink/README.mdx +12 -5
- package/src/lib/components/TextLink/TextLink.jsx +0 -10
- package/src/lib/components/Toggle/README.mdx +17 -5
- package/src/lib/components/Toggle/Toggle.jsx +1 -27
- package/src/lib/components/Toolbar/README.mdx +13 -0
- package/src/lib/components/Toolbar/Toolbar.jsx +9 -43
- package/src/lib/components/Toolbar/Toolbar.scss +24 -12
- package/src/lib/components/Toolbar/ToolbarGroup.jsx +7 -26
- package/src/lib/components/Toolbar/ToolbarItem.jsx +3 -7
- package/src/lib/components/Toolbar/_helpers/getAlignClassName.js +19 -0
- package/src/lib/components/Toolbar/_helpers/getJustifyClassName.js +16 -0
- package/src/lib/components/_helpers/getRootColorClassName.js +10 -10
- package/src/lib/components/_helpers/getRootSizeClassName.js +3 -3
- package/src/lib/styles/generic/_forms.scss +10 -6
- package/src/lib/styles/theme/_accessibility.scss +2 -0
- package/src/lib/styles/theme/_form-fields.scss +1 -0
- package/src/lib/styles/tools/_accessibility.scss +2 -0
- package/src/lib/styles/tools/form-fields/_box-field-layout.scss +15 -15
- package/src/lib/styles/tools/form-fields/_foundation.scss +2 -0
- package/src/lib/styles/tools/form-fields/_inline-field-elements.scss +1 -1
- package/src/lib/styles/tools/form-fields/_inline-field-layout.scss +9 -9
- package/src/lib/theme.scss +4 -1
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
export const getJustifyClassName = (value, styles) => {
|
|
2
2
|
if (value === 'start') {
|
|
3
|
-
return styles.
|
|
3
|
+
return styles.isRootJustifiedToStart;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
if (value === 'center') {
|
|
7
|
-
return styles.
|
|
7
|
+
return styles.isRootJustifiedToCenter;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
if (value === 'end') {
|
|
11
|
-
return styles.
|
|
11
|
+
return styles.isRootJustifiedToEnd;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
if (value === 'space-between') {
|
|
15
|
-
return styles.
|
|
15
|
+
return styles.isRootJustifiedToSpaceBetween;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
return styles.
|
|
18
|
+
return styles.isRootJustifiedToStretch;
|
|
19
19
|
};
|
|
@@ -2,28 +2,28 @@ import PropTypes from 'prop-types';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { withGlobalProps } from '../../provider';
|
|
4
4
|
import { classNames } from '../../utils/classNames';
|
|
5
|
+
import { transferProps } from '../_helpers/transferProps';
|
|
5
6
|
import styles from './Paper.scss';
|
|
6
7
|
|
|
7
8
|
export const Paper = ({
|
|
8
9
|
children,
|
|
9
|
-
id,
|
|
10
10
|
muted,
|
|
11
11
|
raised,
|
|
12
|
+
...restProps
|
|
12
13
|
}) => (
|
|
13
14
|
<div
|
|
15
|
+
{...transferProps(restProps)}
|
|
14
16
|
className={classNames(
|
|
15
17
|
styles.root,
|
|
16
|
-
muted && styles.
|
|
17
|
-
raised && styles.
|
|
18
|
+
muted && styles.isRootMuted,
|
|
19
|
+
raised && styles.isRootRaised,
|
|
18
20
|
)}
|
|
19
|
-
id={id}
|
|
20
21
|
>
|
|
21
22
|
{children}
|
|
22
23
|
</div>
|
|
23
24
|
);
|
|
24
25
|
|
|
25
26
|
Paper.defaultProps = {
|
|
26
|
-
id: undefined,
|
|
27
27
|
muted: false,
|
|
28
28
|
raised: false,
|
|
29
29
|
};
|
|
@@ -33,10 +33,6 @@ Paper.propTypes = {
|
|
|
33
33
|
* Content to be placed onto Paper.
|
|
34
34
|
*/
|
|
35
35
|
children: PropTypes.node.isRequired,
|
|
36
|
-
/**
|
|
37
|
-
* ID of the root HTML element.
|
|
38
|
-
*/
|
|
39
|
-
id: PropTypes.string,
|
|
40
36
|
/**
|
|
41
37
|
* Visually suppress Paper.
|
|
42
38
|
*/
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
background-color: theme.$background-color;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
.
|
|
10
|
+
.isRootMuted {
|
|
11
11
|
background-color: theme.$muted-background-color;
|
|
12
12
|
opacity: theme.$muted-opacity;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
.
|
|
15
|
+
.isRootRaised {
|
|
16
16
|
box-shadow: theme.$raised-box-shadow;
|
|
17
17
|
}
|
|
@@ -63,6 +63,17 @@ Dim background and add transparency to visually suppress the Paper.
|
|
|
63
63
|
</Paper>
|
|
64
64
|
</Playground>
|
|
65
65
|
|
|
66
|
+
## Forwarding HTML Attributes
|
|
67
|
+
|
|
68
|
+
In addition to the options below in the [component's API](#api) section, you
|
|
69
|
+
can specify [React synthetic events] or **any HTML attribute you like.** All
|
|
70
|
+
attributes that don't interfere with the API are forwarded to the root `<div>`
|
|
71
|
+
HTML element. This enables making the component interactive and helps to improve
|
|
72
|
+
its accessibility.
|
|
73
|
+
|
|
74
|
+
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
75
|
+
[div] element.
|
|
76
|
+
|
|
66
77
|
## API
|
|
67
78
|
|
|
68
79
|
<Props table of={Paper} />
|
|
@@ -79,3 +90,6 @@ Dim background and add transparency to visually suppress the Paper.
|
|
|
79
90
|
| `--rui-Paper--muted__background-color` | Background color of muted paper |
|
|
80
91
|
| `--rui-Paper--muted__opacity` | Opacity of muted paper |
|
|
81
92
|
| `--rui-Paper--raised__box-shadow` | Box shadow of raised paper |
|
|
93
|
+
|
|
94
|
+
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
95
|
+
[div]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
|
|
@@ -12,7 +12,6 @@ export const Popover = React.forwardRef((props, ref) => {
|
|
|
12
12
|
const {
|
|
13
13
|
placement,
|
|
14
14
|
children,
|
|
15
|
-
id,
|
|
16
15
|
portalId,
|
|
17
16
|
...restProps
|
|
18
17
|
} = props;
|
|
@@ -26,7 +25,6 @@ export const Popover = React.forwardRef((props, ref) => {
|
|
|
26
25
|
getRootSideClassName(placement, styles),
|
|
27
26
|
getRootAlignmentClassName(placement, styles),
|
|
28
27
|
)}
|
|
29
|
-
id={id}
|
|
30
28
|
ref={ref}
|
|
31
29
|
>
|
|
32
30
|
{children}
|
|
@@ -42,10 +40,8 @@ export const Popover = React.forwardRef((props, ref) => {
|
|
|
42
40
|
});
|
|
43
41
|
|
|
44
42
|
Popover.defaultProps = {
|
|
45
|
-
id: undefined,
|
|
46
43
|
placement: 'bottom',
|
|
47
44
|
portalId: null,
|
|
48
|
-
ref: undefined,
|
|
49
45
|
};
|
|
50
46
|
|
|
51
47
|
Popover.propTypes = {
|
|
@@ -53,10 +49,6 @@ Popover.propTypes = {
|
|
|
53
49
|
* Popover content.
|
|
54
50
|
*/
|
|
55
51
|
children: PropTypes.node.isRequired,
|
|
56
|
-
/**
|
|
57
|
-
* ID of the root HTML element.
|
|
58
|
-
*/
|
|
59
|
-
id: PropTypes.string,
|
|
60
52
|
/**
|
|
61
53
|
* Popover placement affects position of the arrow.
|
|
62
54
|
* Compatible with [Floating UI API](https://floating-ui.com/docs/computePosition#placement).
|
|
@@ -79,14 +71,6 @@ Popover.propTypes = {
|
|
|
79
71
|
* If set, popover is rendered in the React Portal with that ID.
|
|
80
72
|
*/
|
|
81
73
|
portalId: PropTypes.string,
|
|
82
|
-
/**
|
|
83
|
-
* Reference forwarded to the root `div` element.
|
|
84
|
-
*/
|
|
85
|
-
ref: PropTypes.oneOfType([
|
|
86
|
-
PropTypes.func,
|
|
87
|
-
// eslint-disable-next-line react/forbid-prop-types
|
|
88
|
-
PropTypes.shape({ current: PropTypes.any }),
|
|
89
|
-
]),
|
|
90
74
|
};
|
|
91
75
|
|
|
92
76
|
export const PopoverWithGlobalProps = withGlobalProps(Popover, 'Popover');
|
|
@@ -6,21 +6,18 @@ import styles from './PopoverWrapper.scss';
|
|
|
6
6
|
|
|
7
7
|
export const PopoverWrapper = ({
|
|
8
8
|
children,
|
|
9
|
-
id,
|
|
10
9
|
tag: Tag,
|
|
11
10
|
...restProps
|
|
12
11
|
}) => (
|
|
13
12
|
<Tag
|
|
14
13
|
{...transferProps(restProps)}
|
|
15
14
|
className={styles.root}
|
|
16
|
-
id={id}
|
|
17
15
|
>
|
|
18
16
|
{children}
|
|
19
17
|
</Tag>
|
|
20
18
|
);
|
|
21
19
|
|
|
22
20
|
PopoverWrapper.defaultProps = {
|
|
23
|
-
id: undefined,
|
|
24
21
|
tag: 'div',
|
|
25
22
|
};
|
|
26
23
|
|
|
@@ -29,10 +26,6 @@ PopoverWrapper.propTypes = {
|
|
|
29
26
|
* Popover reference and the Popover itself.
|
|
30
27
|
*/
|
|
31
28
|
children: PropTypes.node.isRequired,
|
|
32
|
-
/**
|
|
33
|
-
* ID of the root HTML element.
|
|
34
|
-
*/
|
|
35
|
-
id: PropTypes.string,
|
|
36
29
|
/**
|
|
37
30
|
* HTML tag to render. Can be any valid HTML tag of your choice, usually a
|
|
38
31
|
* [block-level element](https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements).
|
|
@@ -311,6 +311,22 @@ get an idea of all possible cases you may need to cover.
|
|
|
311
311
|
}}
|
|
312
312
|
</Playground>
|
|
313
313
|
|
|
314
|
+
## Forwarding HTML Attributes
|
|
315
|
+
|
|
316
|
+
In addition to the options below in the [component's API](#api) section, you
|
|
317
|
+
can specify [React synthetic events] or **any HTML attribute you like.** All
|
|
318
|
+
attributes that don't interfere with the API are forwarded to the root `<div>`
|
|
319
|
+
HTML element. This enables making the component interactive and helps to improve
|
|
320
|
+
its accessibility.
|
|
321
|
+
|
|
322
|
+
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
323
|
+
[div] element.
|
|
324
|
+
|
|
325
|
+
## Forwarding ref
|
|
326
|
+
|
|
327
|
+
If you provide [ref], it is forwarded to the root native HTML `<div>` element,
|
|
328
|
+
which enables [Advanced Positioning](#advanced-positioning).
|
|
329
|
+
|
|
314
330
|
## API
|
|
315
331
|
|
|
316
332
|
<Props table of={Popover} />
|
|
@@ -333,3 +349,6 @@ get an idea of all possible cases you may need to cover.
|
|
|
333
349
|
| `--rui-Popover__box-shadow` | Popover box shadow |
|
|
334
350
|
|
|
335
351
|
[Floating UI]: https://floating-ui.com/docs/react-dom
|
|
352
|
+
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
353
|
+
[div]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
|
|
354
|
+
[ref]: https://reactjs.org/docs/refs-and-the-dom.html
|
|
@@ -283,12 +283,18 @@ It's possible to disable just some options or the whole set.
|
|
|
283
283
|
}}
|
|
284
284
|
</Playground>
|
|
285
285
|
|
|
286
|
-
##
|
|
286
|
+
## Forwarding HTML Attributes
|
|
287
|
+
|
|
288
|
+
In addition to the options below in the [component's API](#api) section, you
|
|
289
|
+
can specify [React synthetic events] or you can **add whatever HTML attribute
|
|
290
|
+
you like.** All attributes that don't interfere with the API are forwarded to
|
|
291
|
+
the native HTML `<input>`. This enables making the component interactive and helps
|
|
292
|
+
to improve its accessibility.
|
|
287
293
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
294
|
+
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
295
|
+
[radio] input type.
|
|
296
|
+
|
|
297
|
+
## API
|
|
292
298
|
|
|
293
299
|
<Props table of={Radio} />
|
|
294
300
|
|
|
@@ -303,3 +309,4 @@ options. On top of that, the following options are available for Radio.
|
|
|
303
309
|
| `--rui-FormField--check__input--radio--checked__background-image` | Checked input background image (inline, URL, …) |
|
|
304
310
|
|
|
305
311
|
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
312
|
+
[radio]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio#additional_attributes
|
|
@@ -30,8 +30,8 @@ export const Radio = ({
|
|
|
30
30
|
styles.root,
|
|
31
31
|
context && styles.isRootInFormLayout,
|
|
32
32
|
resolveContextOrProp(context && context.layout, layout) === 'horizontal'
|
|
33
|
-
? styles.
|
|
34
|
-
: styles.
|
|
33
|
+
? styles.isRootLayoutHorizontal
|
|
34
|
+
: styles.isRootLayoutVertical,
|
|
35
35
|
disabled && styles.isRootDisabled,
|
|
36
36
|
required && styles.isRootRequired,
|
|
37
37
|
getRootValidationStateClassName(validationState, styles),
|
|
@@ -60,12 +60,12 @@
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
// Layouts
|
|
63
|
-
.
|
|
64
|
-
.
|
|
63
|
+
.isRootLayoutVertical,
|
|
64
|
+
.isRootLayoutHorizontal {
|
|
65
65
|
@include box-field-layout.vertical($has-list: true);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
.
|
|
68
|
+
.isRootLayoutHorizontal {
|
|
69
69
|
@include box-field-layout.horizontal($has-min-tap-target: true);
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -495,8 +495,27 @@ scrolling shadows in both directions via
|
|
|
495
495
|
)}}
|
|
496
496
|
</Playground>
|
|
497
497
|
|
|
498
|
+
## Forwarding HTML Attributes
|
|
499
|
+
|
|
500
|
+
In addition to the options below in the [component's API](#api) section, you
|
|
501
|
+
can specify [React synthetic events] or **any HTML attribute you like.** All
|
|
502
|
+
attributes that don't interfere with the API are forwarded to the `<div>` HTML
|
|
503
|
+
element. This enables making the component interactive and helps to improve its
|
|
504
|
+
accessibility.
|
|
505
|
+
|
|
506
|
+
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
507
|
+
[div] element.
|
|
508
|
+
|
|
509
|
+
## Forwarding ref
|
|
510
|
+
|
|
511
|
+
If you provide [ref], it is forwarded to the scrolling viewport native HTML
|
|
512
|
+
`<div>` element.
|
|
513
|
+
|
|
498
514
|
## API
|
|
499
515
|
|
|
500
516
|
<Props table of={ScrollView} />
|
|
501
517
|
|
|
502
518
|
[linear gradients]: https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/linear-gradient
|
|
519
|
+
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
520
|
+
[div]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
|
|
521
|
+
[ref]: https://reactjs.org/docs/refs-and-the-dom.html
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
withGlobalProps,
|
|
12
12
|
} from '../../provider';
|
|
13
13
|
import { classNames } from '../../utils/classNames';
|
|
14
|
+
import { transferProps } from '../_helpers/transferProps';
|
|
14
15
|
import { getElementsPositionDifference } from './_helpers/getElementsPositionDifference';
|
|
15
16
|
import { useLoadResize } from './_hooks/useLoadResizeHook';
|
|
16
17
|
import { useScrollPosition } from './_hooks/useScrollPositionHook';
|
|
@@ -21,7 +22,7 @@ import styles from './ScrollView.scss';
|
|
|
21
22
|
// every value less or equal to 1px as start/end.
|
|
22
23
|
const EDGE_DETECTION_INACCURACY_PX = 1;
|
|
23
24
|
|
|
24
|
-
export const ScrollView = (props) => {
|
|
25
|
+
export const ScrollView = React.forwardRef((props, ref) => {
|
|
25
26
|
const {
|
|
26
27
|
arrows,
|
|
27
28
|
arrowsScrollStep,
|
|
@@ -44,6 +45,7 @@ export const ScrollView = (props) => {
|
|
|
44
45
|
startShadowBackground,
|
|
45
46
|
startShadowInitialOffset,
|
|
46
47
|
startShadowSize,
|
|
48
|
+
...restProps
|
|
47
49
|
} = props;
|
|
48
50
|
|
|
49
51
|
const { translations } = useContext(RUIContext);
|
|
@@ -55,7 +57,8 @@ export const ScrollView = (props) => {
|
|
|
55
57
|
const scrollPositionStart = direction === 'horizontal' ? 'left' : 'top';
|
|
56
58
|
const scrollPositionEnd = direction === 'horizontal' ? 'right' : 'bottom';
|
|
57
59
|
const scrollViewContentEl = useRef(null);
|
|
58
|
-
const
|
|
60
|
+
const blankRef = useRef(null);
|
|
61
|
+
const scrollViewViewportEl = ref ?? blankRef;
|
|
59
62
|
|
|
60
63
|
const handleScrollViewState = (currentPosition) => {
|
|
61
64
|
const isScrolledAtStartActive = currentPosition[scrollPositionStart]
|
|
@@ -172,6 +175,7 @@ export const ScrollView = (props) => {
|
|
|
172
175
|
|
|
173
176
|
return (
|
|
174
177
|
<div
|
|
178
|
+
{...transferProps(restProps)}
|
|
175
179
|
className={classNames(
|
|
176
180
|
styles.root,
|
|
177
181
|
isScrolledAtStart && styles.isRootScrolledAtStart,
|
|
@@ -195,7 +199,10 @@ export const ScrollView = (props) => {
|
|
|
195
199
|
'--rui-local-start-shadow-size': startShadowSize,
|
|
196
200
|
}}
|
|
197
201
|
>
|
|
198
|
-
<div
|
|
202
|
+
<div
|
|
203
|
+
className={styles.viewport}
|
|
204
|
+
ref={scrollViewViewportEl}
|
|
205
|
+
>
|
|
199
206
|
<div
|
|
200
207
|
className={styles.content}
|
|
201
208
|
id={id && `${id}__content`}
|
|
@@ -247,7 +254,7 @@ export const ScrollView = (props) => {
|
|
|
247
254
|
)}
|
|
248
255
|
</div>
|
|
249
256
|
);
|
|
250
|
-
};
|
|
257
|
+
});
|
|
251
258
|
|
|
252
259
|
ScrollView.defaultProps = {
|
|
253
260
|
arrows: false,
|
|
@@ -658,12 +658,22 @@ It's possible to disable just some options or the whole input.
|
|
|
658
658
|
}}
|
|
659
659
|
</Playground>
|
|
660
660
|
|
|
661
|
-
##
|
|
661
|
+
## Forwarding HTML Attributes
|
|
662
|
+
|
|
663
|
+
In addition to the options below in the [component's API](#api) section, you
|
|
664
|
+
can specify [React synthetic events] or you can **add whatever HTML attribute
|
|
665
|
+
you like.** All attributes that don't interfere with the API are forwarded to
|
|
666
|
+
the native HTML `<select>`. This enables making the component interactive and helps
|
|
667
|
+
to improve its accessibility.
|
|
668
|
+
|
|
669
|
+
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
670
|
+
[select] element.
|
|
662
671
|
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
672
|
+
## Forwarding ref
|
|
673
|
+
|
|
674
|
+
If you provide [ref], it is forwarded to the native HTML `<select>` element.
|
|
675
|
+
|
|
676
|
+
## API
|
|
667
677
|
|
|
668
678
|
<Props table of={SelectField} />
|
|
669
679
|
|
|
@@ -679,3 +689,5 @@ options. On top of that, the following options are available for SelectField.
|
|
|
679
689
|
| `--rui-FormField--box--select__option--disabled__color` | Text color of disabled SelectField options |
|
|
680
690
|
|
|
681
691
|
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
692
|
+
[select]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#attributes
|
|
693
|
+
[ref]: https://reactjs.org/docs/refs-and-the-dom.html
|
|
@@ -24,7 +24,6 @@ export const SelectField = React.forwardRef((props, ref) => {
|
|
|
24
24
|
size,
|
|
25
25
|
validationState,
|
|
26
26
|
validationText,
|
|
27
|
-
value,
|
|
28
27
|
variant,
|
|
29
28
|
...restProps
|
|
30
29
|
} = props;
|
|
@@ -38,13 +37,13 @@ export const SelectField = React.forwardRef((props, ref) => {
|
|
|
38
37
|
fullWidth && styles.isRootFullWidth,
|
|
39
38
|
context && styles.isRootInFormLayout,
|
|
40
39
|
resolveContextOrProp(context && context.layout, layout) === 'horizontal'
|
|
41
|
-
? styles.
|
|
42
|
-
: styles.
|
|
40
|
+
? styles.isRootLayoutHorizontal
|
|
41
|
+
: styles.isRootLayoutVertical,
|
|
43
42
|
disabled && styles.isRootDisabled,
|
|
44
43
|
required && styles.isRootRequired,
|
|
45
44
|
getRootSizeClassName(size, styles),
|
|
46
45
|
getRootValidationStateClassName(validationState, styles),
|
|
47
|
-
variant === 'filled' ? styles.
|
|
46
|
+
variant === 'filled' ? styles.isRootVariantFilled : styles.isRootVariantOutline,
|
|
48
47
|
)}
|
|
49
48
|
htmlFor={id}
|
|
50
49
|
id={id && `${id}__label`}
|
|
@@ -67,7 +66,6 @@ export const SelectField = React.forwardRef((props, ref) => {
|
|
|
67
66
|
id={id}
|
|
68
67
|
ref={ref}
|
|
69
68
|
required={required}
|
|
70
|
-
value={value}
|
|
71
69
|
>
|
|
72
70
|
{
|
|
73
71
|
options.map((option) => {
|
|
@@ -132,12 +130,10 @@ SelectField.defaultProps = {
|
|
|
132
130
|
id: undefined,
|
|
133
131
|
isLabelVisible: true,
|
|
134
132
|
layout: 'vertical',
|
|
135
|
-
ref: undefined,
|
|
136
133
|
required: false,
|
|
137
134
|
size: 'medium',
|
|
138
135
|
validationState: null,
|
|
139
136
|
validationText: null,
|
|
140
|
-
value: undefined,
|
|
141
137
|
variant: 'outline',
|
|
142
138
|
};
|
|
143
139
|
|
|
@@ -222,14 +218,6 @@ SelectField.propTypes = {
|
|
|
222
218
|
]),
|
|
223
219
|
})),
|
|
224
220
|
]).isRequired,
|
|
225
|
-
/**
|
|
226
|
-
* Reference forwarded to the `select` element.
|
|
227
|
-
*/
|
|
228
|
-
ref: PropTypes.oneOfType([
|
|
229
|
-
PropTypes.func,
|
|
230
|
-
// eslint-disable-next-line react/forbid-prop-types
|
|
231
|
-
PropTypes.shape({ current: PropTypes.any }),
|
|
232
|
-
]),
|
|
233
221
|
/**
|
|
234
222
|
* If `true`, the input will be required.
|
|
235
223
|
*/
|
|
@@ -246,13 +234,6 @@ SelectField.propTypes = {
|
|
|
246
234
|
* Validation message to be displayed.
|
|
247
235
|
*/
|
|
248
236
|
validationText: PropTypes.node,
|
|
249
|
-
/**
|
|
250
|
-
* Value of the input.
|
|
251
|
-
*/
|
|
252
|
-
value: PropTypes.oneOfType([
|
|
253
|
-
PropTypes.string,
|
|
254
|
-
PropTypes.number,
|
|
255
|
-
]),
|
|
256
237
|
/**
|
|
257
238
|
* Design variant of the field, further customizable with CSS custom properties.
|
|
258
239
|
*/
|
|
@@ -46,11 +46,11 @@
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
// Variants
|
|
49
|
-
.
|
|
49
|
+
.isRootVariantFilled {
|
|
50
50
|
@include variants.visual(box, $variant: filled, $has-caret: true);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
.
|
|
53
|
+
.isRootVariantOutline {
|
|
54
54
|
@include variants.visual(box, $variant: outline, $has-caret: true);
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -73,12 +73,12 @@
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
// Layouts
|
|
76
|
-
.
|
|
77
|
-
.
|
|
76
|
+
.isRootLayoutVertical,
|
|
77
|
+
.isRootLayoutHorizontal {
|
|
78
78
|
@include box-field-layout.vertical();
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
.
|
|
81
|
+
.isRootLayoutHorizontal {
|
|
82
82
|
@include box-field-layout.horizontal();
|
|
83
83
|
}
|
|
84
84
|
|
|
@@ -91,14 +91,14 @@
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
// Sizes
|
|
94
|
-
.
|
|
94
|
+
.isRootSizeSmall {
|
|
95
95
|
@include box-field-sizes.size(small);
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
.
|
|
98
|
+
.isRootSizeMedium {
|
|
99
99
|
@include box-field-sizes.size(medium);
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
.
|
|
102
|
+
.isRootSizeLarge {
|
|
103
103
|
@include box-field-sizes.size(large);
|
|
104
104
|
}
|
|
@@ -40,7 +40,7 @@ And use it:
|
|
|
40
40
|
name: 'name',
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
|
-
format: (
|
|
43
|
+
format: (date) => date.toLocaleDateString('en-GB'),
|
|
44
44
|
label: 'Date of birth',
|
|
45
45
|
name: 'dateOfBirth',
|
|
46
46
|
},
|
|
@@ -99,21 +99,21 @@ The easiest way to make tables responsive is to wrap them with the
|
|
|
99
99
|
name: 'id',
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
|
-
format: (
|
|
103
|
-
<span style={{ whiteSpace: 'nowrap' }}>{
|
|
102
|
+
format: (name) => (
|
|
103
|
+
<span style={{ whiteSpace: 'nowrap' }}>{name}</span>
|
|
104
104
|
),
|
|
105
105
|
label: 'Name',
|
|
106
106
|
name: 'name',
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
|
-
format: (
|
|
110
|
-
<span style={{ whiteSpace: 'nowrap' }}>{
|
|
109
|
+
format: (note) => (
|
|
110
|
+
<span style={{ whiteSpace: 'nowrap' }}>{note}</span>
|
|
111
111
|
),
|
|
112
112
|
label: 'Note',
|
|
113
113
|
name: 'note',
|
|
114
114
|
},
|
|
115
115
|
{
|
|
116
|
-
format: (
|
|
116
|
+
format: (date) => date.toLocaleDateString('en-GB'),
|
|
117
117
|
label: 'Date of birth',
|
|
118
118
|
name: 'dateOfBirth',
|
|
119
119
|
},
|
|
@@ -230,7 +230,7 @@ The following is an example of custom sorting function executed on the client.
|
|
|
230
230
|
name: 'name',
|
|
231
231
|
},
|
|
232
232
|
{
|
|
233
|
-
format: (
|
|
233
|
+
format: (date) => date.toISOString(),
|
|
234
234
|
isSortable: true,
|
|
235
235
|
label: 'Date of birth',
|
|
236
236
|
name: 'dateOfBirth',
|
|
@@ -256,6 +256,20 @@ The following is an example of custom sorting function executed on the client.
|
|
|
256
256
|
}}
|
|
257
257
|
</Playground>
|
|
258
258
|
|
|
259
|
+
## Forwarding HTML Attributes
|
|
260
|
+
|
|
261
|
+
In addition to the options below in the [component's API](#api) section, you
|
|
262
|
+
can specify [React synthetic events] or **any HTML attribute you like.** All
|
|
263
|
+
attributes that don't interfere with the API are forwarded to the `<table>` HTML
|
|
264
|
+
element. This enables making the component interactive and helps to improve its
|
|
265
|
+
accessibility.
|
|
266
|
+
|
|
267
|
+
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
268
|
+
[table] element.
|
|
269
|
+
|
|
259
270
|
## API
|
|
260
271
|
|
|
261
272
|
<Props table of={Table} />
|
|
273
|
+
|
|
274
|
+
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
275
|
+
[table]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table#attributes
|