@react-ui-org/react-ui 0.55.1 → 0.57.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 (102) hide show
  1. package/.nvmrc +1 -1
  2. package/dist/react-ui.css +15 -20
  3. package/dist/react-ui.development.css +2336 -846
  4. package/dist/react-ui.development.js +106 -96
  5. package/dist/react-ui.js +1 -1
  6. package/package.json +41 -39
  7. package/src/CNAME +1 -0
  8. package/src/components/Alert/Alert.jsx +3 -2
  9. package/src/components/Alert/Alert.module.scss +9 -31
  10. package/src/components/Alert/README.md +11 -9
  11. package/src/components/Alert/_settings.scss +5 -0
  12. package/src/components/Alert/_theme.scss +0 -43
  13. package/src/components/Badge/Badge.jsx +5 -3
  14. package/src/components/Badge/Badge.module.scss +29 -74
  15. package/src/components/Badge/README.md +24 -6
  16. package/src/components/Badge/_settings.scss +8 -0
  17. package/src/components/Button/Button.jsx +4 -3
  18. package/src/components/Button/Button.module.scss +183 -2
  19. package/src/components/Button/README.md +28 -24
  20. package/src/components/Button/_settings.scss +8 -3
  21. package/src/components/Button/_theme.scss +0 -3
  22. package/src/components/Button/_tools.scss +7 -71
  23. package/src/components/ButtonGroup/ButtonGroup.jsx +2 -2
  24. package/src/components/ButtonGroup/README.md +5 -4
  25. package/src/components/Card/Card.jsx +3 -2
  26. package/src/components/Card/Card.module.scss +10 -31
  27. package/src/components/Card/CardBody.jsx +1 -1
  28. package/src/components/Card/CardFooter.jsx +1 -1
  29. package/src/components/Card/README.md +11 -10
  30. package/src/components/Card/_settings.scss +5 -0
  31. package/src/components/Card/_theme.scss +0 -43
  32. package/src/components/CheckboxField/CheckboxField.jsx +2 -2
  33. package/src/components/CheckboxField/README.md +8 -4
  34. package/src/components/FileInputField/FileInputField.jsx +3 -3
  35. package/src/components/FileInputField/README.md +8 -4
  36. package/src/components/FormLayout/FormLayout.jsx +1 -1
  37. package/src/components/FormLayout/FormLayoutCustomField.jsx +1 -1
  38. package/src/components/FormLayout/README.md +5 -4
  39. package/src/components/Grid/Grid.jsx +1 -1
  40. package/src/components/Grid/Grid.module.scss +5 -0
  41. package/src/components/Grid/GridSpan.jsx +1 -1
  42. package/src/components/Grid/README.md +6 -4
  43. package/src/components/Grid/_settings.scss +2 -2
  44. package/src/components/InputGroup/InputGroup.jsx +2 -2
  45. package/src/components/InputGroup/README.md +5 -4
  46. package/src/components/Modal/Modal.jsx +1 -1
  47. package/src/components/Modal/Modal.module.scss +1 -1
  48. package/src/components/Modal/ModalBody.jsx +1 -1
  49. package/src/components/Modal/ModalCloseButton.jsx +1 -1
  50. package/src/components/Modal/ModalContent.jsx +1 -1
  51. package/src/components/Modal/ModalFooter.jsx +1 -1
  52. package/src/components/Modal/ModalHeader.jsx +2 -4
  53. package/src/components/Modal/ModalTitle.jsx +2 -4
  54. package/src/components/Modal/README.md +3 -2
  55. package/src/components/Paper/Paper.jsx +1 -1
  56. package/src/components/Paper/README.md +5 -4
  57. package/src/components/Popover/Popover.jsx +1 -1
  58. package/src/components/Popover/Popover.module.scss +16 -16
  59. package/src/components/Popover/PopoverWrapper.jsx +1 -1
  60. package/src/components/Popover/README.md +5 -4
  61. package/src/components/Popover/_theme.scss +4 -2
  62. package/src/components/Radio/README.md +8 -4
  63. package/src/components/Radio/Radio.jsx +2 -2
  64. package/src/components/ScrollView/README.md +5 -4
  65. package/src/components/ScrollView/ScrollView.jsx +1 -1
  66. package/src/components/ScrollView/ScrollView.module.scss +2 -4
  67. package/src/components/SelectField/README.md +8 -4
  68. package/src/components/SelectField/SelectField.jsx +2 -2
  69. package/src/components/Table/README.md +5 -4
  70. package/src/components/Table/Table.jsx +1 -1
  71. package/src/components/Tabs/README.md +3 -2
  72. package/src/components/Tabs/Tabs.jsx +1 -1
  73. package/src/components/Tabs/TabsItem.jsx +1 -1
  74. package/src/components/Text/README.md +3 -2
  75. package/src/components/Text/Text.jsx +1 -1
  76. package/src/components/TextArea/README.md +8 -4
  77. package/src/components/TextArea/TextArea.jsx +2 -2
  78. package/src/components/TextField/README.md +8 -4
  79. package/src/components/TextField/TextField.jsx +2 -2
  80. package/src/components/TextLink/README.md +5 -4
  81. package/src/components/TextLink/TextLink.jsx +1 -1
  82. package/src/components/Toggle/README.md +8 -4
  83. package/src/components/Toggle/Toggle.jsx +2 -2
  84. package/src/components/Toolbar/README.md +5 -4
  85. package/src/components/Toolbar/Toolbar.jsx +1 -1
  86. package/src/components/Toolbar/ToolbarGroup.jsx +1 -1
  87. package/src/components/Toolbar/ToolbarItem.jsx +1 -1
  88. package/src/components/_helpers/getRootPriorityClassName.js +1 -1
  89. package/src/index.js +1 -0
  90. package/src/provider/RUIProvider.jsx +6 -3
  91. package/src/styles/settings/_collections.scss +9 -0
  92. package/src/styles/tools/_collections.scss +191 -0
  93. package/src/styles/tools/_string.scss +5 -2
  94. package/src/styles/tools/form-fields/_box-field-layout.scss +5 -0
  95. package/src/styles/tools/form-fields/_inline-field-layout.scss +1 -0
  96. package/src/theme.scss +64 -0
  97. package/src/utils/mergeDeep.js +28 -0
  98. package/src/{components/_helpers → utils}/transferProps.js +0 -8
  99. package/src/components/Alert/_tools.scss +0 -10
  100. package/src/components/Button/_base.scss +0 -159
  101. package/src/components/Button/_priorities.scss +0 -149
  102. package/src/components/Card/_tools.scss +0 -10
@@ -45,6 +45,9 @@ See [API](#api) for all available options.
45
45
  send me any emails” which would mean that the user needs to turn the
46
46
  checkbox **on** in order for something **not** to happen.
47
47
 
48
+ - **Use text labels** unless it is necessary to wrap text label into
49
+ Popover-like to component to provide additional info about the field.
50
+
48
51
  - Only make the CheckboxField's label invisible when there is **another visual
49
52
  clue** to guide users through toggling the input.
50
53
 
@@ -172,10 +175,11 @@ Disabled state makes the input unavailable.
172
175
  ## Forwarding HTML Attributes
173
176
 
174
177
  In addition to the options below in the [component's API](#api) section, you
175
- can specify **any HTML attribute you like.** All attributes that don't interfere
176
- with the API of the React component are forwarded to the root `<input>` HTML
177
- element. This enables making the component interactive and helps to improve
178
- its accessibility.
178
+ can specify **any HTML attribute you like.** All attributes that don't
179
+ interfere with the API of the React component and that aren't filtered out by
180
+ [`transferProps`](/docs/js-helpers/transferProps) helper are forwarded to the
181
+ `<input>` HTML element. This enables making the component interactive and helps
182
+ to improve its accessibility.
179
183
 
180
184
  👉 For the full list of supported attributes refer to:
181
185
 
@@ -2,9 +2,9 @@ import PropTypes from 'prop-types';
2
2
  import React, { useContext } from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
4
  import { classNames } from '../../utils/classNames';
5
+ import { transferProps } from '../../utils/transferProps';
5
6
  import { getRootValidationStateClassName } from '../_helpers/getRootValidationStateClassName';
6
7
  import { resolveContextOrProp } from '../_helpers/resolveContextOrProp';
7
- import { transferProps } from '../_helpers/transferProps';
8
8
  import { FormLayoutContext } from '../FormLayout';
9
9
  import styles from './FileInputField.module.scss';
10
10
 
@@ -123,9 +123,9 @@ FileInputField.propTypes = {
123
123
  */
124
124
  isLabelVisible: PropTypes.bool,
125
125
  /**
126
- * Text field label.
126
+ * File input field label.
127
127
  */
128
- label: PropTypes.string.isRequired,
128
+ label: PropTypes.node.isRequired,
129
129
  /**
130
130
  * Layout of the field.
131
131
  *
@@ -27,6 +27,9 @@ See [API](#api) for all available options.
27
27
  polite phrases like _Please attach your file here_. Short labels will help
28
28
  your users accomplish their task faster.
29
29
 
30
+ - **Use text labels** unless it is necessary to wrap text label into
31
+ Popover-like to component to provide additional info about the field.
32
+
30
33
  - Only make the FileInputField's label invisible when there is **another visual
31
34
  clue** to guide users through filling the input.
32
35
 
@@ -156,10 +159,11 @@ It's possible to disable the whole input.
156
159
  ## Forwarding HTML Attributes
157
160
 
158
161
  In addition to the options below in the [component's API](#api) section, you
159
- can specify **any HTML attribute you like.** All attributes that don't interfere
160
- with the API of the React component are forwarded to the root `<input>` HTML
161
- element. This enables making the component interactive and helps to improve
162
- its accessibility.
162
+ can specify **any HTML attribute you like.** All attributes that don't
163
+ interfere with the API of the React component and that aren't filtered out by
164
+ [`transferProps`](/docs/js-helpers/transferProps) helper are forwarded to the
165
+ `<input>` HTML element. This enables making the component interactive and helps
166
+ to improve its accessibility.
163
167
 
164
168
  ```docoff-react-preview
165
169
  <FileInputField
@@ -1,8 +1,8 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React, { useMemo } from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
- import { transferProps } from '../_helpers/transferProps';
5
4
  import { classNames } from '../../utils/classNames';
5
+ import { transferProps } from '../../utils/transferProps';
6
6
  import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
7
7
  import { FormLayoutContext } from './FormLayoutContext';
8
8
  import styles from './FormLayout.module.scss';
@@ -1,8 +1,8 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React, { useContext } from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
- import { transferProps } from '../_helpers/transferProps';
5
4
  import { classNames } from '../../utils/classNames';
5
+ import { transferProps } from '../../utils/transferProps';
6
6
  import { getRootSizeClassName } from '../_helpers/getRootSizeClassName';
7
7
  import { getRootValidationStateClassName } from '../_helpers/getRootValidationStateClassName';
8
8
  import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
@@ -416,10 +416,11 @@ React.createElement(() => {
416
416
  ## Forwarding HTML Attributes
417
417
 
418
418
  In addition to the options below in the [component's API](#api) section, you
419
- can specify **any HTML attribute you like.** All attributes that don't interfere
420
- with the API of the React component are forwarded to the root `<div>` HTML
421
- element. This enables making the component interactive and helps to improve
422
- its accessibility.
419
+ can specify **any HTML attribute you like.** All attributes that don't
420
+ interfere with the API of the React component and that aren't filtered out by
421
+ [`transferProps`](/docs/js-helpers/transferProps) helper are forwarded to the
422
+ root `<div>` HTML element. This enables making the component interactive and
423
+ helps to improve its accessibility.
423
424
 
424
425
  👉 For the full list of supported attributes refer to:
425
426
 
@@ -1,8 +1,8 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
+ import { transferProps } from '../../utils/transferProps';
4
5
  import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
5
- import { transferProps } from '../_helpers/transferProps';
6
6
  import { generateResponsiveCustomProperties } from './_helpers/generateResponsiveCustomProperties';
7
7
  import styles from './Grid.module.scss';
8
8
 
@@ -19,6 +19,9 @@
19
19
  // `--rui-local-<PROPERTY>: var(--rui-local-<PROPERTY>-sm, var(--rui-local-<PROPERTY>-xs, <INITIAL FALLBACK>))`
20
20
  //
21
21
  // 2. Apply custom property value that is defined within current breakpoint, see 1.
22
+ //
23
+ // 3. Intentionally use longhand properties because the custom property fallback mechanism evaluates `initial` values as
24
+ // empty. That makes the other value of the shorthand property unexpectedly used for both axes.
22
25
 
23
26
  @use "sass:map";
24
27
  @use "../../styles/tools/spacing";
@@ -35,10 +38,12 @@
35
38
  grid-template-rows: var(--rui-local-rows); // 2.
36
39
  grid-auto-flow: var(--rui-local-auto-flow); // 2.
37
40
  grid-gap: var(--rui-local-row-gap) var(--rui-local-column-gap); // 2.
41
+ // stylelint-disable declaration-block-no-redundant-longhand-properties -- 3.
38
42
  align-content: var(--rui-local-align-content); // 2.
39
43
  align-items: var(--rui-local-align-items); // 2.
40
44
  justify-content: var(--rui-local-justify-content); // 2.
41
45
  justify-items: var(--rui-local-justify-items); // 2.
46
+ // stylelint-enable declaration-block-no-redundant-longhand-properties
42
47
  }
43
48
 
44
49
  // stylelint-disable-next-line selector-max-universal -- Reset any previously added margins.
@@ -1,8 +1,8 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
+ import { transferProps } from '../../utils/transferProps';
4
5
  import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
5
- import { transferProps } from '../_helpers/transferProps';
6
6
  import { generateResponsiveCustomProperties } from './_helpers/generateResponsiveCustomProperties';
7
7
  import styles from './Grid.module.scss';
8
8
 
@@ -248,10 +248,12 @@ property. Check [MDN][grid-auto-flow] to fully understand available options.
248
248
  ## Forwarding HTML Attributes
249
249
 
250
250
  In addition to the options below in the [component's API](#api) section, you
251
- can specify **any HTML attribute you like.** All attributes that don't interfere
252
- with the API of the React component are forwarded to the root HTML element
253
- of your choice provided by `tag`, which is `<div>` by default. This enables
254
- making the component interactive and helps to improve its accessibility.
251
+ can specify **any HTML attribute you like.** All attributes that don't
252
+ interfere with the API of the React component and that aren't filtered out by
253
+ [`transferProps`](/docs/js-helpers/transferProps) helper are forwarded to the
254
+ root HTML element of your choice provided by `tag`, which is `<div>` by
255
+ default. This enables making the component interactive and helps to improve its
256
+ accessibility.
255
257
 
256
258
  👉 For the full list of supported attributes refer to:
257
259
 
@@ -8,11 +8,11 @@ $grid-responsive-properties: [
8
8
  align-items,
9
9
  justify-content,
10
10
  justify-items,
11
- ]; // stylelint-disable-line indentation -- Broken rule?
11
+ ]; // stylelint-disable-line @stylistic/indentation -- Broken rule?
12
12
 
13
13
  $grid-span-responsive-properties: [
14
14
  column-span,
15
15
  row-span,
16
- ]; // stylelint-disable-line indentation -- Broken rule?
16
+ ]; // stylelint-disable-line @stylistic/indentation -- Broken rule?
17
17
 
18
18
  $initial-fallback-value: initial;
@@ -6,11 +6,11 @@ import React, {
6
6
  import { Text } from '../Text';
7
7
  import { withGlobalProps } from '../../provider';
8
8
  import { classNames } from '../../utils/classNames';
9
+ import { transferProps } from '../../utils/transferProps';
9
10
  import { getRootSizeClassName } from '../_helpers/getRootSizeClassName';
10
11
  import { getRootValidationStateClassName } from '../_helpers/getRootValidationStateClassName';
11
12
  import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
12
13
  import { resolveContextOrProp } from '../_helpers/resolveContextOrProp';
13
- import { transferProps } from '../_helpers/transferProps';
14
14
  import { FormLayoutContext } from '../FormLayout';
15
15
  import { InputGroupContext } from './InputGroupContext';
16
16
  import styles from './InputGroup.module.scss';
@@ -151,7 +151,7 @@ InputGroup.propTypes = {
151
151
  /**
152
152
  * Input group label.
153
153
  */
154
- label: PropTypes.string.isRequired,
154
+ label: PropTypes.node.isRequired,
155
155
  /**
156
156
  * Layout of the group.
157
157
  *
@@ -250,10 +250,11 @@ for the underlying `<fieldset>` element.
250
250
  ## Forwarding HTML Attributes
251
251
 
252
252
  In addition to the options below in the [component's API](#api) section, you
253
- can specify **any HTML attribute you like.** All attributes that don't interfere
254
- with the API of the React component are forwarded to the root `<fieldset>` HTML
255
- element. This enables making the component interactive and helps to improve
256
- its accessibility.
253
+ can specify **any HTML attribute you like.** All attributes that don't
254
+ interfere with the API of the React component and that aren't filtered out by
255
+ [`transferProps`](/docs/js-helpers/transferProps) helper are forwarded to the
256
+ root `<fieldset>` HTML element. This enables making the component interactive
257
+ and helps to improve its accessibility.
257
258
 
258
259
  👉 For the full list of supported attributes refer to:
259
260
 
@@ -2,8 +2,8 @@ import PropTypes from 'prop-types';
2
2
  import React, { useRef } from 'react';
3
3
  import { createPortal } from 'react-dom';
4
4
  import { withGlobalProps } from '../../provider';
5
- import { transferProps } from '../_helpers/transferProps';
6
5
  import { classNames } from '../../utils/classNames';
6
+ import { transferProps } from '../../utils/transferProps';
7
7
  import { getPositionClassName } from './_helpers/getPositionClassName';
8
8
  import { getSizeClassName } from './_helpers/getSizeClassName';
9
9
  import { useModalFocus } from './_hooks/useModalFocus';
@@ -21,11 +21,11 @@
21
21
  max-width: var(--rui-local-max-width);
22
22
  max-height: var(--rui-local-max-height);
23
23
  overflow-y: auto;
24
- overscroll-behavior: contain;
25
24
  border-radius: settings.$border-radius;
26
25
  background: theme.$background;
27
26
  box-shadow: theme.$box-shadow;
28
27
  transform: translateX(-50%);
28
+ overscroll-behavior: contain;
29
29
 
30
30
  @include breakpoint.up(sm) {
31
31
  --rui-local-outer-spacing: #{theme.$outer-spacing-sm};
@@ -1,8 +1,8 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
- import { transferProps } from '../_helpers/transferProps';
5
4
  import { classNames } from '../../utils/classNames';
5
+ import { transferProps } from '../../utils/transferProps';
6
6
  import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
7
7
  import { getScrollingClassName } from './_helpers/getScrollingClassName';
8
8
  import styles from './ModalBody.module.scss';
@@ -4,7 +4,7 @@ import {
4
4
  RUIContext,
5
5
  withGlobalProps,
6
6
  } from '../../provider';
7
- import { transferProps } from '../_helpers/transferProps';
7
+ import { transferProps } from '../../utils/transferProps';
8
8
  import styles from './ModalCloseButton.module.scss';
9
9
 
10
10
  export const ModalCloseButton = React.forwardRef((props, ref) => {
@@ -1,8 +1,8 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
+ import { transferProps } from '../../utils/transferProps';
4
5
  import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
5
- import { transferProps } from '../_helpers/transferProps';
6
6
  import styles from './ModalContent.module.scss';
7
7
 
8
8
  export const ModalContent = ({
@@ -1,8 +1,8 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
- import { transferProps } from '../_helpers/transferProps';
5
4
  import { classNames } from '../../utils/classNames';
5
+ import { transferProps } from '../../utils/transferProps';
6
6
  import { getJustifyClassName } from './_helpers/getJustifyClassName';
7
7
  import styles from './ModalFooter.module.scss';
8
8
 
@@ -1,10 +1,8 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
- import {
4
- withGlobalProps,
5
- } from '../../provider';
6
- import { transferProps } from '../_helpers/transferProps';
3
+ import { withGlobalProps } from '../../provider';
7
4
  import { classNames } from '../../utils/classNames';
5
+ import { transferProps } from '../../utils/transferProps';
8
6
  import { getJustifyClassName } from './_helpers/getJustifyClassName';
9
7
  import styles from './ModalHeader.module.scss';
10
8
 
@@ -1,9 +1,7 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
- import {
4
- withGlobalProps,
5
- } from '../../provider';
6
- import { transferProps } from '../_helpers/transferProps';
3
+ import { withGlobalProps } from '../../provider';
4
+ import { transferProps } from '../../utils/transferProps';
7
5
  import styles from './ModalTitle.module.scss';
8
6
 
9
7
  export const ModalTitle = ({
@@ -1015,8 +1015,9 @@ opened.
1015
1015
  ## Forwarding HTML Attributes
1016
1016
 
1017
1017
  In addition to the options below in the [component's API](#api) section, you
1018
- can specify **any HTML attribute you like.** All attributes that don't interfere
1019
- with the API of the React component are forwarded to:
1018
+ can specify **any HTML attribute you like.** All attributes that don't
1019
+ interfere with the API of the React component and that aren't filtered out by
1020
+ [`transferProps`](/docs/js-helpers/transferProps) helper are forwarded to:
1020
1021
 
1021
1022
  - the `<div>` HTML element in case of the `Modal` component. This `<div>` is not
1022
1023
  the root, but its first child which represents the modal window.
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
4
  import { classNames } from '../../utils/classNames';
5
- import { transferProps } from '../_helpers/transferProps';
5
+ import { transferProps } from '../../utils/transferProps';
6
6
  import styles from './Paper.module.scss';
7
7
 
8
8
  export const Paper = ({
@@ -54,10 +54,11 @@ Dim background and add transparency to visually suppress the Paper.
54
54
  ## Forwarding HTML Attributes
55
55
 
56
56
  In addition to the options below in the [component's API](#api) section, you
57
- can specify **any HTML attribute you like.** All attributes that don't interfere
58
- with the API of the React component are forwarded to the root `<div>` HTML
59
- element. This enables making the component interactive and helps to improve
60
- its accessibility.
57
+ can specify **any HTML attribute you like.** All attributes that don't
58
+ interfere with the API of the React component and that aren't filtered out by
59
+ [`transferProps`](/docs/js-helpers/transferProps) helper are forwarded to the
60
+ root `<div>` HTML element. This enables making the component interactive and
61
+ helps to improve its accessibility.
61
62
 
62
63
  👉 For the full list of supported attributes refer to:
63
64
 
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { createPortal } from 'react-dom';
4
4
  import { withGlobalProps } from '../../provider';
5
5
  import { classNames } from '../../utils/classNames';
6
- import { transferProps } from '../_helpers/transferProps';
6
+ import { transferProps } from '../../utils/transferProps';
7
7
  import getRootSideClassName from './_helpers/getRootSideClassName';
8
8
  import getRootAlignmentClassName from './_helpers/getRootAlignmentClassName';
9
9
  import styles from './Popover.module.scss';
@@ -51,52 +51,52 @@
51
51
 
52
52
  // Sides
53
53
  .isRootAtTop {
54
- bottom: 100%;
54
+ bottom: calc(100% + #{theme.$arrow-gap} - #{theme.$arrow-safe-rendering-overlap});
55
55
  }
56
56
 
57
57
  .isRootAtBottom {
58
- top: 100%;
58
+ top: calc(100% + #{theme.$arrow-gap} - #{theme.$arrow-safe-rendering-overlap});
59
59
  }
60
60
 
61
61
  .isRootAtLeft {
62
- right: 100%;
62
+ right: calc(100% + #{theme.$arrow-gap} - #{theme.$arrow-safe-rendering-overlap});
63
63
  }
64
64
 
65
65
  .isRootAtRight {
66
- left: 100%;
66
+ left: calc(100% + #{theme.$arrow-gap} - #{theme.$arrow-safe-rendering-overlap});
67
67
  }
68
68
 
69
69
  // Arrows
70
70
  .isRootAtTop > .arrow {
71
- top: 100%;
71
+ top: calc(100% - #{theme.$arrow-safe-rendering-overlap});
72
72
  }
73
73
 
74
74
  .isRootAtBottom > .arrow {
75
- bottom: 100%;
75
+ bottom: calc(100% - #{theme.$arrow-safe-rendering-overlap});
76
76
  }
77
77
 
78
78
  .isRootAtLeft > .arrow {
79
- left: 100%;
79
+ left: calc(100% - #{theme.$arrow-safe-rendering-overlap});
80
80
  }
81
81
 
82
82
  .isRootAtRight > .arrow {
83
- right: 100%;
83
+ right: calc(100% - #{theme.$arrow-safe-rendering-overlap});
84
84
  }
85
85
 
86
86
  // Side alignments: top
87
87
  .isRootAtTop.isRootAtCenter {
88
88
  left: 50%;
89
- transform: translate(-50%, #{-1 * theme.$arrow-height});
89
+ transform: translate(-50%, calc(-1 * #{theme.$arrow-height}));
90
90
  }
91
91
 
92
92
  .isRootAtTop.isRootAtStart {
93
93
  left: 0;
94
- transform: translate(0, #{-1 * theme.$arrow-height});
94
+ transform: translate(0, calc(-1 * #{theme.$arrow-height}));
95
95
  }
96
96
 
97
97
  .isRootAtTop.isRootAtEnd {
98
98
  right: 0;
99
- transform: translate(0, #{-1 * theme.$arrow-height});
99
+ transform: translate(0, calc(-1 * #{theme.$arrow-height}));
100
100
  }
101
101
 
102
102
  .isRootAtTop.isRootAtCenter > .arrow {
@@ -148,17 +148,17 @@
148
148
  // Side alignments: left
149
149
  .isRootAtLeft.isRootAtCenter {
150
150
  top: 50%;
151
- transform: translate(#{-1 * theme.$arrow-height}, -50%);
151
+ transform: translate(calc(-1 * #{theme.$arrow-height}), -50%);
152
152
  }
153
153
 
154
154
  .isRootAtLeft.isRootAtStart {
155
155
  top: 0;
156
- transform: translate(#{-1 * theme.$arrow-height}, 0);
156
+ transform: translate(calc(-1 * #{theme.$arrow-height}), 0);
157
157
  }
158
158
 
159
159
  .isRootAtLeft.isRootAtEnd {
160
160
  bottom: 0;
161
- transform: translate(#{-1 * theme.$arrow-height}, 0);
161
+ transform: translate(calc(-1 * #{theme.$arrow-height}), 0);
162
162
  }
163
163
 
164
164
  .isRootAtLeft.isRootAtCenter > .arrow {
@@ -216,7 +216,7 @@
216
216
  }
217
217
 
218
218
  .isRootControlled.isRootAtTop {
219
- transform: translate(0, #{-1 * theme.$arrow-height}); // 2.
219
+ transform: translate(0, calc(-1 * #{theme.$arrow-height})); // 2.
220
220
  }
221
221
 
222
222
  .isRootControlled.isRootAtBottom {
@@ -224,7 +224,7 @@
224
224
  }
225
225
 
226
226
  .isRootControlled.isRootAtLeft {
227
- transform: translate(#{-1 * theme.$arrow-height}, 0); // 2.
227
+ transform: translate(calc(-1 * #{theme.$arrow-height}), 0); // 2.
228
228
  }
229
229
 
230
230
  .isRootControlled.isRootAtRight {
@@ -1,7 +1,7 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
- import { transferProps } from '../_helpers/transferProps';
4
+ import { transferProps } from '../../utils/transferProps';
5
5
  import styles from './PopoverWrapper.module.scss';
6
6
 
7
7
  export const PopoverWrapper = ({
@@ -287,10 +287,11 @@ React.createElement(() => {
287
287
  ## Forwarding HTML Attributes
288
288
 
289
289
  In addition to the options below in the [component's API](#api) section, you
290
- can specify **any HTML attribute you like.** All attributes that don't interfere
291
- with the API of the React component are forwarded to the root `<div>` HTML
292
- element. This enables making the component interactive and helps to improve
293
- its accessibility.
290
+ can specify **any HTML attribute you like.** All attributes that don't
291
+ interfere with the API of the React component and that aren't filtered out by
292
+ [`transferProps`](/docs/js-helpers/transferProps) helper are forwarded to the
293
+ root `<div>` HTML element. This enables making the component interactive and
294
+ helps to improve its accessibility.
294
295
 
295
296
  👉 For the full list of supported attributes refer to:
296
297
 
@@ -11,6 +11,8 @@ $color: var(--rui-Popover__color);
11
11
  $background-color: var(--rui-Popover__background-color);
12
12
  $box-shadow: var(--rui-Popover__box-shadow);
13
13
 
14
- $arrow-width: 1rem;
15
- $arrow-height: math.div($arrow-width, 2); // 1.
14
+ $arrow-safe-rendering-overlap: 1px;
15
+ $arrow-gap: 1px;
16
+ $arrow-width: calc(1rem + #{$arrow-safe-rendering-overlap * 2});
17
+ $arrow-height: calc($arrow-width / 2); // 1.
16
18
  $arrow-corner-offset: 0.75rem;
@@ -56,6 +56,9 @@ See [API](#api) for all available options.
56
56
  polite phrases like _Please select your favourite fruit_. Short labels will
57
57
  help your users accomplish their task faster.
58
58
 
59
+ - **Use text labels** unless it is necessary to wrap text label into
60
+ Popover-like to component to provide additional info about the field.
61
+
59
62
  - Only make the Radio's label invisible when there is **another visual
60
63
  clue** to guide users through filling the input.
61
64
 
@@ -279,10 +282,11 @@ It's possible to disable just some options or the whole set.
279
282
  ## Forwarding HTML Attributes
280
283
 
281
284
  In addition to the options below in the [component's API](#api) section, you
282
- can specify **any HTML attribute you like.** All attributes that don't interfere
283
- with the API of the React component are forwarded to the root `<input>` HTML
284
- element. This enables making the component interactive and helps to improve
285
- its accessibility.
285
+ can specify **any HTML attribute you like.** All attributes that don't
286
+ interfere with the API of the React component and that aren't filtered out by
287
+ [`transferProps`](/docs/js-helpers/transferProps) helper are forwarded to the
288
+ `<input>` HTML element. This enables making the component interactive and helps
289
+ to improve its accessibility.
286
290
 
287
291
  👉 For the full list of supported attributes refer to:
288
292
 
@@ -2,9 +2,9 @@ import PropTypes from 'prop-types';
2
2
  import React, { useContext } from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
4
  import { classNames } from '../../utils/classNames';
5
+ import { transferProps } from '../../utils/transferProps';
5
6
  import { getRootValidationStateClassName } from '../_helpers/getRootValidationStateClassName';
6
7
  import { resolveContextOrProp } from '../_helpers/resolveContextOrProp';
7
- import { transferProps } from '../_helpers/transferProps';
8
8
  import { FormLayoutContext } from '../FormLayout';
9
9
  import styles from './Radio.module.scss';
10
10
 
@@ -157,7 +157,7 @@ Radio.propTypes = {
157
157
  /**
158
158
  * Label of the group of options.
159
159
  */
160
- label: PropTypes.string.isRequired,
160
+ label: PropTypes.node.isRequired,
161
161
  /**
162
162
  * Layout of the field.
163
163
  *
@@ -480,10 +480,11 @@ React.createElement(() => {
480
480
  ## Forwarding HTML Attributes
481
481
 
482
482
  In addition to the options below in the [component's API](#api) section, you
483
- can specify **any HTML attribute you like.** All attributes that don't interfere
484
- with the API of the React component are forwarded to the root `<div>` HTML
485
- element. This enables making the component interactive and helps to improve
486
- its accessibility.
483
+ can specify **any HTML attribute you like.** All attributes that don't
484
+ interfere with the API of the React component and that aren't filtered out by
485
+ [`transferProps`](/docs/js-helpers/transferProps) helper are forwarded to the
486
+ root `<div>` HTML element. This enables making the component interactive and
487
+ helps to improve its accessibility.
487
488
 
488
489
  👉 For the full list of supported attributes refer to:
489
490
 
@@ -11,7 +11,7 @@ import {
11
11
  withGlobalProps,
12
12
  } from '../../provider';
13
13
  import { classNames } from '../../utils/classNames';
14
- import { transferProps } from '../_helpers/transferProps';
14
+ import { transferProps } from '../../utils/transferProps';
15
15
  import { getElementsPositionDifference } from './_helpers/getElementsPositionDifference';
16
16
  import { useLoadResize } from './_hooks/useLoadResizeHook';
17
17
  import { useScrollPosition } from './_hooks/useScrollPositionHook';
@@ -103,8 +103,7 @@ $_arrow-outer-spacing: spacing.of(4);
103
103
 
104
104
  .isRootVertical .viewport {
105
105
  height: 100%;
106
- overflow-x: clip; // 7., 8.
107
- overflow-y: auto; // 2.
106
+ overflow: clip auto; // 7., 8. / 2.
108
107
  }
109
108
 
110
109
  .isRootVertical .arrowPrev {
@@ -183,8 +182,7 @@ $_arrow-outer-spacing: spacing.of(4);
183
182
  }
184
183
 
185
184
  .isRootHorizontal .viewport {
186
- overflow-x: auto; // 2.
187
- overflow-y: clip; // 5., 7., 8.
185
+ overflow: auto clip; // 2. / 5., 7., 8.
188
186
  }
189
187
 
190
188
  .isRootHorizontal .content {