@react-ui-org/react-ui 0.53.0 → 0.55.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/README.md +7 -5
- package/dist/react-ui.css +36 -38
- package/dist/react-ui.development.css +10800 -0
- package/dist/react-ui.development.js +1568 -0
- package/dist/react-ui.js +1 -1
- package/package.json +7 -4
- package/src/components/Alert/Alert.jsx +1 -1
- package/src/components/Alert/Alert.module.scss +100 -0
- package/src/components/Alert/README.md +9 -7
- package/src/components/Badge/Badge.jsx +1 -1
- package/src/components/Badge/Badge.module.scss +109 -0
- package/src/components/Badge/README.md +9 -7
- package/src/components/Button/Button.jsx +1 -1
- package/src/components/Button/README.md +9 -7
- package/src/components/Button/_base.scss +117 -115
- package/src/components/Button/_priorities.scss +135 -133
- package/src/components/ButtonGroup/ButtonGroup.jsx +1 -1
- package/src/components/ButtonGroup/ButtonGroup.module.scss +35 -0
- package/src/components/ButtonGroup/README.md +10 -8
- package/src/components/Card/Card.jsx +1 -1
- package/src/components/Card/Card.module.scss +72 -0
- package/src/components/Card/CardBody.jsx +1 -1
- package/src/components/Card/CardFooter.jsx +1 -1
- package/src/components/Card/README.md +9 -7
- package/src/components/CheckboxField/CheckboxField.jsx +1 -1
- package/src/components/CheckboxField/CheckboxField.module.scss +63 -0
- package/src/components/CheckboxField/README.md +10 -8
- package/src/components/FileInputField/FileInputField.jsx +1 -1
- package/src/components/FileInputField/FileInputField.module.scss +65 -0
- package/src/components/FileInputField/README.md +10 -8
- package/src/components/FormLayout/FormLayout.jsx +1 -1
- package/src/components/FormLayout/{FormLayout.scss → FormLayout.module.scss} +30 -28
- package/src/components/FormLayout/FormLayoutCustomField.jsx +1 -1
- package/src/components/FormLayout/FormLayoutCustomField.module.scss +65 -0
- package/src/components/FormLayout/README.md +11 -9
- package/src/components/Grid/Grid.jsx +1 -1
- package/src/components/Grid/Grid.module.scss +66 -0
- package/src/components/Grid/GridSpan.jsx +1 -1
- package/src/components/Grid/README.md +11 -8
- package/src/components/InputGroup/InputGroup.jsx +9 -1
- package/src/components/InputGroup/InputGroup.module.scss +93 -0
- package/src/components/InputGroup/README.md +27 -10
- package/src/components/Modal/Modal.jsx +1 -1
- package/src/components/Modal/Modal.module.scss +80 -0
- package/src/components/Modal/ModalBody.jsx +1 -1
- package/src/components/Modal/ModalBody.module.scss +20 -0
- package/src/components/Modal/ModalCloseButton.jsx +1 -1
- package/src/components/Modal/ModalCloseButton.module.scss +20 -0
- package/src/components/Modal/ModalContent.jsx +1 -1
- package/src/components/Modal/ModalContent.module.scss +7 -0
- package/src/components/Modal/ModalFooter.jsx +1 -1
- package/src/components/Modal/ModalFooter.module.scss +37 -0
- package/src/components/Modal/ModalHeader.jsx +1 -1
- package/src/components/Modal/ModalHeader.module.scss +32 -0
- package/src/components/Modal/ModalTitle.jsx +1 -1
- package/src/components/Modal/ModalTitle.module.scss +12 -0
- package/src/components/Modal/README.md +17 -14
- package/src/components/Paper/Paper.jsx +1 -1
- package/src/components/Paper/Paper.module.scss +19 -0
- package/src/components/Paper/README.md +9 -7
- package/src/components/Popover/Popover.jsx +1 -1
- package/src/components/Popover/Popover.module.scss +238 -0
- package/src/components/Popover/PopoverWrapper.jsx +1 -2
- package/src/components/Popover/PopoverWrapper.module.scss +5 -0
- package/src/components/Popover/README.md +9 -7
- package/src/components/Radio/README.md +12 -10
- package/src/components/Radio/Radio.jsx +1 -1
- package/src/components/Radio/Radio.module.scss +85 -0
- package/src/components/ScrollView/README.md +10 -8
- package/src/components/ScrollView/ScrollView.jsx +1 -1
- package/src/components/ScrollView/ScrollView.module.scss +233 -0
- package/src/components/SelectField/README.md +10 -8
- package/src/components/SelectField/SelectField.jsx +1 -1
- package/src/components/SelectField/SelectField.module.scss +111 -0
- package/src/components/Table/README.md +10 -8
- package/src/components/Table/Table.jsx +1 -1
- package/src/components/Table/Table.module.scss +30 -0
- package/src/components/Table/_components/TableBodyCell/TableBodyCell.jsx +1 -1
- package/src/components/Table/_components/TableCell.module.scss +28 -0
- package/src/components/Table/_components/TableHeaderCell/TableHeaderCell.jsx +1 -1
- package/src/components/Tabs/README.md +16 -10
- package/src/components/Tabs/Tabs.jsx +1 -1
- package/src/components/Tabs/Tabs.module.scss +31 -0
- package/src/components/Tabs/TabsItem.jsx +1 -1
- package/src/components/Tabs/TabsItem.module.scss +119 -0
- package/src/components/Text/README.md +15 -9
- package/src/components/Text/Text.jsx +1 -1
- package/src/components/Text/Text.module.scss +42 -0
- package/src/components/TextArea/README.md +10 -8
- package/src/components/TextArea/TextArea.jsx +1 -1
- package/src/components/TextArea/TextArea.module.scss +97 -0
- package/src/components/TextField/README.md +13 -8
- package/src/components/TextField/TextField.jsx +1 -1
- package/src/components/TextField/TextField.module.scss +109 -0
- package/src/components/TextLink/README.md +10 -8
- package/src/components/TextLink/TextLink.jsx +1 -1
- package/src/components/TextLink/TextLink.module.scss +18 -0
- package/src/components/Toggle/README.md +10 -8
- package/src/components/Toggle/Toggle.jsx +1 -1
- package/src/components/Toggle/Toggle.module.scss +63 -0
- package/src/components/Toolbar/README.md +9 -7
- package/src/components/Toolbar/Toolbar.jsx +1 -1
- package/src/components/Toolbar/Toolbar.module.scss +85 -0
- package/src/components/Toolbar/ToolbarGroup.jsx +1 -1
- package/src/components/Toolbar/ToolbarItem.jsx +1 -1
- package/src/components/_helpers/transferProps.js +47 -7
- package/src/foundation.scss +22 -17
- package/src/helpers.scss +12 -8
- package/src/index.js +3 -4
- package/src/index.scss +7 -0
- package/src/layers.scss +4 -0
- package/src/styles/elements/_page.scss +0 -4
- package/src/styles/helpers/_animation.scss +2 -2
- package/src/styles/tools/_utilities.scss +1 -1
- package/src/theme.scss +1040 -1038
- package/CODEOWNERS +0 -23
- package/src/components/Alert/Alert.scss +0 -98
- package/src/components/Badge/Badge.scss +0 -107
- package/src/components/ButtonGroup/ButtonGroup.scss +0 -33
- package/src/components/Card/Card.scss +0 -70
- package/src/components/CheckboxField/CheckboxField.scss +0 -61
- package/src/components/FileInputField/FileInputField.scss +0 -63
- package/src/components/FormLayout/FormLayoutCustomField.scss +0 -63
- package/src/components/Grid/Grid.scss +0 -63
- package/src/components/InputGroup/InputGroup.scss +0 -87
- package/src/components/Modal/Modal.scss +0 -78
- package/src/components/Modal/ModalBody.scss +0 -18
- package/src/components/Modal/ModalCloseButton.scss +0 -18
- package/src/components/Modal/ModalContent.scss +0 -5
- package/src/components/Modal/ModalFooter.scss +0 -35
- package/src/components/Modal/ModalHeader.scss +0 -30
- package/src/components/Modal/ModalTitle.scss +0 -10
- package/src/components/Paper/Paper.scss +0 -17
- package/src/components/Popover/Popover.scss +0 -236
- package/src/components/Popover/PopoverWrapper.scss +0 -3
- package/src/components/Radio/Radio.scss +0 -83
- package/src/components/ScrollView/ScrollView.scss +0 -227
- package/src/components/SelectField/SelectField.scss +0 -109
- package/src/components/Table/Table.scss +0 -28
- package/src/components/Table/_components/TableCell.scss +0 -26
- package/src/components/Tabs/Tabs.scss +0 -28
- package/src/components/Tabs/TabsItem.scss +0 -117
- package/src/components/Text/Text.scss +0 -40
- package/src/components/TextArea/TextArea.scss +0 -95
- package/src/components/TextField/TextField.scss +0 -107
- package/src/components/TextLink/TextLink.scss +0 -16
- package/src/components/Toggle/Toggle.scss +0 -61
- package/src/components/Toolbar/Toolbar.scss +0 -83
- /package/src/components/Button/{Button.scss → Button.module.scss} +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
@use "../settings";
|
|
2
|
+
|
|
3
|
+
@layer components.table {
|
|
4
|
+
.tableCell,
|
|
5
|
+
.tableHeadCell,
|
|
6
|
+
.isTableCellSortingActive,
|
|
7
|
+
.isTableHeadCellSortingActive {
|
|
8
|
+
padding: settings.$cell-padding-y settings.$cell-padding-x;
|
|
9
|
+
text-align: left;
|
|
10
|
+
border-bottom: settings.$border-width solid settings.$border-color;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.tableHeadCell {
|
|
14
|
+
font-weight: settings.$head-font-weight;
|
|
15
|
+
border-bottom-width: 2px;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.tableHeadCellLayout {
|
|
19
|
+
display: flex;
|
|
20
|
+
gap: settings.$cell-padding-x;
|
|
21
|
+
align-items: center;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.isTableCellSortingActive,
|
|
25
|
+
.isTableHeadCellSortingActive {
|
|
26
|
+
background-color: settings.$sorted-background-color;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -157,14 +157,20 @@ React.createElement(() => {
|
|
|
157
157
|
## Forwarding HTML Attributes
|
|
158
158
|
|
|
159
159
|
In addition to the options below in the [component's API](#api) section, you
|
|
160
|
-
can specify
|
|
161
|
-
|
|
162
|
-
element in case of `Tabs` component and to the `<a>` HTML element in
|
|
163
|
-
case of `TabsItem`. This enables making the component interactive and helps
|
|
164
|
-
to improve its accessibility.
|
|
160
|
+
can specify **any HTML attribute you like.** All attributes that don't interfere
|
|
161
|
+
with the API of the React component are forwarded to:
|
|
165
162
|
|
|
166
|
-
|
|
167
|
-
|
|
163
|
+
- the root `<nav>` HTML element in case of `Tabs` component
|
|
164
|
+
- the `<a>` HTML element in case of `TabsItem`
|
|
165
|
+
|
|
166
|
+
This enables making the component interactive and helps to improve its
|
|
167
|
+
accessibility.
|
|
168
|
+
|
|
169
|
+
👉 For the full list of supported attributes refer to:
|
|
170
|
+
|
|
171
|
+
- [`<nav>` HTML element attributes][nav-attributes]{:target="_blank"}
|
|
172
|
+
- [`<a>` HTML element attributes][a-attributes]{:target="_blank"}
|
|
173
|
+
- [React common props]{:target="_blank"}
|
|
168
174
|
|
|
169
175
|
## API
|
|
170
176
|
|
|
@@ -216,6 +222,6 @@ Where:
|
|
|
216
222
|
`background-color`, `box-shadow`, `shift-y` (shifts vertically the whole
|
|
217
223
|
item), or `label__shift-y` (tweaks vertical position of tab label).
|
|
218
224
|
|
|
219
|
-
[
|
|
220
|
-
[nav]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/nav#attributes
|
|
221
|
-
[
|
|
225
|
+
[a-attributes]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li#attributes
|
|
226
|
+
[nav-attributes]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/nav#attributes
|
|
227
|
+
[React common props]: https://react.dev/reference/react-dom/components/common#common-props
|
|
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { withGlobalProps } from '../../provider';
|
|
4
4
|
import { transferProps } from '../_helpers/transferProps';
|
|
5
|
-
import styles from './Tabs.scss';
|
|
5
|
+
import styles from './Tabs.module.scss';
|
|
6
6
|
|
|
7
7
|
export const Tabs = ({
|
|
8
8
|
children,
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// 1. Use the `clip` value to prevent the content from unwanted vertical scrolling during keyboard navigation.
|
|
2
|
+
// 2. Decorative bottom border.
|
|
3
|
+
|
|
4
|
+
@use "../../styles/tools/reset";
|
|
5
|
+
@use "theme";
|
|
6
|
+
|
|
7
|
+
@layer components.tabs {
|
|
8
|
+
.list {
|
|
9
|
+
@include reset.list();
|
|
10
|
+
|
|
11
|
+
position: relative;
|
|
12
|
+
display: inline-flex;
|
|
13
|
+
min-width: 100%;
|
|
14
|
+
padding-right: theme.$padding-x;
|
|
15
|
+
padding-left: theme.$padding-x;
|
|
16
|
+
overflow-y: clip; // 1.
|
|
17
|
+
white-space: nowrap;
|
|
18
|
+
|
|
19
|
+
// 2.
|
|
20
|
+
&::after {
|
|
21
|
+
content: "";
|
|
22
|
+
position: absolute;
|
|
23
|
+
right: 0;
|
|
24
|
+
bottom: 0;
|
|
25
|
+
left: 0;
|
|
26
|
+
z-index: 1;
|
|
27
|
+
height: theme.$border-bottom-width;
|
|
28
|
+
background-color: theme.$border-bottom-color;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -3,7 +3,7 @@ import React from 'react';
|
|
|
3
3
|
import { withGlobalProps } from '../../provider';
|
|
4
4
|
import { transferProps } from '../_helpers/transferProps';
|
|
5
5
|
import { classNames } from '../../utils/classNames';
|
|
6
|
-
import styles from './TabsItem.scss';
|
|
6
|
+
import styles from './TabsItem.module.scss';
|
|
7
7
|
|
|
8
8
|
export const TabsItem = ({
|
|
9
9
|
afterLabel,
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// 1. Keep inactive items under Tabs' decorative bottom border and pop active ones above it.
|
|
2
|
+
|
|
3
|
+
@use "../../styles/tools/breakpoint";
|
|
4
|
+
@use "../../styles/tools/reset";
|
|
5
|
+
@use "../../styles/tools/transition";
|
|
6
|
+
@use "theme";
|
|
7
|
+
|
|
8
|
+
@layer components.tabs {
|
|
9
|
+
.root {
|
|
10
|
+
@include transition.add(transform);
|
|
11
|
+
|
|
12
|
+
position: relative; // 1.
|
|
13
|
+
z-index: 1; // 1.
|
|
14
|
+
flex: none;
|
|
15
|
+
padding-top: calc(-1 * #{theme.$item-active-shift-y});
|
|
16
|
+
margin-bottom: theme.$item-active-shift-y;
|
|
17
|
+
transform: translateY(0);
|
|
18
|
+
|
|
19
|
+
&:hover,
|
|
20
|
+
&:focus-within {
|
|
21
|
+
transform: translateY(theme.$item-hover-shift-y);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&:not(:last-child) {
|
|
25
|
+
margin-right: theme.$gap-xs;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@include breakpoint.up(sm) {
|
|
29
|
+
&:not(:last-child) {
|
|
30
|
+
margin-right: theme.$gap-sm;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@include breakpoint.up(md) {
|
|
35
|
+
&:not(:last-child) {
|
|
36
|
+
margin-right: theme.$gap-md;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.link {
|
|
42
|
+
@include reset.link();
|
|
43
|
+
@include transition.add((color, border-color, background-color, box-shadow));
|
|
44
|
+
|
|
45
|
+
display: block;
|
|
46
|
+
padding: theme.$item-padding-xs;
|
|
47
|
+
font-weight: theme.$item-font-weight;
|
|
48
|
+
line-height: 1;
|
|
49
|
+
text-decoration: none;
|
|
50
|
+
color: theme.$item-color;
|
|
51
|
+
border: theme.$item-border-width solid;
|
|
52
|
+
border-color: theme.$item-border-color;
|
|
53
|
+
border-top-left-radius: theme.$item-border-radius;
|
|
54
|
+
border-top-right-radius: theme.$item-border-radius;
|
|
55
|
+
background-color: theme.$item-background-color;
|
|
56
|
+
box-shadow: theme.$item-box-shadow;
|
|
57
|
+
|
|
58
|
+
&:hover,
|
|
59
|
+
&:focus {
|
|
60
|
+
font-weight: theme.$item-hover-font-weight;
|
|
61
|
+
color: theme.$item-hover-color;
|
|
62
|
+
border-width: theme.$item-hover-border-width;
|
|
63
|
+
border-color: theme.$item-hover-border-color;
|
|
64
|
+
background-color: theme.$item-hover-background-color;
|
|
65
|
+
box-shadow: theme.$item-hover-box-shadow;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@include breakpoint.up(sm) {
|
|
69
|
+
padding: theme.$item-padding-sm;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@include breakpoint.up(md) {
|
|
73
|
+
padding: theme.$item-padding-md;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.linkContent {
|
|
78
|
+
@include transition.add(transform);
|
|
79
|
+
|
|
80
|
+
display: flex;
|
|
81
|
+
align-items: center;
|
|
82
|
+
transform: translateY(0);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.label:not(:first-child) {
|
|
86
|
+
margin-left: theme.$item-icon-gap;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.label:not(:last-child) {
|
|
90
|
+
margin-right: theme.$item-icon-gap;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.isRootActive,
|
|
94
|
+
.isRootActive:hover,
|
|
95
|
+
.isRootActive:focus-within {
|
|
96
|
+
z-index: 2; // 1.
|
|
97
|
+
transform: translateY(theme.$item-active-shift-y);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.isRootActive .link {
|
|
101
|
+
font-weight: theme.$item-active-font-weight;
|
|
102
|
+
color: theme.$item-active-color;
|
|
103
|
+
border-width: theme.$item-active-border-width;
|
|
104
|
+
border-color: theme.$item-active-border-color;
|
|
105
|
+
background-color: theme.$item-active-background-color;
|
|
106
|
+
box-shadow: theme.$item-active-box-shadow;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.link:hover .linkContent,
|
|
110
|
+
.link:focus .linkContent {
|
|
111
|
+
transform: translateY(theme.$item-hover-label-shift-y);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.isRootActive .link .linkContent,
|
|
115
|
+
.isRootActive .link:hover .linkContent,
|
|
116
|
+
.isRootActive .link:focus .linkContent {
|
|
117
|
+
transform: translateY(theme.$item-active-label-shift-y);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -202,19 +202,25 @@ React.createElement(() => {
|
|
|
202
202
|
## Forwarding HTML Attributes
|
|
203
203
|
|
|
204
204
|
In addition to the options below in the [component's API](#api) section, you
|
|
205
|
-
can specify
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
205
|
+
can specify **any HTML attribute you like.** All attributes that don't interfere
|
|
206
|
+
with the API of the React component are forwarded to the root:
|
|
207
|
+
|
|
208
|
+
- `<span>` HTML element in case that `blockLevel` is set to `false`
|
|
209
|
+
- `<div>` HTML element in case that `blockLevel` is set to `true`
|
|
210
|
+
|
|
211
|
+
This enables making the component interactive and helps to improve its
|
|
209
212
|
accessibility.
|
|
210
213
|
|
|
211
|
-
👉
|
|
212
|
-
|
|
214
|
+
👉 For the full list of supported attributes refer to:
|
|
215
|
+
|
|
216
|
+
- [`<span>` HTML element attributes][span-attributes]{:target="_blank"}
|
|
217
|
+
- [`<div>` HTML element attributes][div-attributes]{:target="_blank"}
|
|
218
|
+
- [React common props]{:target="_blank"}
|
|
213
219
|
|
|
214
220
|
## API
|
|
215
221
|
|
|
216
222
|
<docoff-react-props src="/components/Text/Text.jsx"></docoff-react-props>
|
|
217
223
|
|
|
218
|
-
[
|
|
219
|
-
[
|
|
220
|
-
[
|
|
224
|
+
[div-attributes]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
|
|
225
|
+
[React common props]: https://react.dev/reference/react-dom/components/common#common-props
|
|
226
|
+
[span-attributes]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/span#attributes
|
|
@@ -7,7 +7,7 @@ import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
|
|
|
7
7
|
import { getRootClampClassName } from './_helpers/getRootClampClassName';
|
|
8
8
|
import { getRootHyphensClassName } from './_helpers/getRootHyphensClassName';
|
|
9
9
|
import { getRootWordWrappingClassName } from './_helpers/getRootWordWrappingClassName';
|
|
10
|
-
import styles from './Text.scss';
|
|
10
|
+
import styles from './Text.module.scss';
|
|
11
11
|
|
|
12
12
|
export const Text = ({
|
|
13
13
|
blockLevel,
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// 1. `word-break: break-word` is deprecated in favour of `overflow-wrap: anywhere`, but it's still
|
|
2
|
+
// required for Safari.
|
|
3
|
+
// https://caniuse.com/mdn-css_properties_overflow-wrap_anywhere
|
|
4
|
+
//
|
|
5
|
+
// 2. Different approaches are used for single and multiline texts because the latter approach
|
|
6
|
+
// doesn't always work for single-line texts.
|
|
7
|
+
|
|
8
|
+
@layer components.text {
|
|
9
|
+
.isRootClampSingleLine {
|
|
10
|
+
display: block; // 2.
|
|
11
|
+
overflow: hidden;
|
|
12
|
+
text-overflow: ellipsis;
|
|
13
|
+
white-space: nowrap;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// stylelint-disable property-no-vendor-prefix, value-no-vendor-prefix
|
|
17
|
+
.isRootClampMultiLine {
|
|
18
|
+
display: -webkit-box; // 2.
|
|
19
|
+
-webkit-line-clamp: var(--rui-custom-lines);
|
|
20
|
+
-webkit-box-orient: vertical;
|
|
21
|
+
overflow: hidden;
|
|
22
|
+
text-overflow: ellipsis;
|
|
23
|
+
}
|
|
24
|
+
// stylelint-enable property-no-vendor-prefix, value-no-vendor-prefix
|
|
25
|
+
|
|
26
|
+
.isRootHyphensAuto {
|
|
27
|
+
hyphens: auto;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.isRootHyphensManual {
|
|
31
|
+
hyphens: manual;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.isRootWordWrappingAnywhere {
|
|
35
|
+
word-break: break-all;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.isRootWordWrappingLongWords {
|
|
39
|
+
word-break: break-word; // 1.
|
|
40
|
+
overflow-wrap: anywhere;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -317,10 +317,10 @@ It's possible to disable the whole input.
|
|
|
317
317
|
## Forwarding HTML Attributes
|
|
318
318
|
|
|
319
319
|
In addition to the options below in the [component's API](#api) section, you
|
|
320
|
-
can specify
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
320
|
+
can specify **any HTML attribute you like.** All attributes that don't interfere
|
|
321
|
+
with the API of the React component are forwarded to the root `<textarea>` HTML
|
|
322
|
+
element. This enables making the component interactive and helps to improve
|
|
323
|
+
its accessibility.
|
|
324
324
|
|
|
325
325
|
```docoff-react-preview
|
|
326
326
|
<TextArea
|
|
@@ -338,8 +338,10 @@ to helps to improve its accessibility.
|
|
|
338
338
|
/>
|
|
339
339
|
```
|
|
340
340
|
|
|
341
|
-
👉
|
|
342
|
-
|
|
341
|
+
👉 For the full list of supported attributes refer to:
|
|
342
|
+
|
|
343
|
+
- [`<textarea>` HTML element attributes][textarea-attributes]{:target="_blank"}
|
|
344
|
+
- [React common props]{:target="_blank"}
|
|
343
345
|
|
|
344
346
|
## Forwarding ref
|
|
345
347
|
|
|
@@ -354,6 +356,6 @@ If you provide [ref], it is forwarded to the native HTML `<textarea>` element.
|
|
|
354
356
|
Head to [Forms Theming](/docs/customize/theming/forms) to see shared form theming
|
|
355
357
|
options.
|
|
356
358
|
|
|
357
|
-
[React
|
|
358
|
-
[textarea]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea#attributes
|
|
359
|
+
[React common props]: https://react.dev/reference/react-dom/components/common#common-props
|
|
359
360
|
[ref]: https://reactjs.org/docs/refs-and-the-dom.html
|
|
361
|
+
[textarea-attributes]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea#attributes
|
|
@@ -7,7 +7,7 @@ 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 styles from './TextArea.scss';
|
|
10
|
+
import styles from './TextArea.module.scss';
|
|
11
11
|
|
|
12
12
|
export const TextArea = React.forwardRef((props, ref) => {
|
|
13
13
|
const {
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
@use "../../styles/tools/form-fields/box-field-elements";
|
|
2
|
+
@use "../../styles/tools/form-fields/box-field-layout";
|
|
3
|
+
@use "../../styles/tools/form-fields/box-field-sizes";
|
|
4
|
+
@use "../../styles/tools/form-fields/foundation";
|
|
5
|
+
@use "../../styles/tools/form-fields/variants";
|
|
6
|
+
@use "../../styles/tools/accessibility";
|
|
7
|
+
|
|
8
|
+
@layer components.text-area {
|
|
9
|
+
// Foundation
|
|
10
|
+
.root {
|
|
11
|
+
@include foundation.root();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.label {
|
|
15
|
+
@include foundation.label();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.inputContainer {
|
|
19
|
+
@include box-field-elements.input-container();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.input {
|
|
23
|
+
@include box-field-elements.input();
|
|
24
|
+
@include box-field-elements.input-textarea();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.bottomLine {
|
|
28
|
+
@include box-field-elements.bottom-line();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.helpText,
|
|
32
|
+
.validationText {
|
|
33
|
+
@include foundation.help-text();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.isRootRequired .label {
|
|
37
|
+
@include foundation.label-required();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Visual variants
|
|
41
|
+
.isRootVariantFilled {
|
|
42
|
+
@include variants.visual(box, $variant: filled);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.isRootVariantOutline {
|
|
46
|
+
@include variants.visual(box, $variant: outline);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// States
|
|
50
|
+
.isRootStateInvalid {
|
|
51
|
+
@include variants.validation(invalid);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.isRootStateValid {
|
|
55
|
+
@include variants.validation(valid);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.isRootStateWarning {
|
|
59
|
+
@include variants.validation(warning);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Invisible label
|
|
63
|
+
.isLabelHidden {
|
|
64
|
+
@include accessibility.hide-text();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Layouts
|
|
68
|
+
.isRootLayoutVertical,
|
|
69
|
+
.isRootLayoutHorizontal {
|
|
70
|
+
@include box-field-layout.vertical();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.isRootLayoutHorizontal {
|
|
74
|
+
@include box-field-layout.horizontal();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.isRootFullWidth {
|
|
78
|
+
@include box-field-layout.full-width();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.isRootInFormLayout {
|
|
82
|
+
@include box-field-layout.in-form-layout();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Sizes
|
|
86
|
+
.isRootSizeSmall {
|
|
87
|
+
@include box-field-sizes.size(small, $is-multiline: true);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.isRootSizeMedium {
|
|
91
|
+
@include box-field-sizes.size(medium, $is-multiline: true);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.isRootSizeLarge {
|
|
95
|
+
@include box-field-sizes.size(large, $is-multiline: true);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -445,10 +445,10 @@ It's possible to disable the whole input.
|
|
|
445
445
|
## Forwarding HTML Attributes
|
|
446
446
|
|
|
447
447
|
In addition to the options below in the [component's API](#api) section, you
|
|
448
|
-
can specify
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
448
|
+
can specify **any HTML attribute you like.** All attributes that don't interfere
|
|
449
|
+
with the API of the React component are forwarded to the root `<input>` HTML
|
|
450
|
+
element. This enables making the component interactive and helps to improve
|
|
451
|
+
its accessibility.
|
|
452
452
|
|
|
453
453
|
```docoff-react-preview
|
|
454
454
|
<TextField
|
|
@@ -481,9 +481,14 @@ helps to improve its accessibility.
|
|
|
481
481
|
/>
|
|
482
482
|
```
|
|
483
483
|
|
|
484
|
-
👉
|
|
485
|
-
|
|
486
|
-
[
|
|
484
|
+
👉 For the full list of supported attributes refer to:
|
|
485
|
+
|
|
486
|
+
- [`<input type="text" />` HTML element attributes][input-text]{:target="_blank"}
|
|
487
|
+
- [`<input type="email" />` HTML element attributes][input-email]{:target="_blank"}
|
|
488
|
+
- [`<input type="number" />` HTML element attributes][input-number]{:target="_blank"}
|
|
489
|
+
- [`<input type="tel" />` HTML element attributes][input-tel]{:target="_blank"}
|
|
490
|
+
- [`<input type="password" />` HTML element attributes][input-password]{:target="_blank"}
|
|
491
|
+
- [React common props]{:target="_blank"}
|
|
487
492
|
|
|
488
493
|
## Forwarding ref
|
|
489
494
|
|
|
@@ -508,5 +513,5 @@ Head to [Forms Theming][theming-forms] to see shared form theming options.
|
|
|
508
513
|
[input-tel]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/tel#additional_attributes
|
|
509
514
|
[input-password]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password#additional_attributes
|
|
510
515
|
[theming-forms]: /docs/customize/theming/forms
|
|
511
|
-
[React
|
|
516
|
+
[React common props]: https://react.dev/reference/react-dom/components/common#common-props
|
|
512
517
|
[ref]: https://reactjs.org/docs/refs-and-the-dom.html
|
|
@@ -8,7 +8,7 @@ import { resolveContextOrProp } from '../_helpers/resolveContextOrProp';
|
|
|
8
8
|
import { transferProps } from '../_helpers/transferProps';
|
|
9
9
|
import { FormLayoutContext } from '../FormLayout';
|
|
10
10
|
import { InputGroupContext } from '../InputGroup/InputGroupContext';
|
|
11
|
-
import styles from './TextField.scss';
|
|
11
|
+
import styles from './TextField.module.scss';
|
|
12
12
|
|
|
13
13
|
const SMALL_INPUT_SIZE = 10;
|
|
14
14
|
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
@use "../../styles/tools/form-fields/box-field-elements";
|
|
2
|
+
@use "../../styles/tools/form-fields/box-field-layout";
|
|
3
|
+
@use "../../styles/tools/form-fields/box-field-sizes";
|
|
4
|
+
@use "../../styles/tools/form-fields/foundation";
|
|
5
|
+
@use "../../styles/tools/form-fields/variants";
|
|
6
|
+
@use "../../styles/tools/accessibility";
|
|
7
|
+
|
|
8
|
+
@layer components.text-field {
|
|
9
|
+
// Foundation
|
|
10
|
+
.root {
|
|
11
|
+
@include foundation.root();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.label {
|
|
15
|
+
@include foundation.label();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.inputContainer {
|
|
19
|
+
@include box-field-elements.input-container();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.input {
|
|
23
|
+
@include box-field-elements.input();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.bottomLine {
|
|
27
|
+
@include box-field-elements.bottom-line();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.helpText,
|
|
31
|
+
.validationText {
|
|
32
|
+
@include foundation.help-text();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.hasRootCustomInputSize .input {
|
|
36
|
+
@include box-field-elements.input-size();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.isRootRequired .label {
|
|
40
|
+
@include foundation.label-required();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Variants
|
|
44
|
+
.isRootVariantFilled {
|
|
45
|
+
@include variants.visual(box, $variant: filled);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.isRootVariantOutline {
|
|
49
|
+
@include variants.visual(box, $variant: outline);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// States
|
|
53
|
+
.isRootStateInvalid {
|
|
54
|
+
@include variants.validation(invalid);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.isRootStateValid {
|
|
58
|
+
@include variants.validation(valid);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.isRootStateWarning {
|
|
62
|
+
@include variants.validation(warning);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Invisible label
|
|
66
|
+
.isLabelHidden {
|
|
67
|
+
@include accessibility.hide-text();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Layouts
|
|
71
|
+
.isRootLayoutVertical,
|
|
72
|
+
.isRootLayoutHorizontal {
|
|
73
|
+
@include box-field-layout.vertical();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.isRootLayoutHorizontal {
|
|
77
|
+
@include box-field-layout.horizontal();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.isRootFullWidth {
|
|
81
|
+
@include box-field-layout.full-width();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.isRootInFormLayout {
|
|
85
|
+
@include box-field-layout.in-form-layout();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.hasRootSmallInput.isRootLayoutHorizontal {
|
|
89
|
+
@include box-field-layout.horizontal-with-small-input();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Sizes
|
|
93
|
+
.isRootSizeSmall {
|
|
94
|
+
@include box-field-sizes.size(small);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.isRootSizeMedium {
|
|
98
|
+
@include box-field-sizes.size(medium);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.isRootSizeLarge {
|
|
102
|
+
@include box-field-sizes.size(large);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Groups
|
|
106
|
+
.isRootGrouped {
|
|
107
|
+
@include box-field-elements.in-group-layout();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -47,13 +47,15 @@ It's common to use custom function for routing within SPAs. Use the
|
|
|
47
47
|
## Forwarding HTML Attributes
|
|
48
48
|
|
|
49
49
|
In addition to the options below in the [component's API](#api) section, you
|
|
50
|
-
can specify
|
|
51
|
-
|
|
52
|
-
element. This enables making the component interactive and helps to improve
|
|
53
|
-
accessibility.
|
|
50
|
+
can specify **any HTML attribute you like.** All attributes that don't interfere
|
|
51
|
+
with the API of the React component are forwarded to the root `<a>` HTML
|
|
52
|
+
element. This enables making the component interactive and helps to improve
|
|
53
|
+
its accessibility.
|
|
54
54
|
|
|
55
|
-
👉
|
|
56
|
-
|
|
55
|
+
👉 For the full list of supported attributes refer to:
|
|
56
|
+
|
|
57
|
+
- [`<a>` HTML element attributes][a-attributes]{:target="_blank"}
|
|
58
|
+
- [React common props]{:target="_blank"}
|
|
57
59
|
|
|
58
60
|
## API
|
|
59
61
|
|
|
@@ -70,5 +72,5 @@ accessibility.
|
|
|
70
72
|
| `--rui-TextLink--active__color` | Text color in the active state |
|
|
71
73
|
| `--rui-TextLink--active__text-decoration` | Text decoration in the active state |
|
|
72
74
|
|
|
73
|
-
[
|
|
74
|
-
[
|
|
75
|
+
[a-attributes]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attributes
|
|
76
|
+
[React common props]: https://react.dev/reference/react-dom/components/common#common-props
|