@react-ui-org/react-ui 0.47.0 → 0.49.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. package/dist/lib.development.js +465 -93
  2. package/dist/lib.js +1 -1
  3. package/package.json +1 -1
  4. package/src/lib/components/Alert/Alert.jsx +3 -0
  5. package/src/lib/components/Alert/Alert.scss +10 -10
  6. package/src/lib/components/Alert/README.mdx +18 -2
  7. package/src/lib/components/Alert/index.js +1 -1
  8. package/src/lib/components/Badge/Badge.jsx +4 -8
  9. package/src/lib/components/Badge/Badge.scss +21 -21
  10. package/src/lib/components/Badge/README.mdx +15 -1
  11. package/src/lib/components/Badge/index.js +1 -1
  12. package/src/lib/components/Button/Button.jsx +23 -34
  13. package/src/lib/components/Button/README.mdx +21 -7
  14. package/src/lib/components/Button/_base.scss +20 -20
  15. package/src/lib/components/Button/_priorities.scss +35 -35
  16. package/src/lib/components/Button/helpers/getRootLabelVisibilityClassName.js +7 -7
  17. package/src/lib/components/Button/helpers/getRootPriorityClassName.js +3 -3
  18. package/src/lib/components/Button/index.js +1 -1
  19. package/src/lib/components/ButtonGroup/ButtonGroup.jsx +2 -8
  20. package/src/lib/components/ButtonGroup/README.mdx +18 -2
  21. package/src/lib/components/Card/Card.jsx +6 -10
  22. package/src/lib/components/Card/Card.scss +13 -13
  23. package/src/lib/components/Card/CardBody.jsx +6 -10
  24. package/src/lib/components/Card/CardFooter.jsx +6 -7
  25. package/src/lib/components/Card/README.mdx +21 -5
  26. package/src/lib/components/CheckboxField/CheckboxField.jsx +17 -44
  27. package/src/lib/components/CheckboxField/README.mdx +18 -6
  28. package/src/lib/components/CheckboxField/index.js +1 -1
  29. package/src/lib/components/FileInputField/FileInputField.jsx +20 -29
  30. package/src/lib/components/FileInputField/FileInputField.scss +3 -3
  31. package/src/lib/components/FileInputField/README.mdx +30 -28
  32. package/src/lib/components/FileInputField/index.js +1 -1
  33. package/src/lib/components/FormLayout/FormLayout.jsx +5 -9
  34. package/src/lib/components/FormLayout/FormLayout.scss +3 -3
  35. package/src/lib/components/FormLayout/FormLayoutCustomField.jsx +4 -1
  36. package/src/lib/components/FormLayout/FormLayoutCustomField.scss +8 -8
  37. package/src/lib/components/FormLayout/README.mdx +28 -13
  38. package/src/lib/components/Grid/Grid.jsx +31 -35
  39. package/src/lib/components/Grid/Grid.scss +10 -15
  40. package/src/lib/components/Grid/GridSpan.jsx +5 -11
  41. package/src/lib/components/Grid/README.mdx +48 -36
  42. package/src/lib/components/Grid/_helpers/generateResponsiveCustomProperties.js +11 -3
  43. package/src/lib/components/Grid/_settings.scss +18 -0
  44. package/src/lib/components/Grid/_tools.scss +5 -5
  45. package/src/lib/components/Modal/Modal.jsx +147 -254
  46. package/src/lib/components/Modal/Modal.scss +7 -55
  47. package/src/lib/components/Modal/ModalBody.jsx +60 -0
  48. package/src/lib/components/Modal/ModalBody.scss +18 -0
  49. package/src/lib/components/Modal/ModalCloseButton.jsx +45 -0
  50. package/src/lib/components/Modal/ModalCloseButton.scss +18 -0
  51. package/src/lib/components/Modal/ModalContent.jsx +39 -0
  52. package/src/lib/components/Modal/ModalContent.scss +5 -0
  53. package/src/lib/components/Modal/ModalFooter.jsx +42 -0
  54. package/src/lib/components/Modal/ModalFooter.scss +35 -0
  55. package/src/lib/components/Modal/ModalHeader.jsx +44 -0
  56. package/src/lib/components/Modal/ModalHeader.scss +30 -0
  57. package/src/lib/components/Modal/ModalTitle.jsx +44 -0
  58. package/src/lib/components/Modal/ModalTitle.scss +10 -0
  59. package/src/lib/components/Modal/README.mdx +865 -195
  60. package/src/lib/components/Modal/_helpers/getJustifyClassName.js +19 -0
  61. package/src/lib/components/Modal/_helpers/getScrollingClassName.js +11 -0
  62. package/src/lib/components/Modal/_settings.scss +1 -5
  63. package/src/lib/components/Modal/_theme.scss +6 -0
  64. package/src/lib/components/Modal/index.js +7 -1
  65. package/src/lib/components/Paper/Paper.jsx +5 -9
  66. package/src/lib/components/Paper/Paper.scss +2 -2
  67. package/src/lib/components/Paper/README.mdx +15 -1
  68. package/src/lib/components/Paper/index.js +1 -1
  69. package/src/lib/components/Popover/Popover.jsx +14 -30
  70. package/src/lib/components/Popover/Popover.scss +7 -6
  71. package/src/lib/components/Popover/PopoverWrapper.jsx +5 -12
  72. package/src/lib/components/Popover/PopoverWrapper.scss +3 -0
  73. package/src/lib/components/Popover/README.mdx +32 -11
  74. package/src/lib/components/Popover/_theme.scss +1 -1
  75. package/src/lib/components/Radio/README.mdx +13 -6
  76. package/src/lib/components/Radio/Radio.jsx +39 -29
  77. package/src/lib/components/Radio/Radio.scss +3 -3
  78. package/src/lib/components/Radio/index.js +1 -1
  79. package/src/lib/components/ScrollView/README.mdx +165 -84
  80. package/src/lib/components/ScrollView/ScrollView.jsx +115 -117
  81. package/src/lib/components/ScrollView/ScrollView.scss +18 -16
  82. package/src/lib/components/ScrollView/index.js +1 -1
  83. package/src/lib/components/SelectField/README.mdx +83 -7
  84. package/src/lib/components/SelectField/SelectField.jsx +86 -61
  85. package/src/lib/components/SelectField/SelectField.scss +8 -8
  86. package/src/lib/components/SelectField/_components/Option/Option.jsx +46 -0
  87. package/src/lib/components/SelectField/_components/Option/index.js +1 -0
  88. package/src/lib/components/SelectField/index.js +1 -1
  89. package/src/lib/components/Table/README.mdx +25 -9
  90. package/src/lib/components/Table/Table.jsx +43 -101
  91. package/src/lib/components/Table/Table.scss +0 -24
  92. package/src/lib/components/Table/_components/TableBodyCell/TableBodyCell.jsx +46 -0
  93. package/src/lib/components/Table/_components/TableBodyCell/index.js +1 -0
  94. package/src/lib/components/Table/_components/TableCell.scss +25 -0
  95. package/src/lib/components/Table/_components/TableHeaderCell/TableHeaderCell.jsx +71 -0
  96. package/src/lib/components/Table/_components/TableHeaderCell/index.js +1 -0
  97. package/src/lib/components/Table/index.js +1 -1
  98. package/src/lib/components/Tabs/README.mdx +21 -3
  99. package/src/lib/components/Tabs/Tabs.jsx +6 -1
  100. package/src/lib/components/Tabs/TabsItem.jsx +3 -0
  101. package/src/lib/components/Tabs/TabsItem.scss +1 -2
  102. package/src/lib/components/Text/README.mdx +25 -7
  103. package/src/lib/components/Text/Text.jsx +3 -7
  104. package/src/lib/components/Text/Text.scss +6 -6
  105. package/src/lib/components/Text/_helpers/getRootClampClassName.js +2 -2
  106. package/src/lib/components/Text/_helpers/getRootHyphensClassName.js +2 -2
  107. package/src/lib/components/Text/_helpers/getRootWordWrappingClassName.js +2 -2
  108. package/src/lib/components/Text/index.js +1 -1
  109. package/src/lib/components/TextArea/README.mdx +34 -31
  110. package/src/lib/components/TextArea/TextArea.jsx +23 -63
  111. package/src/lib/components/TextArea/TextArea.scss +8 -8
  112. package/src/lib/components/TextArea/index.js +1 -1
  113. package/src/lib/components/TextField/README.mdx +56 -54
  114. package/src/lib/components/TextField/TextField.jsx +25 -52
  115. package/src/lib/components/TextField/TextField.scss +9 -9
  116. package/src/lib/components/TextField/index.js +1 -1
  117. package/src/lib/components/TextLink/README.mdx +13 -6
  118. package/src/lib/components/TextLink/TextLink.jsx +0 -10
  119. package/src/lib/components/TextLink/index.js +1 -1
  120. package/src/lib/components/Toggle/README.mdx +18 -6
  121. package/src/lib/components/Toggle/Toggle.jsx +18 -44
  122. package/src/lib/components/Toggle/index.js +1 -1
  123. package/src/lib/components/Toolbar/README.mdx +21 -6
  124. package/src/lib/components/Toolbar/Toolbar.jsx +9 -43
  125. package/src/lib/components/Toolbar/Toolbar.scss +24 -12
  126. package/src/lib/components/Toolbar/ToolbarGroup.jsx +7 -26
  127. package/src/lib/components/Toolbar/ToolbarItem.jsx +3 -7
  128. package/src/lib/components/Toolbar/_helpers/getAlignClassName.js +19 -0
  129. package/src/lib/components/Toolbar/_helpers/getJustifyClassName.js +16 -0
  130. package/src/lib/components/_helpers/getRootColorClassName.js +10 -10
  131. package/src/lib/components/_helpers/getRootSizeClassName.js +3 -3
  132. package/src/lib/components/_helpers/transferProps.js +1 -1
  133. package/src/lib/index.js +24 -16
  134. package/src/lib/provider/withGlobalProps.jsx +20 -3
  135. package/src/lib/styles/tools/form-fields/_box-field-layout.scss +15 -15
  136. package/src/lib/styles/tools/form-fields/_inline-field-elements.scss +1 -1
  137. package/src/lib/styles/tools/form-fields/_inline-field-layout.scss +9 -9
  138. package/src/lib/theme.scss +18 -26
  139. package/src/lib/translations/en.js +1 -1
  140. package/src/lib/components/Grid/_theme.scss +0 -11
  141. package/src/lib/components/ScrollView/_theme.scss +0 -2
  142. package/src/lib/components/withForwardedRef.jsx +0 -11
@@ -2,9 +2,12 @@ import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
4
  import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
5
+ import { transferProps } from '../_helpers/transferProps';
5
6
  import { generateResponsiveCustomProperties } from './_helpers/generateResponsiveCustomProperties';
6
7
  import styles from './Grid.scss';
7
8
 
9
+ const SPACING_VALUES = [0, 1, 2, 3, 4, 5, 6, 7];
10
+
8
11
  export const Grid = ({
9
12
  alignContent,
10
13
  alignItems,
@@ -12,13 +15,12 @@ export const Grid = ({
12
15
  children,
13
16
  columnGap,
14
17
  columns,
15
- id,
16
18
  justifyContent,
17
19
  justifyItems,
18
20
  rowGap,
19
21
  rows,
20
22
  tag: Tag,
21
- ...other
23
+ ...restProps
22
24
  }) => {
23
25
  if (isChildrenEmpty(children)) {
24
26
  return null;
@@ -26,20 +28,19 @@ export const Grid = ({
26
28
 
27
29
  return (
28
30
  <Tag
29
- id={id}
31
+ {...transferProps(restProps)}
30
32
  className={styles.root}
31
33
  style={{
32
34
  ...generateResponsiveCustomProperties(columns, 'columns'),
33
- ...generateResponsiveCustomProperties(columnGap, 'column-gap'),
35
+ ...generateResponsiveCustomProperties(columnGap, 'column-gap', 'spacing'),
34
36
  ...generateResponsiveCustomProperties(rows, 'rows'),
35
- ...generateResponsiveCustomProperties(rowGap, 'row-gap'),
37
+ ...generateResponsiveCustomProperties(rowGap, 'row-gap', 'spacing'),
36
38
  ...generateResponsiveCustomProperties(autoFlow, 'auto-flow'),
37
39
  ...generateResponsiveCustomProperties(alignContent, 'align-content'),
38
40
  ...generateResponsiveCustomProperties(alignItems, 'align-items'),
39
41
  ...generateResponsiveCustomProperties(justifyContent, 'justify-content'),
40
42
  ...generateResponsiveCustomProperties(justifyItems, 'justify-items'),
41
43
  }}
42
- {...other}
43
44
  >
44
45
  {children}
45
46
  </Tag>
@@ -54,13 +55,12 @@ Grid.defaultProps = {
54
55
  alignItems: undefined,
55
56
  autoFlow: undefined,
56
57
  children: null,
57
- columnGap: undefined,
58
- columns: undefined,
59
- id: undefined,
58
+ columnGap: 4,
59
+ columns: '1fr',
60
60
  justifyContent: undefined,
61
61
  justifyItems: undefined,
62
- rowGap: undefined,
63
- rows: undefined,
62
+ rowGap: 4,
63
+ rows: 'auto',
64
64
  tag: 'div',
65
65
  };
66
66
 
@@ -118,19 +118,19 @@ Grid.propTypes = {
118
118
  */
119
119
  children: PropTypes.node,
120
120
  /**
121
- * Gap between columns. Accepts any valid value of `grid-column-gap` CSS property.
122
- * See [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/column-gap) for more.
121
+ * Gap between columns. Accepts any of [spacing values](/foundation/spacing-values) as number.
122
+ * See [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/column-gap) for more about `column-gap`.
123
123
  */
124
124
  columnGap: PropTypes.oneOfType([
125
- PropTypes.string,
125
+ PropTypes.oneOf(SPACING_VALUES),
126
126
  PropTypes.shape({
127
- xs: PropTypes.string,
128
- sm: PropTypes.string,
129
- md: PropTypes.string,
130
- lg: PropTypes.string,
131
- xl: PropTypes.string,
132
- x2l: PropTypes.string,
133
- x3l: PropTypes.string,
127
+ xs: PropTypes.oneOf(SPACING_VALUES),
128
+ sm: PropTypes.oneOf(SPACING_VALUES),
129
+ md: PropTypes.oneOf(SPACING_VALUES),
130
+ lg: PropTypes.oneOf(SPACING_VALUES),
131
+ xl: PropTypes.oneOf(SPACING_VALUES),
132
+ x2l: PropTypes.oneOf(SPACING_VALUES),
133
+ x3l: PropTypes.oneOf(SPACING_VALUES),
134
134
  }),
135
135
  ]),
136
136
  /**
@@ -149,10 +149,6 @@ Grid.propTypes = {
149
149
  x3l: PropTypes.string,
150
150
  }),
151
151
  ]),
152
- /**
153
- * ID of the root HTML element.
154
- */
155
- id: PropTypes.string,
156
152
  /**
157
153
  * Content justification. Accepts any valid value of `justify-content` CSS property.
158
154
  * See [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content) for more.
@@ -186,19 +182,19 @@ Grid.propTypes = {
186
182
  }),
187
183
  ]),
188
184
  /**
189
- * Gap between rows. Accepts any valid value of `grid-row-gap` CSS property.
190
- * See [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/row-gap) for more.
185
+ * Gap between rows. Accepts any of [spacing values](/foundation/spacing-values) as number.
186
+ * See [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/row-gap) for more about `row-gap`.
191
187
  */
192
188
  rowGap: PropTypes.oneOfType([
193
- PropTypes.string,
189
+ PropTypes.oneOf(SPACING_VALUES),
194
190
  PropTypes.shape({
195
- xs: PropTypes.string,
196
- sm: PropTypes.string,
197
- md: PropTypes.string,
198
- lg: PropTypes.string,
199
- xl: PropTypes.string,
200
- x2l: PropTypes.string,
201
- x3l: PropTypes.string,
191
+ xs: PropTypes.oneOf(SPACING_VALUES),
192
+ sm: PropTypes.oneOf(SPACING_VALUES),
193
+ md: PropTypes.oneOf(SPACING_VALUES),
194
+ lg: PropTypes.oneOf(SPACING_VALUES),
195
+ xl: PropTypes.oneOf(SPACING_VALUES),
196
+ x2l: PropTypes.oneOf(SPACING_VALUES),
197
+ x3l: PropTypes.oneOf(SPACING_VALUES),
202
198
  }),
203
199
  ]),
204
200
  /**
@@ -22,22 +22,22 @@
22
22
 
23
23
  @use "sass:map";
24
24
  @use "../../styles/tools/spacing";
25
- @use "theme";
25
+ @use "settings";
26
26
  @use "tools";
27
27
 
28
28
  .root {
29
- @include tools.assign-responsive-custom-properties(theme.$responsive-properties); // 1.
29
+ @include tools.assign-responsive-custom-properties(settings.$grid-responsive-properties); // 1.
30
30
  @include spacing.bottom(layouts);
31
31
 
32
32
  display: grid;
33
33
  grid-template-columns: var(--rui-local-columns); // 2.
34
34
  grid-template-rows: var(--rui-local-rows); // 2.
35
- grid-auto-flow: var(--rui-local-auto-flow, #{map.get(theme.$responsive-properties, auto-flow)}); // 2.
35
+ grid-auto-flow: var(--rui-local-auto-flow); // 2.
36
36
  grid-gap: var(--rui-local-row-gap) var(--rui-local-column-gap); // 2.
37
- align-content: var(--rui-local-align-content, #{map.get(theme.$responsive-properties, align-content)}); // 2.
38
- align-items: var(--rui-local-align-items, #{map.get(theme.$responsive-properties, align-items)}); // 2.
39
- justify-content: var(--rui-local-justify-content, #{map.get(theme.$responsive-properties, justify-content)}); // 2.
40
- justify-items: var(--rui-local-justify-items, #{map.get(theme.$responsive-properties, justify-items)}); // 2.
37
+ align-content: var(--rui-local-align-content); // 2.
38
+ align-items: var(--rui-local-align-items); // 2.
39
+ justify-content: var(--rui-local-justify-content); // 2.
40
+ justify-items: var(--rui-local-justify-items); // 2.
41
41
  }
42
42
 
43
43
  // stylelint-disable-next-line selector-max-universal -- Reset any previously added margins.
@@ -46,15 +46,10 @@
46
46
  }
47
47
 
48
48
  .span {
49
- $responsive-properties: (
50
- column-span: 1,
51
- row-span: 1,
52
- );
49
+ @include tools.assign-responsive-custom-properties(settings.$grid-span-responsive-properties); // 1.
53
50
 
54
- @include tools.assign-responsive-custom-properties($responsive-properties); // 1.
55
-
56
- grid-column: span var(--rui-local-column-span, 1); // 2.
57
- grid-row: span var(--rui-local-row-span, 1); // 2.
51
+ grid-column: span var(--rui-local-column-span); // 2.
52
+ grid-row: span var(--rui-local-row-span); // 2.
58
53
  }
59
54
 
60
55
  // stylelint-disable selector-no-qualifying-type
@@ -2,16 +2,16 @@ import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { withGlobalProps } from '../../provider';
4
4
  import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
5
+ import { transferProps } from '../_helpers/transferProps';
5
6
  import { generateResponsiveCustomProperties } from './_helpers/generateResponsiveCustomProperties';
6
7
  import styles from './Grid.scss';
7
8
 
8
9
  export const GridSpan = ({
9
10
  children,
10
11
  columns,
11
- id,
12
12
  rows,
13
13
  tag: Tag,
14
- ...other
14
+ ...restProps
15
15
  }) => {
16
16
  if (isChildrenEmpty(children)) {
17
17
  return null;
@@ -19,13 +19,12 @@ export const GridSpan = ({
19
19
 
20
20
  return (
21
21
  <Tag
22
- id={id}
22
+ {...transferProps(restProps)}
23
23
  className={styles.span}
24
24
  style={{
25
25
  ...generateResponsiveCustomProperties(columns, 'column-span'),
26
26
  ...generateResponsiveCustomProperties(rows, 'row-span'),
27
27
  }}
28
- {...other}
29
28
  >
30
29
  {children}
31
30
  </Tag>
@@ -37,9 +36,8 @@ export const GridSpan = ({
37
36
 
38
37
  GridSpan.defaultProps = {
39
38
  children: null,
40
- columns: undefined,
41
- id: undefined,
42
- rows: undefined,
39
+ columns: 1,
40
+ rows: 1,
43
41
  tag: 'div',
44
42
  };
45
43
 
@@ -63,10 +61,6 @@ GridSpan.propTypes = {
63
61
  x3l: PropTypes.number,
64
62
  }),
65
63
  ]),
66
- /**
67
- * ID of the root HTML element.
68
- */
69
- id: PropTypes.string,
70
64
  /**
71
65
  * Number of rows to span.
72
66
  */
@@ -11,8 +11,10 @@ import {
11
11
  Props,
12
12
  } from 'docz'
13
13
  import { Placeholder } from '../../../docs/_components/Placeholder/Placeholder'
14
- import { Grid } from './Grid'
15
- import { GridSpan } from './GridSpan'
14
+ import {
15
+ Grid,
16
+ GridSpan,
17
+ } from '../..'
16
18
 
17
19
  The responsive Grid layout aligns content into an organized grid.
18
20
 
@@ -38,12 +40,11 @@ See [API](#api) for all available options.
38
40
 
39
41
  ## General Guidelines
40
42
 
41
- - This component implements native [CSS grid layout][grid-layout], a powerful
42
- tool for two-dimensional layouts. You may use any value accepted by
43
- [grid-template-columns], [grid-template-rows], [grid-column-gap],
44
- [grid-row-gap], [grid-auto-flow], [align-content], [align-items],
45
- [justify-content], [justify-items], and CSS properties in corresponding API
46
- options of the component.
43
+ - This component implements the native [CSS grid layout][grid-layout], a
44
+ powerful tool for two-dimensional layouts. You may use any value accepted by
45
+ [grid-template-columns], [grid-template-rows], [grid-auto-flow],
46
+ [align-content], [align-items], [justify-content], [justify-items], and CSS
47
+ properties in corresponding API options of the component.
47
48
 
48
49
  - To align your items in the grid, **simply wrap** them with the Grid
49
50
  component. Unlike other grid frameworks and UI libraries, **no additional
@@ -62,7 +63,7 @@ See [API](#api) for all available options.
62
63
  ## Columns
63
64
 
64
65
  Stack is the default outcome of Grid. Use the `columns` option to organize your
65
- items into grid.
66
+ items into a grid.
66
67
 
67
68
  <Playground>
68
69
  <Grid columns="1fr 1fr 1fr">
@@ -89,7 +90,9 @@ You can use the [`repeat()`][repeat] function to specify a recurring pattern.
89
90
  </Playground>
90
91
 
91
92
  Combine `repeat()` with `auto-fit` and [`minmax()`][minmax] to build automatic
92
- responsive layouts. Resize the playground to see it in action.
93
+ responsive layouts.
94
+
95
+ 📐 Try resizing the playground to see it in action.
93
96
 
94
97
  <Playground>
95
98
  <Grid columns="repeat(auto-fit, minmax(200px, auto))">
@@ -102,8 +105,8 @@ responsive layouts. Resize the playground to see it in action.
102
105
  </Grid>
103
106
  </Playground>
104
107
 
105
- 👉 If you need your items to have **equal height** even with content of varying
106
- length, it may be necessary to set `height: 100%` on them.
108
+ 👉 If you need your items to have **equal height** even with the content of
109
+ varying lengths, it may be necessary to set `height: 100%` on them.
107
110
 
108
111
  ## Rows
109
112
 
@@ -122,10 +125,11 @@ Use `columns` and `rows` to specify a more complicated grid layout.
122
125
 
123
126
  ## Gaps
124
127
 
125
- Both column and row gaps can be customized.
128
+ Both column and row gaps can be customized. The value must correspond to any of
129
+ [available spacings](/foundation/spacing).
126
130
 
127
131
  <Playground>
128
- <Grid columns="repeat(3, 1fr)" columnGap="0.75rem" rowGap="2rem">
132
+ <Grid columns="repeat(3, 1fr)" columnGap={2} rowGap={6}>
129
133
  <Placeholder bordered>Grid item</Placeholder>
130
134
  <Placeholder bordered>Grid item</Placeholder>
131
135
  <Placeholder bordered>Grid item</Placeholder>
@@ -137,7 +141,7 @@ Both column and row gaps can be customized.
137
141
 
138
142
  ## Alignment
139
143
 
140
- Individual items and the entire grid content can be aligned and along both axes.
144
+ Individual items and the entire grid content can be aligned along both axes.
141
145
 
142
146
  <Playground>
143
147
  <Grid
@@ -157,8 +161,8 @@ Individual items and the entire grid content can be aligned and along both axes.
157
161
 
158
162
  ## Custom HTML Tag
159
163
 
160
- To render as list for example, just change the output `tag` to `ul` or `ol` and
161
- wrap your items with `<li>`.
164
+ To render as a list, for example, just change the output `tag` to `ul` or `ol`
165
+ and wrap your items with `<li>`.
162
166
 
163
167
  <Playground>
164
168
  <Grid tag="ul">
@@ -180,9 +184,11 @@ If you need to build more complicated layouts, you have full control over the
180
184
  grid definition. Just specify your grid layout for
181
185
  [breakpoints](/foundation/breakpoints) where a change of layout is needed.
182
186
  The Grid component is written with the mobile-first approach so values for small
183
- breakpoints are used until they're overridden by a bigger breakpoint. If `xs`
184
- settings are omitted, theme defaults are used. Resize your browser to see how it
185
- works.
187
+ breakpoints are used until they're overridden by a bigger breakpoint.
188
+
189
+ 👉 With this syntax there are no defaults for individual breakpoints.
190
+
191
+ 📐 Try resizing your browser to see how it works.
186
192
 
187
193
  <Playground>
188
194
  <Grid
@@ -191,16 +197,17 @@ works.
191
197
  md: '1fr 2fr',
192
198
  }}
193
199
  columnGap={{
194
- md: 'var(--rui-spacing-2)',
195
- lg: 'var(--rui-spacing-4)',
200
+ xs: 4,
201
+ md: 2,
202
+ lg: 4,
196
203
  }}
197
204
  rows={{
198
205
  xs: 'auto auto 200px 200px',
199
206
  md: 'auto 200px auto',
200
207
  }}
201
208
  rowGap={{
202
- xs: 'var(--rui-spacing-3)',
203
- md: 'var(--rui-spacing-4)',
209
+ xs: 3,
210
+ md: 4,
204
211
  }}
205
212
  >
206
213
  <Placeholder bordered>Grid item</Placeholder>
@@ -214,9 +221,9 @@ works.
214
221
 
215
222
  ## Advanced Layouts
216
223
 
217
- Wrap your content with GridSpan component to span it over multiple columns or
218
- rows. Use the `autoFlow` option to control the layout when combined with
219
- responsive columns and rows.
224
+ Wrap your content with the GridSpan component to span it over multiple
225
+ columns or rows. Use the `autoFlow` option to control the layout when combined
226
+ with responsive columns and rows.
220
227
 
221
228
  <Playground>
222
229
  <Grid
@@ -256,6 +263,17 @@ responsive columns and rows.
256
263
  👉 `autoFlow` (used in the example above) implements the `grid-auto-flow` CSS
257
264
  property. Check [MDN][grid-auto-flow] to fully understand available options.
258
265
 
266
+ ## Forwarding HTML Attributes
267
+
268
+ In addition to the options below in the [component's API](#api) section, you
269
+ can specify [React synthetic events] or **any HTML attribute you like.** All
270
+ attributes that don't interfere with the API are forwarded to the HTML element
271
+ of your choice provided by `tag`, which is `<div>` by default. It enables making
272
+ the component interactive and helps to improve its accessibility.
273
+
274
+ 👉 Refer to the MDN reference for the full list of supported attributes of the
275
+ [div] element or [any other][all-html-elements] element of your choice.
276
+
259
277
  ## API
260
278
 
261
279
  <Props table of={Grid} />
@@ -266,18 +284,9 @@ Wrapper for content that should span multiple rows or columns.
266
284
 
267
285
  <Props table of={GridSpan} />
268
286
 
269
- ## Theming
270
-
271
- | Custom Property | Description |
272
- |------------------------------------------------------|--------------------------------------------------------------|
273
- | `--rui-Grid__column-gap` | Default column gap |
274
- | `--rui-Grid__row-gap` | Default row gap |
275
-
276
287
  [grid-layout]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout
277
288
  [grid-template-columns]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns
278
289
  [grid-template-rows]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-rows
279
- [grid-column-gap]: https://developer.mozilla.org/en-US/docs/Web/CSS/column-gap
280
- [grid-row-gap]: https://developer.mozilla.org/en-US/docs/Web/CSS/row-gap
281
290
  [grid-auto-flow]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow
282
291
  [align-content]: https://developer.mozilla.org/en-US/docs/Web/CSS/align-content
283
292
  [align-items]: https://developer.mozilla.org/en-US/docs/Web/CSS/align-items
@@ -285,3 +294,6 @@ Wrapper for content that should span multiple rows or columns.
285
294
  [justify-items]: https://developer.mozilla.org/en-US/docs/Web/CSS/justify-items
286
295
  [repeat]: https://developer.mozilla.org/en-US/docs/Web/CSS/repeat
287
296
  [minmax]: https://developer.mozilla.org/en-US/docs/Web/CSS/minmax
297
+ [React synthetic events]: https://reactjs.org/docs/events.html
298
+ [div]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
299
+ [all-html-elements]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element
@@ -1,14 +1,22 @@
1
- export const generateResponsiveCustomProperties = (prop, infix) => {
1
+ const prepareValueByType = (value, type) => {
2
+ if (type === 'spacing') {
3
+ return `var(--rui-spacing-${value})`;
4
+ }
5
+
6
+ return value;
7
+ };
8
+
9
+ export const generateResponsiveCustomProperties = (prop, infix, type = null) => {
2
10
  if (typeof prop === 'undefined') {
3
11
  return null;
4
12
  }
5
13
 
6
14
  if (typeof prop !== 'object') {
7
- return { [`--rui-local-${infix}-xs`]: prop };
15
+ return { [`--rui-local-${infix}-xs`]: prepareValueByType(prop, type) };
8
16
  }
9
17
 
10
18
  return Object.keys(prop).reduce((acc, breakpoint) => ({
11
19
  ...acc,
12
- [`--rui-local-${infix}-${breakpoint}`]: prop[breakpoint],
20
+ [`--rui-local-${infix}-${breakpoint}`]: prepareValueByType(prop[breakpoint], type),
13
21
  }), {});
14
22
  };
@@ -0,0 +1,18 @@
1
+ $grid-responsive-properties: [
2
+ columns,
3
+ column-gap,
4
+ rows,
5
+ row-gap,
6
+ auto-flow,
7
+ align-content,
8
+ align-items,
9
+ justify-content,
10
+ justify-items,
11
+ ]; // stylelint-disable-line indentation -- Broken rule?
12
+
13
+ $grid-span-responsive-properties: [
14
+ column-span,
15
+ row-span,
16
+ ]; // stylelint-disable-line indentation -- Broken rule?
17
+
18
+ $initial-fallback-value: initial;
@@ -1,14 +1,14 @@
1
1
  @use "sass:map";
2
2
  @use "../../styles/settings/breakpoints";
3
3
  @use "../../styles/tools/breakpoint";
4
+ @use "settings";
4
5
 
5
6
  // Generate fallback cascade using `var()` function fallbacks.
6
7
  //
7
8
  // $property-name: <string> Custom property name
8
- // $initial-fallback: <string> Initial fallback value
9
9
  // $current-breakpoint: <one of $breakpoint-values> Generate cascade for breakpoints smaller than this one
10
- @function _generate-custom-property-fallback-cascade($property-name, $initial-fallback, $current-breakpoint) {
11
- $fallback-cascade: $initial-fallback;
10
+ @function _generate-custom-property-fallback-cascade($property-name, $current-breakpoint) {
11
+ $fallback-cascade: settings.$initial-fallback-value;
12
12
 
13
13
  @each $breakpoint in map.keys(breakpoints.$values) {
14
14
  @if $breakpoint == $current-breakpoint {
@@ -26,11 +26,11 @@
26
26
  @mixin assign-responsive-custom-properties($properties) {
27
27
  @each $breakpoint in map.keys(breakpoints.$values) {
28
28
  @include breakpoint.up($breakpoint) {
29
- @each $property-name, $initial-fallback in $properties {
29
+ @each $property-name in $properties {
30
30
  --rui-local-#{$property-name}:
31
31
  var(
32
32
  --rui-local-#{$property-name}-#{$breakpoint},
33
- #{_generate-custom-property-fallback-cascade($property-name, $initial-fallback, $breakpoint)}
33
+ #{_generate-custom-property-fallback-cascade($property-name, $breakpoint)}
34
34
  );
35
35
  }
36
36
  }