@react-ui-org/react-ui 0.53.0 → 0.55.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. package/README.md +7 -5
  2. package/dist/react-ui.css +36 -38
  3. package/dist/react-ui.development.css +10800 -0
  4. package/dist/react-ui.development.js +1568 -0
  5. package/dist/react-ui.js +1 -1
  6. package/package.json +7 -4
  7. package/src/components/Alert/Alert.jsx +1 -1
  8. package/src/components/Alert/Alert.module.scss +100 -0
  9. package/src/components/Alert/README.md +9 -7
  10. package/src/components/Badge/Badge.jsx +1 -1
  11. package/src/components/Badge/Badge.module.scss +109 -0
  12. package/src/components/Badge/README.md +9 -7
  13. package/src/components/Button/Button.jsx +1 -1
  14. package/src/components/Button/README.md +9 -7
  15. package/src/components/Button/_base.scss +117 -115
  16. package/src/components/Button/_priorities.scss +135 -133
  17. package/src/components/ButtonGroup/ButtonGroup.jsx +1 -1
  18. package/src/components/ButtonGroup/ButtonGroup.module.scss +35 -0
  19. package/src/components/ButtonGroup/README.md +10 -8
  20. package/src/components/Card/Card.jsx +1 -1
  21. package/src/components/Card/Card.module.scss +72 -0
  22. package/src/components/Card/CardBody.jsx +1 -1
  23. package/src/components/Card/CardFooter.jsx +1 -1
  24. package/src/components/Card/README.md +9 -7
  25. package/src/components/CheckboxField/CheckboxField.jsx +1 -1
  26. package/src/components/CheckboxField/CheckboxField.module.scss +63 -0
  27. package/src/components/CheckboxField/README.md +10 -8
  28. package/src/components/FileInputField/FileInputField.jsx +1 -1
  29. package/src/components/FileInputField/FileInputField.module.scss +65 -0
  30. package/src/components/FileInputField/README.md +10 -8
  31. package/src/components/FormLayout/FormLayout.jsx +1 -1
  32. package/src/components/FormLayout/{FormLayout.scss → FormLayout.module.scss} +30 -28
  33. package/src/components/FormLayout/FormLayoutCustomField.jsx +1 -1
  34. package/src/components/FormLayout/FormLayoutCustomField.module.scss +65 -0
  35. package/src/components/FormLayout/README.md +11 -9
  36. package/src/components/Grid/Grid.jsx +1 -1
  37. package/src/components/Grid/Grid.module.scss +66 -0
  38. package/src/components/Grid/GridSpan.jsx +1 -1
  39. package/src/components/Grid/README.md +11 -8
  40. package/src/components/InputGroup/InputGroup.jsx +9 -1
  41. package/src/components/InputGroup/InputGroup.module.scss +93 -0
  42. package/src/components/InputGroup/README.md +27 -10
  43. package/src/components/Modal/Modal.jsx +1 -1
  44. package/src/components/Modal/Modal.module.scss +80 -0
  45. package/src/components/Modal/ModalBody.jsx +1 -1
  46. package/src/components/Modal/ModalBody.module.scss +20 -0
  47. package/src/components/Modal/ModalCloseButton.jsx +1 -1
  48. package/src/components/Modal/ModalCloseButton.module.scss +20 -0
  49. package/src/components/Modal/ModalContent.jsx +1 -1
  50. package/src/components/Modal/ModalContent.module.scss +7 -0
  51. package/src/components/Modal/ModalFooter.jsx +1 -1
  52. package/src/components/Modal/ModalFooter.module.scss +37 -0
  53. package/src/components/Modal/ModalHeader.jsx +1 -1
  54. package/src/components/Modal/ModalHeader.module.scss +32 -0
  55. package/src/components/Modal/ModalTitle.jsx +1 -1
  56. package/src/components/Modal/ModalTitle.module.scss +12 -0
  57. package/src/components/Modal/README.md +17 -14
  58. package/src/components/Paper/Paper.jsx +1 -1
  59. package/src/components/Paper/Paper.module.scss +19 -0
  60. package/src/components/Paper/README.md +9 -7
  61. package/src/components/Popover/Popover.jsx +1 -1
  62. package/src/components/Popover/Popover.module.scss +238 -0
  63. package/src/components/Popover/PopoverWrapper.jsx +1 -2
  64. package/src/components/Popover/PopoverWrapper.module.scss +5 -0
  65. package/src/components/Popover/README.md +9 -7
  66. package/src/components/Radio/README.md +12 -10
  67. package/src/components/Radio/Radio.jsx +1 -1
  68. package/src/components/Radio/Radio.module.scss +85 -0
  69. package/src/components/ScrollView/README.md +10 -8
  70. package/src/components/ScrollView/ScrollView.jsx +1 -1
  71. package/src/components/ScrollView/ScrollView.module.scss +233 -0
  72. package/src/components/SelectField/README.md +10 -8
  73. package/src/components/SelectField/SelectField.jsx +1 -1
  74. package/src/components/SelectField/SelectField.module.scss +111 -0
  75. package/src/components/Table/README.md +10 -8
  76. package/src/components/Table/Table.jsx +1 -1
  77. package/src/components/Table/Table.module.scss +30 -0
  78. package/src/components/Table/_components/TableBodyCell/TableBodyCell.jsx +1 -1
  79. package/src/components/Table/_components/TableCell.module.scss +28 -0
  80. package/src/components/Table/_components/TableHeaderCell/TableHeaderCell.jsx +1 -1
  81. package/src/components/Tabs/README.md +16 -10
  82. package/src/components/Tabs/Tabs.jsx +1 -1
  83. package/src/components/Tabs/Tabs.module.scss +31 -0
  84. package/src/components/Tabs/TabsItem.jsx +1 -1
  85. package/src/components/Tabs/TabsItem.module.scss +119 -0
  86. package/src/components/Text/README.md +15 -9
  87. package/src/components/Text/Text.jsx +1 -1
  88. package/src/components/Text/Text.module.scss +42 -0
  89. package/src/components/TextArea/README.md +10 -8
  90. package/src/components/TextArea/TextArea.jsx +1 -1
  91. package/src/components/TextArea/TextArea.module.scss +97 -0
  92. package/src/components/TextField/README.md +13 -8
  93. package/src/components/TextField/TextField.jsx +1 -1
  94. package/src/components/TextField/TextField.module.scss +109 -0
  95. package/src/components/TextLink/README.md +10 -8
  96. package/src/components/TextLink/TextLink.jsx +1 -1
  97. package/src/components/TextLink/TextLink.module.scss +18 -0
  98. package/src/components/Toggle/README.md +10 -8
  99. package/src/components/Toggle/Toggle.jsx +1 -1
  100. package/src/components/Toggle/Toggle.module.scss +63 -0
  101. package/src/components/Toolbar/README.md +9 -7
  102. package/src/components/Toolbar/Toolbar.jsx +1 -1
  103. package/src/components/Toolbar/Toolbar.module.scss +85 -0
  104. package/src/components/Toolbar/ToolbarGroup.jsx +1 -1
  105. package/src/components/Toolbar/ToolbarItem.jsx +1 -1
  106. package/src/components/_helpers/transferProps.js +47 -7
  107. package/src/foundation.scss +22 -17
  108. package/src/helpers.scss +12 -8
  109. package/src/index.js +3 -4
  110. package/src/index.scss +7 -0
  111. package/src/layers.scss +4 -0
  112. package/src/styles/elements/_page.scss +0 -4
  113. package/src/styles/helpers/_animation.scss +2 -2
  114. package/src/styles/tools/_utilities.scss +1 -1
  115. package/src/theme.scss +1040 -1038
  116. package/CODEOWNERS +0 -23
  117. package/src/components/Alert/Alert.scss +0 -98
  118. package/src/components/Badge/Badge.scss +0 -107
  119. package/src/components/ButtonGroup/ButtonGroup.scss +0 -33
  120. package/src/components/Card/Card.scss +0 -70
  121. package/src/components/CheckboxField/CheckboxField.scss +0 -61
  122. package/src/components/FileInputField/FileInputField.scss +0 -63
  123. package/src/components/FormLayout/FormLayoutCustomField.scss +0 -63
  124. package/src/components/Grid/Grid.scss +0 -63
  125. package/src/components/InputGroup/InputGroup.scss +0 -87
  126. package/src/components/Modal/Modal.scss +0 -78
  127. package/src/components/Modal/ModalBody.scss +0 -18
  128. package/src/components/Modal/ModalCloseButton.scss +0 -18
  129. package/src/components/Modal/ModalContent.scss +0 -5
  130. package/src/components/Modal/ModalFooter.scss +0 -35
  131. package/src/components/Modal/ModalHeader.scss +0 -30
  132. package/src/components/Modal/ModalTitle.scss +0 -10
  133. package/src/components/Paper/Paper.scss +0 -17
  134. package/src/components/Popover/Popover.scss +0 -236
  135. package/src/components/Popover/PopoverWrapper.scss +0 -3
  136. package/src/components/Radio/Radio.scss +0 -83
  137. package/src/components/ScrollView/ScrollView.scss +0 -227
  138. package/src/components/SelectField/SelectField.scss +0 -109
  139. package/src/components/Table/Table.scss +0 -28
  140. package/src/components/Table/_components/TableCell.scss +0 -26
  141. package/src/components/Tabs/Tabs.scss +0 -28
  142. package/src/components/Tabs/TabsItem.scss +0 -117
  143. package/src/components/Text/Text.scss +0 -40
  144. package/src/components/TextArea/TextArea.scss +0 -95
  145. package/src/components/TextField/TextField.scss +0 -107
  146. package/src/components/TextLink/TextLink.scss +0 -16
  147. package/src/components/Toggle/Toggle.scss +0 -61
  148. package/src/components/Toolbar/Toolbar.scss +0 -83
  149. /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
+ }
@@ -1,7 +1,7 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { Button } from '../../../Button';
4
- import styles from '../TableCell.scss';
4
+ import styles from '../TableCell.module.scss';
5
5
 
6
6
  export const TableHeaderCell = ({
7
7
  column,
@@ -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 [React synthetic events] or **any HTML attribute you like.** All
161
- attributes that don't interfere with the API are forwarded to the `<nav>` HTML
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
- 👉 Refer to the MDN reference for the full list of supported attributes of the
167
- [nav] and [li] element.
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
- [React synthetic events]: https://reactjs.org/docs/events.html
220
- [nav]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/nav#attributes
221
- [li]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li#attributes
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 [React synthetic events] or **any HTML attribute you like.** All
206
- attributes that don't interfere with the API are forwarded either to the
207
- `<span>` or to the `<div>` HTML element in case that `blockLevel` is set to
208
- `true`. This enables making the component interactive and helps to improve its
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
- 👉 Refer to the MDN reference for the full list of supported attributes of the
212
- [span] and [div] element.
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
- [React synthetic events]: https://reactjs.org/docs/events.html
219
- [span]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/span#attributes
220
- [div]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
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 [React synthetic events] or you can **add whatever HTML attribute
321
- you like.** All attributes that don't interfere with the API are forwarded to
322
- the native HTML `<textarea>`. This enables making the component interactive and
323
- to helps to improve its accessibility.
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
- 👉 Refer to the MDN reference for the full list of supported attributes of the
342
- [textarea] element.
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 synthetic events]: https://reactjs.org/docs/events.html
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 [React synthetic events] or you can **add whatever HTML attribute
449
- you like.** All attributes that don't interfere with the API are forwarded to
450
- the native HTML `<input>`. This enables making the component interactive and
451
- helps to improve its accessibility.
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
- 👉 Refer to the MDN reference for the full list of supported attributes of the
485
- [text][input-text], [email][input-email], [number][input-number],
486
- [tel][input-tel], and [password][input-password] input types.
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 synthetic events]: https://reactjs.org/docs/events.html
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 [React synthetic events] or **any HTML attribute you like.** All
51
- attributes that don't interfere with the API are forwarded to the `<a>` HTML
52
- element. This enables making the component interactive and helps to improve its
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
- 👉 Refer to the MDN reference for the full list of supported attributes of the
56
- [a] element.
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
- [React synthetic events]: https://reactjs.org/docs/events.html
74
- [a]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attributes
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