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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. package/CONTRIBUTING.md +7 -0
  2. package/README.md +15 -16
  3. package/dist/lib.development.js +271 -415
  4. package/dist/lib.js +1 -1
  5. package/package.json +11 -13
  6. package/src/lib/components/Alert/Alert.jsx +45 -44
  7. package/src/lib/components/Alert/Alert.scss +48 -48
  8. package/src/lib/components/Alert/README.mdx +2 -5
  9. package/src/lib/components/Alert/_settings.scss +4 -4
  10. package/src/lib/components/Alert/_theme.scss +50 -50
  11. package/src/lib/components/Alert/_tools.scss +6 -6
  12. package/src/lib/components/Badge/Badge.jsx +9 -11
  13. package/src/lib/components/Badge/Badge.scss +57 -57
  14. package/src/lib/components/Button/Button.jsx +14 -13
  15. package/src/lib/components/Button/Button.scss +2 -2
  16. package/src/lib/components/Button/README.mdx +11 -6
  17. package/src/lib/components/Button/_base.scss +69 -69
  18. package/src/lib/components/Button/_priorities.scss +49 -49
  19. package/src/lib/components/Button/_settings.scss +10 -10
  20. package/src/lib/components/Button/_theme.scss +18 -15
  21. package/src/lib/components/Button/_tools.scss +98 -100
  22. package/src/lib/components/Button/helpers/getRootLabelVisibilityClassName.js +4 -4
  23. package/src/lib/components/ButtonGroup/ButtonGroup.jsx +41 -25
  24. package/src/lib/components/ButtonGroup/ButtonGroup.scss +3 -3
  25. package/src/lib/components/ButtonGroup/README.mdx +1 -1
  26. package/src/lib/components/Card/Card.jsx +10 -9
  27. package/src/lib/components/Card/Card.scss +28 -28
  28. package/src/lib/components/Card/CardBody.jsx +17 -12
  29. package/src/lib/components/Card/CardFooter.jsx +22 -9
  30. package/src/lib/components/Card/_theme.scss +50 -50
  31. package/src/lib/components/Card/_tools.scss +6 -6
  32. package/src/lib/components/CheckboxField/CheckboxField.jsx +21 -20
  33. package/src/lib/components/CheckboxField/CheckboxField.scss +20 -20
  34. package/src/lib/components/CheckboxField/README.mdx +1 -1
  35. package/src/lib/components/FileInputField/FileInputField.jsx +16 -15
  36. package/src/lib/components/FileInputField/FileInputField.scss +19 -19
  37. package/src/lib/components/FileInputField/README.mdx +1 -1
  38. package/src/lib/components/FormLayout/FormLayout.jsx +19 -17
  39. package/src/lib/components/FormLayout/FormLayout.scss +17 -17
  40. package/src/lib/components/FormLayout/FormLayoutCustomField.jsx +18 -12
  41. package/src/lib/components/FormLayout/FormLayoutCustomField.scss +18 -18
  42. package/src/lib/components/FormLayout/README.mdx +26 -49
  43. package/src/lib/components/Grid/Grid.jsx +25 -24
  44. package/src/lib/components/Grid/Grid.scss +33 -29
  45. package/src/lib/components/Grid/GridSpan.jsx +11 -10
  46. package/src/lib/components/Grid/README.mdx +46 -20
  47. package/src/lib/components/Grid/{helpers → _helpers}/generateResponsiveCustomProperties.js +0 -2
  48. package/src/lib/components/Grid/_theme.scss +9 -9
  49. package/src/lib/components/Grid/_tools.scss +20 -20
  50. package/src/lib/components/Modal/Modal.jsx +38 -32
  51. package/src/lib/components/Modal/Modal.scss +73 -73
  52. package/src/lib/components/Modal/README.mdx +2 -5
  53. package/src/lib/components/Modal/_settings.scss +5 -5
  54. package/src/lib/components/Modal/_theme.scss +17 -17
  55. package/src/lib/components/Paper/Paper.jsx +9 -9
  56. package/src/lib/components/Paper/Paper.scss +8 -8
  57. package/src/lib/components/Popover/Popover.jsx +94 -0
  58. package/src/lib/components/Popover/Popover.scss +235 -0
  59. package/src/lib/components/Popover/PopoverWrapper.jsx +46 -0
  60. package/src/lib/components/Popover/README.mdx +333 -0
  61. package/src/lib/components/Popover/_helpers/getRootAlignmentClassName.js +13 -0
  62. package/src/lib/components/Popover/_helpers/getRootSideClassName.js +17 -0
  63. package/src/lib/components/Popover/_theme.scss +16 -0
  64. package/src/lib/components/Popover/index.js +2 -0
  65. package/src/lib/components/Radio/README.mdx +1 -1
  66. package/src/lib/components/Radio/Radio.jsx +15 -14
  67. package/src/lib/components/Radio/Radio.scss +26 -26
  68. package/src/lib/components/ScrollView/README.mdx +5 -5
  69. package/src/lib/components/ScrollView/ScrollView.jsx +22 -22
  70. package/src/lib/components/ScrollView/ScrollView.scss +113 -113
  71. package/src/lib/{services/elementPositionService.js → components/ScrollView/_helpers/getElementsPositionDifference.js} +0 -2
  72. package/src/lib/{hooks → components/ScrollView/_hooks}/useLoadResizeHook.js +1 -1
  73. package/src/lib/{hooks → components/ScrollView/_hooks}/useScrollPositionHook.js +1 -1
  74. package/src/lib/components/SelectField/README.mdx +1 -1
  75. package/src/lib/components/SelectField/SelectField.jsx +17 -16
  76. package/src/lib/components/SelectField/SelectField.scss +30 -30
  77. package/src/lib/components/Table/README.mdx +1 -1
  78. package/src/lib/components/Table/Table.jsx +3 -3
  79. package/src/lib/components/Table/Table.scss +28 -35
  80. package/src/lib/components/Table/_settings.scss +5 -5
  81. package/src/lib/components/Tabs/Tabs.jsx +4 -5
  82. package/src/lib/components/Tabs/Tabs.scss +21 -21
  83. package/src/lib/components/Tabs/TabsItem.jsx +7 -6
  84. package/src/lib/components/Tabs/TabsItem.scss +78 -78
  85. package/src/lib/components/Text/README.mdx +3 -3
  86. package/src/lib/components/Text/Text.jsx +16 -9
  87. package/src/lib/components/Text/Text.scss +23 -13
  88. package/src/lib/components/Text/_helpers/getRootClampClassName.js +11 -0
  89. package/src/lib/components/Text/{helpers → _helpers}/getRootHyphensClassName.js +1 -1
  90. package/src/lib/components/Text/{helpers → _helpers}/getRootWordWrappingClassName.js +1 -1
  91. package/src/lib/components/TextArea/README.mdx +1 -1
  92. package/src/lib/components/TextArea/TextArea.jsx +21 -17
  93. package/src/lib/components/TextArea/TextArea.scss +27 -27
  94. package/src/lib/components/TextField/README.mdx +1 -1
  95. package/src/lib/components/TextField/TextField.jsx +19 -18
  96. package/src/lib/components/TextField/TextField.scss +28 -28
  97. package/src/lib/components/TextLink/README.mdx +77 -0
  98. package/src/lib/components/TextLink/TextLink.jsx +44 -0
  99. package/src/lib/components/TextLink/TextLink.scss +11 -0
  100. package/src/lib/components/TextLink/_theme.scss +4 -0
  101. package/src/lib/components/TextLink/index.js +1 -0
  102. package/src/lib/components/Toggle/README.mdx +1 -1
  103. package/src/lib/components/Toggle/Toggle.jsx +21 -20
  104. package/src/lib/components/Toggle/Toggle.scss +20 -20
  105. package/src/lib/components/Toolbar/README.mdx +33 -5
  106. package/src/lib/components/Toolbar/Toolbar.jsx +33 -17
  107. package/src/lib/components/Toolbar/Toolbar.scss +29 -42
  108. package/src/lib/components/Toolbar/ToolbarGroup.jsx +28 -16
  109. package/src/lib/components/Toolbar/ToolbarItem.jsx +36 -10
  110. package/src/lib/{helpers → components/_helpers}/getRootColorClassName.js +1 -1
  111. package/src/lib/{helpers → components/_helpers}/getRootSizeClassName.js +1 -1
  112. package/src/lib/{helpers → components/_helpers}/getRootValidationStateClassName.js +1 -1
  113. package/src/lib/components/_helpers/isChildrenEmpty.js +3 -0
  114. package/src/lib/{helpers → components/_helpers}/resolveContextOrProp.js +0 -0
  115. package/src/lib/{utils → components/_helpers}/transferProps.js +1 -1
  116. package/src/lib/foundation.scss +11 -11
  117. package/src/lib/helpers.scss +2 -2
  118. package/src/lib/index.js +8 -17
  119. package/src/lib/provider/index.js +2 -1
  120. package/src/lib/provider/withGlobalProps.jsx +21 -0
  121. package/src/lib/styles/_utilities.scss +13 -13
  122. package/src/lib/styles/elements/_code.scss +7 -7
  123. package/src/lib/styles/elements/_links.scss +8 -8
  124. package/src/lib/styles/elements/_lists.scss +3 -3
  125. package/src/lib/styles/elements/_page.scss +14 -14
  126. package/src/lib/styles/elements/_rulers.scss +6 -6
  127. package/src/lib/styles/elements/_small.scss +2 -2
  128. package/src/lib/styles/generic/_box-sizing.scss +3 -2
  129. package/src/lib/styles/generic/_forms.scss +3 -3
  130. package/src/lib/styles/generic/_reset.scss +6 -6
  131. package/src/lib/styles/generic/_shared.scss +3 -3
  132. package/src/lib/styles/helpers/_animation.scss +8 -8
  133. package/src/lib/styles/settings/_breakpoints.scss +7 -7
  134. package/src/lib/styles/settings/_escaped-characters.scss +5 -5
  135. package/src/lib/styles/settings/_form-fields.scss +24 -24
  136. package/src/lib/styles/settings/_utilities.scss +112 -100
  137. package/src/lib/styles/theme/_colors.scss +50 -50
  138. package/src/lib/styles/theme/_form-fields.scss +32 -32
  139. package/src/lib/styles/theme/_spacing.scss +11 -11
  140. package/src/lib/styles/theme/_typography.scss +12 -11
  141. package/src/lib/styles/theme-constants/_breakpoints.scss +4 -4
  142. package/src/lib/styles/theme-constants/_colors.scss +2 -2
  143. package/src/lib/styles/theme-constants/_svg.scss +1 -2
  144. package/src/lib/styles/tools/_accessibility.scss +29 -29
  145. package/src/lib/styles/tools/_breakpoint.scss +11 -14
  146. package/src/lib/styles/tools/_caret.scss +8 -8
  147. package/src/lib/styles/tools/_colors.scss +3 -3
  148. package/src/lib/styles/tools/_reset.scss +24 -21
  149. package/src/lib/styles/tools/_scrollbar.scss +4 -4
  150. package/src/lib/styles/tools/_spacing.scss +14 -22
  151. package/src/lib/styles/tools/_string.scss +9 -9
  152. package/src/lib/styles/tools/_svg.scss +13 -16
  153. package/src/lib/styles/tools/_transition.scss +42 -44
  154. package/src/lib/styles/tools/_utilities.scss +19 -19
  155. package/src/lib/styles/tools/form-fields/_box-field-elements.scss +88 -88
  156. package/src/lib/styles/tools/form-fields/_box-field-layout.scss +147 -147
  157. package/src/lib/styles/tools/form-fields/_box-field-sizes.scss +13 -15
  158. package/src/lib/styles/tools/form-fields/_foundation.scss +12 -12
  159. package/src/lib/styles/tools/form-fields/_inline-field-elements.scss +82 -71
  160. package/src/lib/styles/tools/form-fields/_inline-field-layout.scss +88 -47
  161. package/src/lib/styles/tools/form-fields/_variants.scss +104 -106
  162. package/src/lib/theme.scss +959 -954
  163. package/src/lib/utils/classNames.js +8 -0
  164. package/src/lib/components/CTA/CTA.jsx +0 -60
  165. package/src/lib/components/CTA/CTA.scss +0 -71
  166. package/src/lib/components/CTA/CTACenter.jsx +0 -27
  167. package/src/lib/components/CTA/CTAEnd.jsx +0 -27
  168. package/src/lib/components/CTA/CTAStart.jsx +0 -27
  169. package/src/lib/components/CTA/README.mdx +0 -119
  170. package/src/lib/components/CTA/index.js +0 -4
  171. package/src/lib/components/Center/Center.jsx +0 -27
  172. package/src/lib/components/Center/Center.scss +0 -7
  173. package/src/lib/components/Center/README.mdx +0 -52
  174. package/src/lib/components/Center/index.js +0 -1
  175. package/src/lib/components/Link/Link.jsx +0 -45
  176. package/src/lib/components/Link/Link.scss +0 -11
  177. package/src/lib/components/Link/README.mdx +0 -85
  178. package/src/lib/components/Link/_theme.scss +0 -4
  179. package/src/lib/components/Link/index.js +0 -1
  180. package/src/lib/components/List/List.jsx +0 -71
  181. package/src/lib/components/List/List.scss +0 -53
  182. package/src/lib/components/List/ListItem.jsx +0 -31
  183. package/src/lib/components/List/README.mdx +0 -114
  184. package/src/lib/components/List/_theme.scss +0 -1
  185. package/src/lib/components/List/index.js +0 -2
  186. package/src/lib/components/Media/Media.jsx +0 -29
  187. package/src/lib/components/Media/Media.scss +0 -16
  188. package/src/lib/components/Media/MediaBody.jsx +0 -21
  189. package/src/lib/components/Media/MediaObject.jsx +0 -21
  190. package/src/lib/components/Media/README.mdx +0 -63
  191. package/src/lib/components/Media/index.js +0 -3
  192. package/src/lib/provider/withProviderContext.jsx +0 -32
@@ -6,7 +6,7 @@
6
6
  //
7
7
  // Fallback for `xs` breakpoint: `<INITIAL FALLBACK>`
8
8
  // Fallback for `sm` breakpoint: `var(--rui-local-<PROPERTY>-xs, <INITIAL FALLBACK>)`
9
- // Fallback for `md` breakpoint: `var(--rui-local-<PROPERTY>-sm, var(--rui-local-<PROPERTY>-xs, <INITIAL FALLBACK>))`
9
+ // Fallback for `md` breakpoint: `var(--rui-local-<PROPERTY>-sm, var(--rui-local-<PROPERTY>-xs, <INIT. FALLBACK>))`
10
10
  //
11
11
  // … etc, up to the largest breakpoint.
12
12
  //
@@ -20,45 +20,49 @@
20
20
  //
21
21
  // 2. Apply custom property value that is defined within current breakpoint, see 1.
22
22
 
23
- @use 'sass:map';
24
- @use '../../styles/tools/spacing';
25
- @use 'theme';
26
- @use 'tools';
23
+ @use "sass:map";
24
+ @use "../../styles/tools/spacing";
25
+ @use "theme";
26
+ @use "tools";
27
27
 
28
28
  .root {
29
- @include tools.assign-responsive-custom-properties(theme.$responsive-properties); // 1.
30
- @include spacing.bottom(layouts);
29
+ @include tools.assign-responsive-custom-properties(theme.$responsive-properties); // 1.
30
+ @include spacing.bottom(layouts);
31
31
 
32
- display: grid;
33
- grid-template-columns: var(--rui-local-columns); // 2.
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.
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.
32
+ display: grid;
33
+ grid-template-columns: var(--rui-local-columns); // 2.
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.
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.
41
+ }
42
+
43
+ // stylelint-disable-next-line selector-max-universal -- Reset any previously added margins.
44
+ .root > * {
45
+ margin-block: 0;
41
46
  }
42
47
 
43
48
  .span {
44
- $responsive-properties: (
45
- column-span: 1,
46
- row-span: 1,
47
- );
49
+ $responsive-properties: (
50
+ column-span: 1,
51
+ row-span: 1,
52
+ );
48
53
 
49
- @include tools.assign-responsive-custom-properties($responsive-properties); // 1.
54
+ @include tools.assign-responsive-custom-properties($responsive-properties); // 1.
50
55
 
51
- grid-column: span var(--rui-local-column-span, 1); // 2.
52
- grid-row: span var(--rui-local-row-span, 1); // 2.
56
+ grid-column: span var(--rui-local-column-span, 1); // 2.
57
+ grid-row: span var(--rui-local-row-span, 1); // 2.
53
58
  }
54
59
 
55
- /* stylelint-disable selector-no-qualifying-type */
56
-
60
+ // stylelint-disable selector-no-qualifying-type
57
61
  dl.root,
58
62
  ol.root,
59
63
  ul.root {
60
- padding-left: 0;
61
- margin-left: 0;
64
+ padding-left: 0;
65
+ margin-left: 0;
66
+ list-style: none;
62
67
  }
63
-
64
- /* stylelint-enable selector-no-qualifying-type */
68
+ // stylelint-enable selector-no-qualifying-type
@@ -1,7 +1,8 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
- import { withProviderContext } from '../../provider';
4
- import { generateResponsiveCustomProperties } from './helpers/generateResponsiveCustomProperties';
3
+ import { withGlobalProps } from '../../provider';
4
+ import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
5
+ import { generateResponsiveCustomProperties } from './_helpers/generateResponsiveCustomProperties';
5
6
  import styles from './Grid.scss';
6
7
 
7
8
  export const GridSpan = ({
@@ -12,7 +13,7 @@ export const GridSpan = ({
12
13
  tag: Tag,
13
14
  ...other
14
15
  }) => {
15
- if (!children) {
16
+ if (isChildrenEmpty(children)) {
16
17
  return null;
17
18
  }
18
19
 
@@ -44,7 +45,7 @@ GridSpan.defaultProps = {
44
45
 
45
46
  GridSpan.propTypes = {
46
47
  /**
47
- * Items to be aligned in the grid.
48
+ * Items to be aligned in the grid. If none are provided nothing is rendered.
48
49
  */
49
50
  children: PropTypes.node,
50
51
  /**
@@ -58,8 +59,8 @@ GridSpan.propTypes = {
58
59
  md: PropTypes.number,
59
60
  lg: PropTypes.number,
60
61
  xl: PropTypes.number,
61
- xxl: PropTypes.number,
62
- xxxl: PropTypes.number,
62
+ x2l: PropTypes.number,
63
+ x3l: PropTypes.number,
63
64
  }),
64
65
  ]),
65
66
  /**
@@ -77,8 +78,8 @@ GridSpan.propTypes = {
77
78
  md: PropTypes.number,
78
79
  lg: PropTypes.number,
79
80
  xl: PropTypes.number,
80
- xxl: PropTypes.number,
81
- xxxl: PropTypes.number,
81
+ x2l: PropTypes.number,
82
+ x3l: PropTypes.number,
82
83
  }),
83
84
  ]),
84
85
  /**
@@ -88,6 +89,6 @@ GridSpan.propTypes = {
88
89
  tag: PropTypes.string,
89
90
  };
90
91
 
91
- export const GridSpanWithContext = withProviderContext(GridSpan, 'GridSpan');
92
+ export const GridSpanWithGlobalProps = withGlobalProps(GridSpan, 'GridSpan');
92
93
 
93
- export default GridSpanWithContext;
94
+ export default GridSpanWithGlobalProps;
@@ -27,10 +27,7 @@ import { Grid } from '@react-ui-org/react-ui';
27
27
  And use it:
28
28
 
29
29
  <Playground>
30
- <Grid columns="1fr 1fr 1fr">
31
- <Placeholder bordered>Grid item</Placeholder>
32
- <Placeholder bordered>Grid item</Placeholder>
33
- <Placeholder bordered>Grid item</Placeholder>
30
+ <Grid>
34
31
  <Placeholder bordered>Grid item</Placeholder>
35
32
  <Placeholder bordered>Grid item</Placeholder>
36
33
  <Placeholder bordered>Grid item</Placeholder>
@@ -41,7 +38,7 @@ See [API](#api) for all available options.
41
38
 
42
39
  ## General Guidelines
43
40
 
44
- - This component implements native [CSS grid layout][grid-layout], the right CSS
41
+ - This component implements native [CSS grid layout][grid-layout], a powerful
45
42
  tool for two-dimensional layouts. You may use any value accepted by
46
43
  [grid-template-columns], [grid-template-rows], [grid-column-gap],
47
44
  [grid-row-gap], [grid-auto-flow], [align-content], [align-items],
@@ -53,20 +50,22 @@ See [API](#api) for all available options.
53
50
  markup** like GridItem or Cell is necessary for your items. But it's there
54
51
  when you really need it—see [Advanced Layouts](#advanced-layouts).
55
52
 
53
+ - For forms, use rather the [FormLayout](/components/form-layout) component
54
+ which is designed specifically for that purpose.
55
+
56
56
  - The Grid component is so powerful that it enables you to build even very
57
57
  advanced layouts **without** having to write **a single line of custom CSS.**
58
58
  See [Advanced Layouts](#advanced-layouts) for more.
59
59
 
60
- 👉 The default layout has one column, auto-sized rows and gaps of
61
- [size 4](/foundation/spacing). Defaults for all Grid API options can be
62
- [customized](/customize/theming/overview) with CSS custom properties.
60
+ 👉 Vertical margin of items inside Grid is reset to zero.
63
61
 
64
- ## Columns and Rows
62
+ ## Columns
65
63
 
66
- Use `columns` and `rows` to specify your grid layout.
64
+ Stack is the default outcome of Grid. Use the `columns` option to organize your
65
+ items into grid.
67
66
 
68
67
  <Playground>
69
- <Grid columns="1fr 2fr" rows="auto 200px auto">
68
+ <Grid columns="1fr 1fr 1fr">
70
69
  <Placeholder bordered>Grid item</Placeholder>
71
70
  <Placeholder bordered>Grid item</Placeholder>
72
71
  <Placeholder bordered>Grid item</Placeholder>
@@ -106,6 +105,21 @@ responsive layouts. Resize the playground to see it in action.
106
105
  👉 If you need your items to have **equal height** even with content of varying
107
106
  length, it may be necessary to set `height: 100%` on them.
108
107
 
108
+ ## Rows
109
+
110
+ Use `columns` and `rows` to specify a more complicated grid layout.
111
+
112
+ <Playground>
113
+ <Grid columns="1fr 2fr" rows="auto 200px auto">
114
+ <Placeholder bordered>Grid item</Placeholder>
115
+ <Placeholder bordered>Grid item</Placeholder>
116
+ <Placeholder bordered>Grid item</Placeholder>
117
+ <Placeholder bordered>Grid item</Placeholder>
118
+ <Placeholder bordered>Grid item</Placeholder>
119
+ <Placeholder bordered>Grid item</Placeholder>
120
+ </Grid>
121
+ </Playground>
122
+
109
123
  ## Gaps
110
124
 
111
125
  Both column and row gaps can be customized.
@@ -141,13 +155,32 @@ Individual items and the entire grid content can be aligned and along both axes.
141
155
  </Grid>
142
156
  </Playground>
143
157
 
158
+ ## Custom HTML Tag
159
+
160
+ To render as list for example, just change the output `tag` to `ul` or `ol` and
161
+ wrap your items with `<li>`.
162
+
163
+ <Playground>
164
+ <Grid tag="ul">
165
+ <li>
166
+ <Placeholder bordered>List item</Placeholder>
167
+ </li>
168
+ <li>
169
+ <Placeholder bordered>List item</Placeholder>
170
+ </li>
171
+ <li>
172
+ <Placeholder bordered>List item</Placeholder>
173
+ </li>
174
+ </Grid>
175
+ </Playground>
176
+
144
177
  ## Media Queries
145
178
 
146
179
  If you need to build more complicated layouts, you have full control over the
147
180
  grid definition. Just specify your grid layout for
148
181
  [breakpoints](/foundation/breakpoints) where a change of layout is needed.
149
182
  The Grid component is written with the mobile-first approach so values for small
150
- breakpoints are used until they're overriden by a bigger breakpoint. If `xs`
183
+ breakpoints are used until they're overridden by a bigger breakpoint. If `xs`
151
184
  settings are omitted, theme defaults are used. Resize your browser to see how it
152
185
  works.
153
186
 
@@ -237,15 +270,8 @@ Wrapper for content that should span multiple rows or columns.
237
270
 
238
271
  | Custom Property | Description |
239
272
  |------------------------------------------------------|--------------------------------------------------------------|
240
- | `--rui-Grid__columns` | Default columns layout |
241
273
  | `--rui-Grid__column-gap` | Default column gap |
242
- | `--rui-Grid__rows` | Default rows layout |
243
274
  | `--rui-Grid__row-gap` | Default row gap |
244
- | `--rui-Grid__align-content` | Default vertical alignment of the layout |
245
- | `--rui-Grid__align-items` | Default vertical alignment of grid items |
246
- | `--rui-Grid__justify-content` | Default horizontal alignment of the layout |
247
- | `--rui-Grid__justify-items` | Default horizontal alignment of grid items |
248
- | `--rui-Grid__auto-flow` | Default auto-flow algorithm |
249
275
 
250
276
  [grid-layout]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout
251
277
  [grid-template-columns]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns
@@ -253,7 +279,7 @@ Wrapper for content that should span multiple rows or columns.
253
279
  [grid-column-gap]: https://developer.mozilla.org/en-US/docs/Web/CSS/column-gap
254
280
  [grid-row-gap]: https://developer.mozilla.org/en-US/docs/Web/CSS/row-gap
255
281
  [grid-auto-flow]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow
256
- [aling-content]: https://developer.mozilla.org/en-US/docs/Web/CSS/align-content
282
+ [align-content]: https://developer.mozilla.org/en-US/docs/Web/CSS/align-content
257
283
  [align-items]: https://developer.mozilla.org/en-US/docs/Web/CSS/align-items
258
284
  [justify-content]: https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content
259
285
  [justify-items]: https://developer.mozilla.org/en-US/docs/Web/CSS/justify-items
@@ -12,5 +12,3 @@ export const generateResponsiveCustomProperties = (prop, infix) => {
12
12
  [`--rui-local-${infix}-${breakpoint}`]: prop[breakpoint],
13
13
  }), {});
14
14
  };
15
-
16
- export default generateResponsiveCustomProperties;
@@ -1,11 +1,11 @@
1
1
  $responsive-properties: (
2
- columns: var(--rui-Grid__columns),
3
- column-gap: var(--rui-Grid__column-gap),
4
- rows: var(--rui-Grid__rows),
5
- row-gap: var(--rui-Grid__row-gap),
6
- auto-flow: var(--rui-Grid__auto-flow),
7
- align-content: var(--rui-Grid__align-content),
8
- align-items: var(--rui-Grid__align-items),
9
- justify-content: var(--rui-Grid__justify-content),
10
- justify-items: var(--rui-Grid__justify-items),
2
+ columns: 1fr,
3
+ column-gap: var(--rui-Grid__column-gap),
4
+ rows: auto,
5
+ row-gap: var(--rui-Grid__row-gap),
6
+ auto-flow: initial,
7
+ align-content: initial,
8
+ align-items: initial,
9
+ justify-content: initial,
10
+ justify-items: initial,
11
11
  );
@@ -1,6 +1,6 @@
1
- @use 'sass:map';
2
- @use '../../styles/settings/breakpoints';
3
- @use '../../styles/tools/breakpoint';
1
+ @use "sass:map";
2
+ @use "../../styles/settings/breakpoints";
3
+ @use "../../styles/tools/breakpoint";
4
4
 
5
5
  // Generate fallback cascade using `var()` function fallbacks.
6
6
  //
@@ -8,15 +8,15 @@
8
8
  // $initial-fallback: <string> Initial fallback value
9
9
  // $current-breakpoint: <one of $breakpoint-values> Generate cascade for breakpoints smaller than this one
10
10
  @function _generate-custom-property-fallback-cascade($property-name, $initial-fallback, $current-breakpoint) {
11
- $fallback-cascade: $initial-fallback;
11
+ $fallback-cascade: $initial-fallback;
12
12
 
13
- @each $breakpoint in map.keys(breakpoints.$values) {
14
- @if $breakpoint == $current-breakpoint {
15
- @return $fallback-cascade;
16
- }
13
+ @each $breakpoint in map.keys(breakpoints.$values) {
14
+ @if $breakpoint == $current-breakpoint {
15
+ @return $fallback-cascade;
16
+ }
17
17
 
18
- $fallback-cascade: var(--rui-local-#{$property-name}-#{$breakpoint}, $fallback-cascade);
19
- }
18
+ $fallback-cascade: var(--rui-local-#{$property-name}-#{$breakpoint}, $fallback-cascade);
19
+ }
20
20
  }
21
21
 
22
22
  // Read custom properties within a given breakpoint and assign them to expected output custom
@@ -24,15 +24,15 @@
24
24
  //
25
25
  // $properties: <map of <<property name>: <initial fallback value>> pairs>
26
26
  @mixin assign-responsive-custom-properties($properties) {
27
- @each $breakpoint in map.keys(breakpoints.$values) {
28
- @include breakpoint.up($breakpoint) {
29
- @each $property-name, $initial-fallback in $properties {
30
- --rui-local-#{$property-name}:
31
- var(
32
- --rui-local-#{$property-name}-#{$breakpoint},
33
- #{_generate-custom-property-fallback-cascade($property-name, $initial-fallback, $breakpoint)}
34
- );
35
- }
27
+ @each $breakpoint in map.keys(breakpoints.$values) {
28
+ @include breakpoint.up($breakpoint) {
29
+ @each $property-name, $initial-fallback in $properties {
30
+ --rui-local-#{$property-name}:
31
+ var(
32
+ --rui-local-#{$property-name}-#{$breakpoint},
33
+ #{_generate-custom-property-fallback-cascade($property-name, $initial-fallback, $breakpoint)}
34
+ );
35
+ }
36
+ }
36
37
  }
37
- }
38
38
  }
@@ -1,8 +1,12 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { createPortal } from 'react-dom';
4
- import transferProps from '../../utils/transferProps';
5
- import { withProviderContext } from '../../provider';
4
+ import {
5
+ RUIContext,
6
+ withGlobalProps,
7
+ } from '../../provider';
8
+ import { classNames } from '../../utils/classNames';
9
+ import { transferProps } from '../_helpers/transferProps';
6
10
  import {
7
11
  Toolbar,
8
12
  ToolbarItem,
@@ -80,7 +84,6 @@ export class Modal extends React.Component {
80
84
  scrollView,
81
85
  size,
82
86
  title,
83
- translations,
84
87
  } = this.props;
85
88
 
86
89
  const sizeClass = (modalSize) => {
@@ -125,10 +128,10 @@ export class Modal extends React.Component {
125
128
  if (scrollView) {
126
129
  return (
127
130
  <div
128
- className={[
131
+ className={classNames(
129
132
  styles.body,
130
133
  styles.isBodyScrollable,
131
- ].join(' ')}
134
+ )}
132
135
  >
133
136
  {React.cloneElement(scrollView, scrollView.props, content)}
134
137
  </div>
@@ -154,11 +157,11 @@ export class Modal extends React.Component {
154
157
  role="presentation"
155
158
  >
156
159
  <div
157
- className={[
160
+ className={classNames(
158
161
  styles.root,
159
162
  sizeClass(size),
160
163
  positionClass(position),
161
- ].join(' ')}
164
+ )}
162
165
  onClick={(e) => {
163
166
  e.stopPropagation();
164
167
  }}
@@ -172,15 +175,19 @@ export class Modal extends React.Component {
172
175
  {title}
173
176
  </h3>
174
177
  {onClose && (
175
- <button
176
- type="button"
177
- className={styles.close}
178
- onClick={onClose}
179
- title={translations.close}
180
- {...(id && { id: `${id}__closeModalHeaderButton` })}
181
- >
182
- ×
183
- </button>
178
+ <RUIContext.Consumer>
179
+ {({ translations }) => (
180
+ <button
181
+ type="button"
182
+ className={styles.close}
183
+ onClick={onClose}
184
+ title={translations.Modal.close}
185
+ {...(id && { id: `${id}__closeModalHeaderButton` })}
186
+ >
187
+ ×
188
+ </button>
189
+ )}
190
+ </RUIContext.Consumer>
184
191
  )}
185
192
  </div>
186
193
  {modalBody()}
@@ -204,12 +211,16 @@ export class Modal extends React.Component {
204
211
  ))}
205
212
  {onClose && (
206
213
  <ToolbarItem>
207
- <Button
208
- label={translations.close}
209
- onClick={onClose}
210
- priority="flat"
211
- {...(id && { id: `${id}__closeModalFooterButton` })}
212
- />
214
+ <RUIContext.Consumer>
215
+ {({ translations }) => (
216
+ <Button
217
+ label={translations.Modal.close}
218
+ onClick={onClose}
219
+ priority="flat"
220
+ {...(id && { id: `${id}__closeModalFooterButton` })}
221
+ />
222
+ )}
223
+ </RUIContext.Consumer>
213
224
  </ToolbarItem>
214
225
  )}
215
226
  </Toolbar>
@@ -234,6 +245,7 @@ export class Modal extends React.Component {
234
245
  Modal.defaultProps = {
235
246
  actions: [],
236
247
  autoFocus: true,
248
+ children: null,
237
249
  id: undefined,
238
250
  onClose: null,
239
251
  portalId: null,
@@ -265,7 +277,7 @@ Modal.propTypes = {
265
277
  /**
266
278
  * Content of the modal.
267
279
  */
268
- children: PropTypes.node.isRequired,
280
+ children: PropTypes.node,
269
281
  /**
270
282
  * ID of the root HTML element. It also serves as a base for nested elements:
271
283
  * * `<ID>__content`
@@ -278,7 +290,7 @@ Modal.propTypes = {
278
290
  */
279
291
  onClose: PropTypes.func,
280
292
  /**
281
- * If set, the modal is rendered in the React Portal with that ID.
293
+ * If set, modal is rendered in the React Portal with that ID.
282
294
  */
283
295
  portalId: PropTypes.string,
284
296
  /**
@@ -299,14 +311,8 @@ Modal.propTypes = {
299
311
  * Title displayed in modal header.
300
312
  */
301
313
  title: PropTypes.string.isRequired,
302
- /**
303
- * Translations required by the component.
304
- */
305
- translations: PropTypes.shape({
306
- close: PropTypes.string.isRequired,
307
- }).isRequired,
308
314
  };
309
315
 
310
- export const ModalWithContext = withProviderContext(Modal, 'Modal');
316
+ export const ModalWithGlobalProps = withGlobalProps(Modal, 'Modal');
311
317
 
312
- export default ModalWithContext;
318
+ export default ModalWithGlobalProps;