@react-ui-org/react-ui 0.54.0 → 0.55.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. package/.nvmrc +1 -0
  2. package/README.md +7 -5
  3. package/dist/react-ui.css +36 -38
  4. package/dist/react-ui.development.css +10021 -10523
  5. package/dist/react-ui.development.js +211 -231
  6. package/dist/react-ui.js +1 -1
  7. package/package.json +3 -2
  8. package/src/components/Alert/Alert.jsx +1 -1
  9. package/src/components/Alert/Alert.module.scss +100 -0
  10. package/src/components/Alert/README.md +9 -7
  11. package/src/components/Badge/Badge.jsx +1 -1
  12. package/src/components/Badge/Badge.module.scss +109 -0
  13. package/src/components/Badge/README.md +9 -7
  14. package/src/components/Button/Button.jsx +1 -1
  15. package/src/components/Button/README.md +9 -7
  16. package/src/components/Button/_base.scss +117 -115
  17. package/src/components/Button/_priorities.scss +135 -133
  18. package/src/components/ButtonGroup/ButtonGroup.jsx +1 -1
  19. package/src/components/ButtonGroup/ButtonGroup.module.scss +35 -0
  20. package/src/components/ButtonGroup/README.md +10 -8
  21. package/src/components/Card/Card.jsx +1 -1
  22. package/src/components/Card/Card.module.scss +72 -0
  23. package/src/components/Card/CardBody.jsx +1 -1
  24. package/src/components/Card/CardFooter.jsx +1 -1
  25. package/src/components/Card/README.md +9 -7
  26. package/src/components/CheckboxField/CheckboxField.jsx +1 -1
  27. package/src/components/CheckboxField/CheckboxField.module.scss +63 -0
  28. package/src/components/CheckboxField/README.md +10 -8
  29. package/src/components/FileInputField/FileInputField.jsx +1 -1
  30. package/src/components/FileInputField/FileInputField.module.scss +65 -0
  31. package/src/components/FileInputField/README.md +10 -8
  32. package/src/components/FormLayout/FormLayout.jsx +1 -1
  33. package/src/components/FormLayout/{FormLayout.scss → FormLayout.module.scss} +30 -28
  34. package/src/components/FormLayout/FormLayoutCustomField.jsx +1 -1
  35. package/src/components/FormLayout/FormLayoutCustomField.module.scss +65 -0
  36. package/src/components/FormLayout/README.md +11 -9
  37. package/src/components/Grid/Grid.jsx +1 -1
  38. package/src/components/Grid/Grid.module.scss +66 -0
  39. package/src/components/Grid/GridSpan.jsx +1 -1
  40. package/src/components/Grid/README.md +11 -8
  41. package/src/components/InputGroup/InputGroup.jsx +1 -1
  42. package/src/components/InputGroup/InputGroup.module.scss +93 -0
  43. package/src/components/InputGroup/README.md +10 -8
  44. package/src/components/Modal/Modal.jsx +1 -1
  45. package/src/components/Modal/Modal.module.scss +80 -0
  46. package/src/components/Modal/ModalBody.jsx +1 -1
  47. package/src/components/Modal/ModalBody.module.scss +20 -0
  48. package/src/components/Modal/ModalCloseButton.jsx +1 -1
  49. package/src/components/Modal/ModalCloseButton.module.scss +20 -0
  50. package/src/components/Modal/ModalContent.jsx +1 -1
  51. package/src/components/Modal/ModalContent.module.scss +7 -0
  52. package/src/components/Modal/ModalFooter.jsx +1 -1
  53. package/src/components/Modal/ModalFooter.module.scss +37 -0
  54. package/src/components/Modal/ModalHeader.jsx +1 -1
  55. package/src/components/Modal/ModalHeader.module.scss +32 -0
  56. package/src/components/Modal/ModalTitle.jsx +1 -1
  57. package/src/components/Modal/ModalTitle.module.scss +12 -0
  58. package/src/components/Modal/README.md +17 -14
  59. package/src/components/Paper/Paper.jsx +1 -1
  60. package/src/components/Paper/Paper.module.scss +19 -0
  61. package/src/components/Paper/README.md +9 -7
  62. package/src/components/Popover/Popover.jsx +1 -1
  63. package/src/components/Popover/Popover.module.scss +238 -0
  64. package/src/components/Popover/PopoverWrapper.jsx +1 -2
  65. package/src/components/Popover/PopoverWrapper.module.scss +5 -0
  66. package/src/components/Popover/README.md +9 -7
  67. package/src/components/Radio/README.md +12 -10
  68. package/src/components/Radio/Radio.jsx +1 -1
  69. package/src/components/Radio/Radio.module.scss +85 -0
  70. package/src/components/ScrollView/README.md +10 -8
  71. package/src/components/ScrollView/ScrollView.jsx +1 -1
  72. package/src/components/ScrollView/ScrollView.module.scss +233 -0
  73. package/src/components/SelectField/README.md +10 -8
  74. package/src/components/SelectField/SelectField.jsx +1 -1
  75. package/src/components/SelectField/SelectField.module.scss +111 -0
  76. package/src/components/Table/README.md +10 -8
  77. package/src/components/Table/Table.jsx +1 -1
  78. package/src/components/Table/Table.module.scss +30 -0
  79. package/src/components/Table/_components/TableBodyCell/TableBodyCell.jsx +1 -1
  80. package/src/components/Table/_components/TableCell.module.scss +28 -0
  81. package/src/components/Table/_components/TableHeaderCell/TableHeaderCell.jsx +1 -1
  82. package/src/components/Tabs/README.md +16 -10
  83. package/src/components/Tabs/Tabs.jsx +1 -1
  84. package/src/components/Tabs/Tabs.module.scss +31 -0
  85. package/src/components/Tabs/TabsItem.jsx +1 -1
  86. package/src/components/Tabs/TabsItem.module.scss +119 -0
  87. package/src/components/Text/README.md +15 -9
  88. package/src/components/Text/Text.jsx +1 -1
  89. package/src/components/Text/Text.module.scss +42 -0
  90. package/src/components/TextArea/README.md +10 -8
  91. package/src/components/TextArea/TextArea.jsx +1 -1
  92. package/src/components/TextArea/TextArea.module.scss +97 -0
  93. package/src/components/TextField/README.md +13 -8
  94. package/src/components/TextField/TextField.jsx +1 -1
  95. package/src/components/TextField/TextField.module.scss +109 -0
  96. package/src/components/TextLink/README.md +10 -8
  97. package/src/components/TextLink/TextLink.jsx +1 -1
  98. package/src/components/TextLink/TextLink.module.scss +18 -0
  99. package/src/components/Toggle/README.md +10 -8
  100. package/src/components/Toggle/Toggle.jsx +1 -1
  101. package/src/components/Toggle/Toggle.module.scss +63 -0
  102. package/src/components/Toolbar/README.md +9 -7
  103. package/src/components/Toolbar/Toolbar.jsx +1 -1
  104. package/src/components/Toolbar/Toolbar.module.scss +85 -0
  105. package/src/components/Toolbar/ToolbarGroup.jsx +1 -1
  106. package/src/components/Toolbar/ToolbarItem.jsx +1 -1
  107. package/src/components/_helpers/transferProps.js +46 -7
  108. package/src/foundation.scss +22 -17
  109. package/src/helpers.scss +12 -8
  110. package/src/index.js +3 -4
  111. package/src/index.scss +7 -0
  112. package/src/layers.scss +4 -0
  113. package/src/styles/elements/_page.scss +0 -4
  114. package/src/styles/helpers/_animation.scss +2 -2
  115. package/src/styles/tools/_utilities.scss +1 -1
  116. package/src/theme.scss +1040 -1038
  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 -91
  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,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 {