@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.
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