@react-ui-org/react-ui 0.54.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 (148) hide show
  1. package/README.md +7 -5
  2. package/dist/react-ui.css +36 -38
  3. package/dist/react-ui.development.css +10021 -10523
  4. package/dist/react-ui.development.js +211 -231
  5. package/dist/react-ui.js +1 -1
  6. package/package.json +3 -2
  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 +1 -1
  41. package/src/components/InputGroup/InputGroup.module.scss +93 -0
  42. package/src/components/InputGroup/README.md +10 -8
  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/src/components/Alert/Alert.scss +0 -98
  117. package/src/components/Badge/Badge.scss +0 -107
  118. package/src/components/ButtonGroup/ButtonGroup.scss +0 -33
  119. package/src/components/Card/Card.scss +0 -70
  120. package/src/components/CheckboxField/CheckboxField.scss +0 -61
  121. package/src/components/FileInputField/FileInputField.scss +0 -63
  122. package/src/components/FormLayout/FormLayoutCustomField.scss +0 -63
  123. package/src/components/Grid/Grid.scss +0 -63
  124. package/src/components/InputGroup/InputGroup.scss +0 -91
  125. package/src/components/Modal/Modal.scss +0 -78
  126. package/src/components/Modal/ModalBody.scss +0 -18
  127. package/src/components/Modal/ModalCloseButton.scss +0 -18
  128. package/src/components/Modal/ModalContent.scss +0 -5
  129. package/src/components/Modal/ModalFooter.scss +0 -35
  130. package/src/components/Modal/ModalHeader.scss +0 -30
  131. package/src/components/Modal/ModalTitle.scss +0 -10
  132. package/src/components/Paper/Paper.scss +0 -17
  133. package/src/components/Popover/Popover.scss +0 -236
  134. package/src/components/Popover/PopoverWrapper.scss +0 -3
  135. package/src/components/Radio/Radio.scss +0 -83
  136. package/src/components/ScrollView/ScrollView.scss +0 -227
  137. package/src/components/SelectField/SelectField.scss +0 -109
  138. package/src/components/Table/Table.scss +0 -28
  139. package/src/components/Table/_components/TableCell.scss +0 -26
  140. package/src/components/Tabs/Tabs.scss +0 -28
  141. package/src/components/Tabs/TabsItem.scss +0 -117
  142. package/src/components/Text/Text.scss +0 -40
  143. package/src/components/TextArea/TextArea.scss +0 -95
  144. package/src/components/TextField/TextField.scss +0 -107
  145. package/src/components/TextLink/TextLink.scss +0 -16
  146. package/src/components/Toggle/Toggle.scss +0 -61
  147. package/src/components/Toolbar/Toolbar.scss +0 -83
  148. /package/src/components/Button/{Button.scss → Button.module.scss} +0 -0
@@ -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
@@ -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 './TextLink.scss';
5
+ import styles from './TextLink.module.scss';
6
6
 
7
7
  export const TextLink = ({
8
8
  href,
@@ -0,0 +1,18 @@
1
+ @use "theme";
2
+
3
+ @layer components.text-link {
4
+ .root {
5
+ text-decoration: theme.$text-decoration;
6
+ color: theme.$color;
7
+
8
+ &:hover {
9
+ text-decoration: theme.$hover-text-decoration;
10
+ color: theme.$hover-color;
11
+ }
12
+
13
+ &:active {
14
+ text-decoration: theme.$active-text-decoration;
15
+ color: theme.$active-color;
16
+ }
17
+ }
18
+ }
@@ -168,13 +168,15 @@ Disabled state makes the input unavailable.
168
168
  ## Forwarding HTML Attributes
169
169
 
170
170
  In addition to the options below in the [component's API](#api) section, you
171
- can specify [React synthetic events] or you can **add whatever HTML attribute
172
- you like.** All attributes that don't interfere with the API are forwarded to
173
- the native HTML `<input>`. This enables making the component interactive and
174
- helps to improve its accessibility.
171
+ can specify **any HTML attribute you like.** All attributes that don't interfere
172
+ with the API of the React component are forwarded to the root `<input>` HTML
173
+ element. This enables making the component interactive and helps to improve
174
+ its accessibility.
175
175
 
176
- 👉 Refer to the MDN reference for the full list of supported attributes of the
177
- [checkbox] input type.
176
+ 👉 For the full list of supported attributes refer to:
177
+
178
+ - [`<input type="checkbox" />` HTML element attributes][checkbox-attributes]{:target="_blank"}
179
+ - [React common props]{:target="_blank"}
178
180
 
179
181
  ## Forwarding ref
180
182
 
@@ -199,6 +201,6 @@ options. On top of that, the following options are available for Toggle.
199
201
  | `--rui-FormField--check__input--toggle--checked__background-image` | Background image of checked input |
200
202
  | `--rui-FormField--check__input--toggle--checked__background-position` | Background position of checked input |
201
203
 
202
- [React synthetic events]: https://reactjs.org/docs/events.html
203
- [checkbox]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#additional_attributes
204
+ [checkbox-attributes]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#additional_attributes
205
+ [React common props]: https://react.dev/reference/react-dom/components/common#common-props
204
206
  [ref]: https://reactjs.org/docs/refs-and-the-dom.html
@@ -5,7 +5,7 @@ import { classNames } from '../../utils/classNames';
5
5
  import { getRootValidationStateClassName } from '../_helpers/getRootValidationStateClassName';
6
6
  import { transferProps } from '../_helpers/transferProps';
7
7
  import { FormLayoutContext } from '../FormLayout';
8
- import styles from './Toggle.scss';
8
+ import styles from './Toggle.module.scss';
9
9
 
10
10
  export const Toggle = React.forwardRef((props, ref) => {
11
11
  const {