@react-ui-org/react-ui 0.52.1 → 0.54.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 (261) hide show
  1. package/README.md +10 -7
  2. package/dist/react-ui.css +5 -3
  3. package/dist/react-ui.development.css +11302 -0
  4. package/dist/react-ui.development.js +1588 -0
  5. package/dist/react-ui.js +1 -1
  6. package/package.json +66 -77
  7. package/src/{lib/components → components}/Alert/Alert.jsx +1 -1
  8. package/src/{lib/components/Alert/README.mdx → components/Alert/README.md} +84 -100
  9. package/src/{lib/components → components}/Badge/Badge.jsx +1 -1
  10. package/src/{lib/components → components}/Badge/Badge.scss +1 -1
  11. package/src/components/Badge/README.md +103 -0
  12. package/src/{lib/components → components}/Button/Button.jsx +1 -1
  13. package/src/components/Button/README.md +580 -0
  14. package/src/{lib/components → components}/ButtonGroup/ButtonGroup.jsx +11 -9
  15. package/src/{lib/components/ButtonGroup/README.mdx → components/ButtonGroup/README.md} +128 -134
  16. package/src/{lib/components → components}/Card/Card.jsx +1 -1
  17. package/src/components/Card/README.md +314 -0
  18. package/src/{lib/components/CheckboxField/README.mdx → components/CheckboxField/README.md} +96 -108
  19. package/src/{lib/components/FileInputField/README.mdx → components/FileInputField/README.md} +83 -95
  20. package/src/{lib/components → components}/FormLayout/FormLayout.jsx +4 -4
  21. package/src/components/FormLayout/README.md +462 -0
  22. package/src/{lib/components → components}/Grid/Grid.jsx +2 -2
  23. package/src/components/Grid/README.md +281 -0
  24. package/src/{lib/components → components}/InputGroup/InputGroup.jsx +28 -19
  25. package/src/{lib/components → components}/InputGroup/InputGroup.scss +4 -5
  26. package/src/{lib/components/InputGroup/README.mdx → components/InputGroup/README.md} +162 -165
  27. package/src/{lib/components → components}/Modal/Modal.jsx +6 -6
  28. package/src/components/Modal/README.md +1090 -0
  29. package/src/components/Modal/_hooks/useModalScrollPrevention.js +37 -0
  30. package/src/{lib/components/Paper/README.mdx → components/Paper/README.md} +18 -30
  31. package/src/{lib/components/Popover/README.mdx → components/Popover/README.md} +102 -132
  32. package/src/{lib/components/Radio/README.mdx → components/Radio/README.md} +122 -134
  33. package/src/{lib/components → components}/Radio/Radio.jsx +11 -12
  34. package/src/{lib/components → components}/Radio/Radio.scss +0 -5
  35. package/src/components/ScrollView/README.md +503 -0
  36. package/src/{lib/components → components}/ScrollView/ScrollView.jsx +12 -3
  37. package/src/components/SelectField/README.md +681 -0
  38. package/src/components/Table/README.md +259 -0
  39. package/src/{lib/components → components}/Table/Table.jsx +4 -1
  40. package/src/{lib/components → components}/Table/_components/TableHeaderCell/TableHeaderCell.jsx +1 -1
  41. package/src/{lib/components/Tabs/README.mdx → components/Tabs/README.md} +117 -134
  42. package/src/{lib/components → components}/Tabs/TabsItem.jsx +3 -3
  43. package/src/components/Text/README.md +220 -0
  44. package/src/components/TextArea/README.md +359 -0
  45. package/src/{lib/components/TextField/README.mdx → components/TextField/README.md} +336 -342
  46. package/src/{lib/components/TextLink/README.mdx → components/TextLink/README.md} +19 -31
  47. package/src/{lib/components/Toggle/README.mdx → components/Toggle/README.md} +98 -110
  48. package/src/components/Toolbar/README.md +359 -0
  49. package/src/{lib/components → components}/Toolbar/_helpers/getAlignClassName.js +12 -4
  50. package/src/components/_helpers/getRootPriorityClassName.js +15 -0
  51. package/src/{lib/index.js → index.js} +6 -0
  52. package/src/{lib/provider → provider}/RUIProvider.jsx +17 -11
  53. package/src/{lib/styles → styles}/tools/_caret.scss +1 -1
  54. package/src/{lib/styles → styles}/tools/form-fields/_box-field-elements.scss +1 -1
  55. package/src/{lib/styles → styles}/tools/form-fields/_inline-field-elements.scss +2 -2
  56. package/src/{lib/theme.scss → theme.scss} +4 -3
  57. package/CONTRIBUTING.md +0 -137
  58. package/dist/lib.development.js +0 -3179
  59. package/dist/lib.js +0 -1
  60. package/public/racom.svg +0 -11
  61. package/src/lib/components/Badge/README.mdx +0 -126
  62. package/src/lib/components/Button/README.mdx +0 -581
  63. package/src/lib/components/Card/README.mdx +0 -326
  64. package/src/lib/components/FormLayout/README.mdx +0 -501
  65. package/src/lib/components/Grid/README.mdx +0 -299
  66. package/src/lib/components/Modal/README.mdx +0 -1360
  67. package/src/lib/components/Modal/_hooks/useModalScrollPrevention.js +0 -35
  68. package/src/lib/components/ScrollView/README.mdx +0 -521
  69. package/src/lib/components/SelectField/README.mdx +0 -693
  70. package/src/lib/components/Table/README.mdx +0 -275
  71. package/src/lib/components/Text/README.mdx +0 -241
  72. package/src/lib/components/TextArea/README.mdx +0 -366
  73. package/src/lib/components/Toolbar/README.mdx +0 -386
  74. package/src/{lib/components → components}/Alert/Alert.scss +0 -0
  75. package/src/{lib/components → components}/Alert/_settings.scss +0 -0
  76. package/src/{lib/components → components}/Alert/_theme.scss +0 -0
  77. package/src/{lib/components → components}/Alert/_tools.scss +0 -0
  78. package/src/{lib/components → components}/Alert/index.js +0 -0
  79. package/src/{lib/components → components}/Badge/index.js +0 -0
  80. package/src/{lib/components → components}/Button/Button.scss +0 -0
  81. package/src/{lib/components → components}/Button/_base.scss +0 -0
  82. package/src/{lib/components → components}/Button/_priorities.scss +0 -0
  83. package/src/{lib/components → components}/Button/_settings.scss +0 -0
  84. package/src/{lib/components → components}/Button/_theme.scss +0 -0
  85. package/src/{lib/components → components}/Button/_tools.scss +0 -0
  86. package/src/{lib/components → components}/Button/helpers/getRootLabelVisibilityClassName.js +0 -0
  87. package/src/{lib/components/_helpers → components/Button/helpers}/getRootPriorityClassName.js +0 -0
  88. package/src/{lib/components → components}/Button/index.js +0 -0
  89. package/src/{lib/components → components}/ButtonGroup/ButtonGroup.scss +0 -0
  90. package/src/{lib/components → components}/ButtonGroup/ButtonGroupContext.js +0 -0
  91. package/src/{lib/components → components}/ButtonGroup/_theme.scss +0 -0
  92. package/src/{lib/components → components}/ButtonGroup/index.js +0 -0
  93. package/src/{lib/components → components}/Card/Card.scss +0 -0
  94. package/src/{lib/components → components}/Card/CardBody.jsx +0 -0
  95. package/src/{lib/components → components}/Card/CardFooter.jsx +0 -0
  96. package/src/{lib/components → components}/Card/_theme.scss +0 -0
  97. package/src/{lib/components → components}/Card/_tools.scss +0 -0
  98. package/src/{lib/components → components}/Card/index.js +0 -0
  99. package/src/{lib/components → components}/CheckboxField/CheckboxField.jsx +0 -0
  100. package/src/{lib/components → components}/CheckboxField/CheckboxField.scss +0 -0
  101. package/src/{lib/components → components}/CheckboxField/index.js +0 -0
  102. package/src/{lib/components → components}/FileInputField/FileInputField.jsx +0 -0
  103. package/src/{lib/components → components}/FileInputField/FileInputField.scss +0 -0
  104. package/src/{lib/components → components}/FileInputField/index.js +0 -0
  105. package/src/{lib/components → components}/FormLayout/FormLayout.scss +0 -0
  106. package/src/{lib/components → components}/FormLayout/FormLayoutContext.js +0 -0
  107. package/src/{lib/components → components}/FormLayout/FormLayoutCustomField.jsx +4 -4
  108. package/src/{lib/components → components}/FormLayout/FormLayoutCustomField.scss +0 -0
  109. package/src/{lib/components → components}/FormLayout/_theme.scss +0 -0
  110. package/src/{lib/components → components}/FormLayout/index.js +0 -0
  111. package/src/{lib/components → components}/Grid/Grid.scss +0 -0
  112. package/src/{lib/components → components}/Grid/GridSpan.jsx +0 -0
  113. package/src/{lib/components → components}/Grid/_helpers/generateResponsiveCustomProperties.js +0 -0
  114. package/src/{lib/components → components}/Grid/_settings.scss +0 -0
  115. package/src/{lib/components → components}/Grid/_tools.scss +0 -0
  116. package/src/{lib/components → components}/Grid/index.js +0 -0
  117. package/src/{lib/components → components}/InputGroup/InputGroupContext.js +0 -0
  118. package/src/{lib/components → components}/InputGroup/_theme.scss +0 -0
  119. package/src/{lib/components → components}/InputGroup/index.js +0 -0
  120. package/src/{lib/components → components}/Modal/Modal.scss +0 -0
  121. package/src/{lib/components → components}/Modal/ModalBody.jsx +0 -0
  122. package/src/{lib/components → components}/Modal/ModalBody.scss +0 -0
  123. package/src/{lib/components → components}/Modal/ModalCloseButton.jsx +1 -1
  124. package/src/{lib/components → components}/Modal/ModalCloseButton.scss +0 -0
  125. package/src/{lib/components → components}/Modal/ModalContent.jsx +0 -0
  126. package/src/{lib/components → components}/Modal/ModalContent.scss +0 -0
  127. package/src/{lib/components → components}/Modal/ModalFooter.jsx +0 -0
  128. package/src/{lib/components → components}/Modal/ModalFooter.scss +0 -0
  129. package/src/{lib/components → components}/Modal/ModalHeader.jsx +0 -0
  130. package/src/{lib/components → components}/Modal/ModalHeader.scss +0 -0
  131. package/src/{lib/components → components}/Modal/ModalTitle.jsx +0 -0
  132. package/src/{lib/components → components}/Modal/ModalTitle.scss +0 -0
  133. package/src/{lib/components → components}/Modal/_helpers/getJustifyClassName.js +0 -0
  134. package/src/{lib/components → components}/Modal/_helpers/getPositionClassName.js +0 -0
  135. package/src/{lib/components → components}/Modal/_helpers/getScrollingClassName.js +0 -0
  136. package/src/{lib/components → components}/Modal/_helpers/getSizeClassName.js +0 -0
  137. package/src/{lib/components → components}/Modal/_hooks/useModalFocus.js +0 -0
  138. package/src/{lib/components → components}/Modal/_settings.scss +0 -0
  139. package/src/{lib/components → components}/Modal/_theme.scss +0 -0
  140. package/src/{lib/components → components}/Modal/index.js +0 -0
  141. package/src/{lib/components → components}/Paper/Paper.jsx +0 -0
  142. package/src/{lib/components → components}/Paper/Paper.scss +0 -0
  143. package/src/{lib/components → components}/Paper/_theme.scss +0 -0
  144. package/src/{lib/components → components}/Paper/index.js +0 -0
  145. package/src/{lib/components → components}/Popover/Popover.jsx +0 -0
  146. package/src/{lib/components → components}/Popover/Popover.scss +0 -0
  147. package/src/{lib/components → components}/Popover/PopoverWrapper.jsx +0 -0
  148. package/src/{lib/components → components}/Popover/PopoverWrapper.scss +0 -0
  149. package/src/{lib/components → components}/Popover/_helpers/getRootAlignmentClassName.js +0 -0
  150. package/src/{lib/components → components}/Popover/_helpers/getRootSideClassName.js +0 -0
  151. package/src/{lib/components → components}/Popover/_theme.scss +0 -0
  152. package/src/{lib/components → components}/Popover/index.js +0 -0
  153. package/src/{lib/components → components}/Radio/index.js +0 -0
  154. package/src/{lib/components → components}/ScrollView/ScrollView.scss +0 -0
  155. package/src/{lib/components → components}/ScrollView/_helpers/getElementsPositionDifference.js +0 -0
  156. package/src/{lib/components → components}/ScrollView/_hooks/useLoadResizeHook.js +0 -0
  157. package/src/{lib/components → components}/ScrollView/_hooks/useScrollPositionHook.js +0 -0
  158. package/src/{lib/components → components}/ScrollView/index.js +0 -0
  159. package/src/{lib/components → components}/SelectField/SelectField.jsx +0 -0
  160. package/src/{lib/components → components}/SelectField/SelectField.scss +0 -0
  161. package/src/{lib/components → components}/SelectField/_components/Option/Option.jsx +0 -0
  162. package/src/{lib/components → components}/SelectField/_components/Option/index.js +0 -0
  163. package/src/{lib/components → components}/SelectField/index.js +0 -0
  164. package/src/{lib/components → components}/Table/Table.scss +0 -0
  165. package/src/{lib/components → components}/Table/_components/TableBodyCell/TableBodyCell.jsx +0 -0
  166. package/src/{lib/components → components}/Table/_components/TableBodyCell/index.js +0 -0
  167. package/src/{lib/components → components}/Table/_components/TableCell.scss +0 -0
  168. package/src/{lib/components → components}/Table/_components/TableHeaderCell/index.js +0 -0
  169. package/src/{lib/components → components}/Table/_settings.scss +0 -0
  170. package/src/{lib/components → components}/Table/index.js +0 -0
  171. package/src/{lib/components → components}/Tabs/Tabs.jsx +0 -0
  172. package/src/{lib/components → components}/Tabs/Tabs.scss +0 -0
  173. package/src/{lib/components → components}/Tabs/TabsItem.scss +0 -0
  174. package/src/{lib/components → components}/Tabs/_theme.scss +0 -0
  175. package/src/{lib/components → components}/Tabs/index.js +0 -0
  176. package/src/{lib/components → components}/Text/Text.jsx +0 -0
  177. package/src/{lib/components → components}/Text/Text.scss +0 -0
  178. package/src/{lib/components → components}/Text/_helpers/getRootClampClassName.js +0 -0
  179. package/src/{lib/components → components}/Text/_helpers/getRootHyphensClassName.js +0 -0
  180. package/src/{lib/components → components}/Text/_helpers/getRootWordWrappingClassName.js +0 -0
  181. package/src/{lib/components → components}/Text/index.js +0 -0
  182. package/src/{lib/components → components}/TextArea/TextArea.jsx +0 -0
  183. package/src/{lib/components → components}/TextArea/TextArea.scss +0 -0
  184. package/src/{lib/components → components}/TextArea/index.js +0 -0
  185. package/src/{lib/components → components}/TextField/TextField.jsx +0 -0
  186. package/src/{lib/components → components}/TextField/TextField.scss +0 -0
  187. package/src/{lib/components → components}/TextField/index.js +0 -0
  188. package/src/{lib/components → components}/TextLink/TextLink.jsx +1 -1
  189. /package/src/{lib/components → components}/TextLink/TextLink.scss +0 -0
  190. /package/src/{lib/components → components}/TextLink/_theme.scss +0 -0
  191. /package/src/{lib/components → components}/TextLink/index.js +0 -0
  192. /package/src/{lib/components → components}/Toggle/Toggle.jsx +0 -0
  193. /package/src/{lib/components → components}/Toggle/Toggle.scss +0 -0
  194. /package/src/{lib/components → components}/Toggle/index.js +0 -0
  195. /package/src/{lib/components → components}/Toolbar/Toolbar.jsx +0 -0
  196. /package/src/{lib/components → components}/Toolbar/Toolbar.scss +0 -0
  197. /package/src/{lib/components → components}/Toolbar/ToolbarGroup.jsx +0 -0
  198. /package/src/{lib/components → components}/Toolbar/ToolbarItem.jsx +0 -0
  199. /package/src/{lib/components → components}/Toolbar/_helpers/getJustifyClassName.js +0 -0
  200. /package/src/{lib/components → components}/Toolbar/_theme.scss +0 -0
  201. /package/src/{lib/components → components}/Toolbar/index.js +0 -0
  202. /package/src/{lib/components → components}/_helpers/getRootColorClassName.js +0 -0
  203. /package/src/{lib/components → components}/_helpers/getRootSizeClassName.js +0 -0
  204. /package/src/{lib/components → components}/_helpers/getRootValidationStateClassName.js +0 -0
  205. /package/src/{lib/components → components}/_helpers/isChildrenEmpty.js +0 -0
  206. /package/src/{lib/components → components}/_helpers/resolveContextOrProp.js +0 -0
  207. /package/src/{lib/components → components}/_helpers/transferProps.js +0 -0
  208. /package/src/{lib/foundation.scss → foundation.scss} +0 -0
  209. /package/src/{lib/helpers.scss → helpers.scss} +0 -0
  210. /package/src/{lib/provider → provider}/RUIContext.jsx +0 -0
  211. /package/src/{lib/provider → provider}/index.js +0 -0
  212. /package/src/{lib/provider → provider}/withGlobalProps.jsx +0 -0
  213. /package/src/{lib/styles → styles}/_utilities.scss +0 -0
  214. /package/src/{lib/styles → styles}/elements/_code.scss +0 -0
  215. /package/src/{lib/styles → styles}/elements/_links.scss +0 -0
  216. /package/src/{lib/styles → styles}/elements/_lists.scss +0 -0
  217. /package/src/{lib/styles → styles}/elements/_page.scss +0 -0
  218. /package/src/{lib/styles → styles}/elements/_rulers.scss +0 -0
  219. /package/src/{lib/styles → styles}/elements/_small.scss +0 -0
  220. /package/src/{lib/styles → styles}/generic/_box-sizing.scss +0 -0
  221. /package/src/{lib/styles → styles}/generic/_focus.scss +0 -0
  222. /package/src/{lib/styles → styles}/generic/_forms.scss +0 -0
  223. /package/src/{lib/styles → styles}/generic/_reset.scss +0 -0
  224. /package/src/{lib/styles → styles}/generic/_shared.scss +0 -0
  225. /package/src/{lib/styles → styles}/helpers/_animation.scss +0 -0
  226. /package/src/{lib/styles → styles}/settings/_animations.scss +0 -0
  227. /package/src/{lib/styles → styles}/settings/_breakpoints.scss +0 -0
  228. /package/src/{lib/styles → styles}/settings/_escaped-characters.scss +0 -0
  229. /package/src/{lib/styles → styles}/settings/_form-fields.scss +0 -0
  230. /package/src/{lib/styles → styles}/settings/_forms.scss +0 -0
  231. /package/src/{lib/styles → styles}/settings/_utilities.scss +0 -0
  232. /package/src/{lib/styles → styles}/settings/_z-indexes.scss +0 -0
  233. /package/src/{lib/styles → styles}/theme/_accessibility.scss +0 -0
  234. /package/src/{lib/styles → styles}/theme/_borders.scss +0 -0
  235. /package/src/{lib/styles → styles}/theme/_code.scss +0 -0
  236. /package/src/{lib/styles → styles}/theme/_form-fields.scss +0 -0
  237. /package/src/{lib/styles → styles}/theme/_links.scss +0 -0
  238. /package/src/{lib/styles → styles}/theme/_lists.scss +0 -0
  239. /package/src/{lib/styles → styles}/theme/_page.scss +0 -0
  240. /package/src/{lib/styles → styles}/theme/_spacing.scss +0 -0
  241. /package/src/{lib/styles → styles}/theme/_typography.scss +0 -0
  242. /package/src/{lib/styles → styles}/theme-constants/_breakpoints.scss +0 -0
  243. /package/src/{lib/styles → styles}/theme-constants/_colors.scss +0 -0
  244. /package/src/{lib/styles → styles}/theme-constants/_svg.scss +0 -0
  245. /package/src/{lib/styles → styles}/tools/_accessibility.scss +0 -0
  246. /package/src/{lib/styles → styles}/tools/_breakpoint.scss +0 -0
  247. /package/src/{lib/styles → styles}/tools/_colors.scss +0 -0
  248. /package/src/{lib/styles → styles}/tools/_reset.scss +0 -0
  249. /package/src/{lib/styles → styles}/tools/_scrollbar.scss +0 -0
  250. /package/src/{lib/styles → styles}/tools/_spacing.scss +0 -0
  251. /package/src/{lib/styles → styles}/tools/_string.scss +0 -0
  252. /package/src/{lib/styles → styles}/tools/_svg.scss +0 -0
  253. /package/src/{lib/styles → styles}/tools/_transition.scss +0 -0
  254. /package/src/{lib/styles → styles}/tools/_utilities.scss +0 -0
  255. /package/src/{lib/styles → styles}/tools/form-fields/_box-field-layout.scss +0 -0
  256. /package/src/{lib/styles → styles}/tools/form-fields/_box-field-sizes.scss +0 -0
  257. /package/src/{lib/styles → styles}/tools/form-fields/_foundation.scss +0 -0
  258. /package/src/{lib/styles → styles}/tools/form-fields/_inline-field-layout.scss +0 -0
  259. /package/src/{lib/styles → styles}/tools/form-fields/_variants.scss +0 -0
  260. /package/src/{lib/translations → translations}/en.js +0 -0
  261. /package/src/{lib/utils → utils}/classNames.js +0 -0
@@ -0,0 +1,281 @@
1
+ # Grid
2
+
3
+ The responsive Grid layout aligns content into an organized grid.
4
+
5
+ ## Basic Usage
6
+
7
+ To implement the Grid component, you need to import it first:
8
+
9
+ ```js
10
+ import { Grid } from '@react-ui-org/react-ui';
11
+ ```
12
+
13
+ And use it:
14
+
15
+ ```docoff-react-preview
16
+ <Grid>
17
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
18
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
19
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
20
+ </Grid>
21
+ ```
22
+
23
+ See [API](#api) for all available options.
24
+
25
+ ## General Guidelines
26
+
27
+ - This component implements the native [CSS grid layout][grid-layout], a
28
+ powerful tool for two-dimensional layouts. You may use any value accepted by
29
+ [grid-template-columns], [grid-template-rows], [grid-auto-flow],
30
+ [align-content], [align-items], [justify-content], [justify-items], and CSS
31
+ properties in corresponding API options of the component.
32
+
33
+ - To align your items in the grid, **simply wrap** them with the Grid
34
+ component. Unlike other grid frameworks and UI libraries, **no additional
35
+ markup** like GridItem or Cell is necessary for your items. But it's there
36
+ when you really need it—see [Advanced Layouts](#advanced-layouts).
37
+
38
+ - For forms, use rather the [FormLayout](/components/FormLayout) component
39
+ which is designed specifically for that purpose.
40
+
41
+ - The Grid component is so powerful that it enables you to build even very
42
+ advanced layouts **without** having to write **a single line of custom CSS.**
43
+ See [Advanced Layouts](#advanced-layouts) for more.
44
+
45
+ 👉 Vertical margin of items inside Grid is reset to zero.
46
+
47
+ ## Columns
48
+
49
+ Stack is the default outcome of Grid. Use the `columns` option to organize your
50
+ items into a grid.
51
+
52
+ ```docoff-react-preview
53
+ <Grid columns="1fr 1fr 1fr">
54
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
55
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
56
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
57
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
58
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
59
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
60
+ </Grid>
61
+ ```
62
+
63
+ You can use the [`repeat()`][repeat] function to specify a recurring pattern.
64
+
65
+ ```docoff-react-preview
66
+ <Grid columns="repeat(3, 1fr)">
67
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
68
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
69
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
70
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
71
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
72
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
73
+ </Grid>
74
+ ```
75
+
76
+ Combine `repeat()` with `auto-fit` and [`minmax()`][minmax] to build automatic
77
+ responsive layouts.
78
+
79
+ ```docoff-react-preview
80
+ <Grid columns="repeat(auto-fit, minmax(200px, auto))">
81
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
82
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
83
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
84
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
85
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
86
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
87
+ </Grid>
88
+ ```
89
+
90
+ 👉 If you need your items to have **equal height** even with the content of
91
+ varying lengths, it may be necessary to set `height: 100%` on them.
92
+
93
+ ## Rows
94
+
95
+ Use `columns` and `rows` to specify a more complicated grid layout.
96
+
97
+ ```docoff-react-preview
98
+ <Grid columns="1fr 2fr" rows="auto 200px auto">
99
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
100
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
101
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
102
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
103
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
104
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
105
+ </Grid>
106
+ ```
107
+
108
+ ## Gaps
109
+
110
+ Both column and row gaps can be customized. The value must correspond to any of
111
+ [available spacings](/docs/foundation/spacing).
112
+
113
+ ```docoff-react-preview
114
+ <Grid columns="repeat(3, 1fr)" columnGap={2} rowGap={6}>
115
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
116
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
117
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
118
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
119
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
120
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
121
+ </Grid>
122
+ ```
123
+
124
+ ## Alignment
125
+
126
+ Individual items and the entire grid content can be aligned along both axes.
127
+
128
+ ```docoff-react-preview
129
+ <Grid
130
+ columns="repeat(3, 10em)"
131
+ alignItems="center"
132
+ justifyItems="center"
133
+ justifyContent="center"
134
+ >
135
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
136
+ <docoff-placeholder bordered>Grid item<br /> with two lines</docoff-placeholder>
137
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
138
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
139
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
140
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
141
+ </Grid>
142
+ ```
143
+
144
+ ## Custom HTML Tag
145
+
146
+ To render as a list, for example, just change the output `tag` to `ul` or `ol`
147
+ and wrap your items with `<li>`.
148
+
149
+ ```docoff-react-preview
150
+ <Grid tag="ul">
151
+ <li>
152
+ <docoff-placeholder bordered>List item</docoff-placeholder>
153
+ </li>
154
+ <li>
155
+ <docoff-placeholder bordered>List item</docoff-placeholder>
156
+ </li>
157
+ <li>
158
+ <docoff-placeholder bordered>List item</docoff-placeholder>
159
+ </li>
160
+ </Grid>
161
+ ```
162
+
163
+ ## Media Queries
164
+
165
+ If you need to build more complicated layouts, you have full control over the
166
+ grid definition. Just specify your grid layout for
167
+ [breakpoints](/docs/foundation/breakpoints) where a change of layout is needed.
168
+ The Grid component is written with the mobile-first approach so values for small
169
+ breakpoints are used until they're overridden by a bigger breakpoint.
170
+
171
+ 👉 With this syntax there are no defaults for individual breakpoints.
172
+
173
+ 📐 Try resizing your browser to see how it works.
174
+
175
+ ```docoff-react-preview
176
+ <Grid
177
+ columns={{
178
+ xs: '1fr',
179
+ md: '1fr 2fr',
180
+ }}
181
+ columnGap={{
182
+ xs: 4,
183
+ md: 2,
184
+ lg: 4,
185
+ }}
186
+ rows={{
187
+ xs: 'auto auto 200px 200px',
188
+ md: 'auto 200px auto',
189
+ }}
190
+ rowGap={{
191
+ xs: 3,
192
+ md: 4,
193
+ }}
194
+ >
195
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
196
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
197
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
198
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
199
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
200
+ <docoff-placeholder bordered>Grid item</docoff-placeholder>
201
+ </Grid>
202
+ ```
203
+
204
+ ## Advanced Layouts
205
+
206
+ Wrap your content with the GridSpan component to span it over multiple
207
+ columns or rows. Use the `autoFlow` option to control the layout when combined
208
+ with responsive columns and rows.
209
+
210
+ ```docoff-react-preview
211
+ <Grid
212
+ autoFlow={{
213
+ xs: 'row dense',
214
+ sm: 'column',
215
+ }}
216
+ columns={{
217
+ xs: 'repeat(2, 1fr)',
218
+ sm: 'repeat(4, 1fr)',
219
+ }}
220
+ rows={{
221
+ xs: 'repeat(8, 50px)',
222
+ sm: 'auto 100px auto auto',
223
+ }}
224
+ >
225
+ <docoff-placeholder bordered>Grid item 1</docoff-placeholder>
226
+ <docoff-placeholder bordered>Grid item 2</docoff-placeholder>
227
+ <docoff-placeholder bordered>Grid item 3</docoff-placeholder>
228
+ <docoff-placeholder bordered>Grid item 4</docoff-placeholder>
229
+ <docoff-placeholder bordered>Grid item 5</docoff-placeholder>
230
+ <GridSpan columns={2} rows={2}>
231
+ <docoff-placeholder bordered height="100%">
232
+ Grid item spanning over two lines and two rows
233
+ </docoff-placeholder>
234
+ </GridSpan>
235
+ <docoff-placeholder bordered>Grid item 6</docoff-placeholder>
236
+ <docoff-placeholder bordered>Grid item 7</docoff-placeholder>
237
+ <docoff-placeholder bordered>Grid item 8</docoff-placeholder>
238
+ <docoff-placeholder bordered>Grid item 9</docoff-placeholder>
239
+ <docoff-placeholder bordered>Grid item 10</docoff-placeholder>
240
+ <docoff-placeholder bordered>Grid item 11</docoff-placeholder>
241
+ <docoff-placeholder bordered>Grid item 12</docoff-placeholder>
242
+ </Grid>
243
+ ```
244
+
245
+ 👉 `autoFlow` (used in the example above) implements the `grid-auto-flow` CSS
246
+ property. Check [MDN][grid-auto-flow] to fully understand available options.
247
+
248
+ ## Forwarding HTML Attributes
249
+
250
+ In addition to the options below in the [component's API](#api) section, you
251
+ can specify [React synthetic events] or **any HTML attribute you like.** All
252
+ attributes that don't interfere with the API are forwarded to the HTML element
253
+ of your choice provided by `tag`, which is `<div>` by default. It enables making
254
+ the component interactive and helps to improve its accessibility.
255
+
256
+ 👉 Refer to the MDN reference for the full list of supported attributes of the
257
+ [div] element or [any other][all-html-elements] element of your choice.
258
+
259
+ ## API
260
+
261
+ <docoff-react-props src="/components/Grid/Grid.jsx"></docoff-react-props>
262
+
263
+ ### GridSpan API
264
+
265
+ Wrapper for content that should span multiple rows or columns.
266
+
267
+ <docoff-react-props src="/components/Grid/GridSpan.jsx"></docoff-react-props>
268
+
269
+ [grid-layout]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout
270
+ [grid-template-columns]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns
271
+ [grid-template-rows]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-rows
272
+ [grid-auto-flow]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow
273
+ [align-content]: https://developer.mozilla.org/en-US/docs/Web/CSS/align-content
274
+ [align-items]: https://developer.mozilla.org/en-US/docs/Web/CSS/align-items
275
+ [justify-content]: https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content
276
+ [justify-items]: https://developer.mozilla.org/en-US/docs/Web/CSS/justify-items
277
+ [repeat]: https://developer.mozilla.org/en-US/docs/Web/CSS/repeat
278
+ [minmax]: https://developer.mozilla.org/en-US/docs/Web/CSS/minmax
279
+ [React synthetic events]: https://reactjs.org/docs/events.html
280
+ [div]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
281
+ [all-html-elements]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element
@@ -1,5 +1,8 @@
1
1
  import PropTypes from 'prop-types';
2
- import React, { useContext } from 'react';
2
+ import React, {
3
+ useContext,
4
+ useMemo,
5
+ } from 'react';
3
6
  import { Text } from '../Text';
4
7
  import { withGlobalProps } from '../../provider';
5
8
  import { classNames } from '../../utils/classNames';
@@ -19,11 +22,17 @@ export const InputGroup = ({
19
22
  isLabelVisible,
20
23
  label,
21
24
  layout,
25
+ required,
22
26
  size,
23
27
  validationTexts,
24
28
  ...restProps
25
29
  }) => {
26
30
  const formLayoutContext = useContext(FormLayoutContext);
31
+ const inputGroupContextValue = useMemo(() => ({
32
+ disabled,
33
+ layout,
34
+ size,
35
+ }), [disabled, layout, size]);
27
36
 
28
37
  if (isChildrenEmpty(children)) {
29
38
  return null;
@@ -42,7 +51,6 @@ export const InputGroup = ({
42
51
  return (
43
52
  <fieldset
44
53
  {...transferProps(restProps)}
45
- id={id}
46
54
  className={classNames(
47
55
  styles.root,
48
56
  formLayoutContext && styles.isRootInFormLayout,
@@ -50,10 +58,12 @@ export const InputGroup = ({
50
58
  ? styles.isRootLayoutHorizontal
51
59
  : styles.isRootLayoutVertical,
52
60
  disabled && styles.isRootDisabled,
61
+ required && styles.isRootRequired,
53
62
  getRootSizeClassName(size, styles),
54
63
  getRootValidationStateClassName(validationState, styles),
55
64
  )}
56
65
  disabled={disabled}
66
+ id={id}
57
67
  >
58
68
  <legend
59
69
  className={styles.legend}
@@ -61,28 +71,21 @@ export const InputGroup = ({
61
71
  >
62
72
  {label}
63
73
  </legend>
64
- <div
65
- aria-hidden
66
- className={classNames(
67
- styles.label,
68
- !isLabelVisible && styles.isLabelHidden,
69
- )}
70
- id={id && `${id}__displayLabel`}
71
- >
72
- {label}
73
- </div>
74
+ {isLabelVisible && (
75
+ <div
76
+ aria-hidden
77
+ className={styles.label}
78
+ id={id && `${id}__displayLabel`}
79
+ >
80
+ {label}
81
+ </div>
82
+ )}
74
83
  <div className={styles.field}>
75
84
  <div
76
85
  className={styles.inputGroup}
77
86
  id={id && `${id}__group`}
78
87
  >
79
- <InputGroupContext.Provider
80
- value={{
81
- disabled,
82
- layout,
83
- size,
84
- }}
85
- >
88
+ <InputGroupContext.Provider value={inputGroupContextValue}>
86
89
  {children}
87
90
  </InputGroupContext.Provider>
88
91
  </div>
@@ -111,6 +114,7 @@ InputGroup.defaultProps = {
111
114
  id: undefined,
112
115
  isLabelVisible: true,
113
116
  layout: 'vertical',
117
+ required: false,
114
118
  size: 'medium',
115
119
  validationTexts: null,
116
120
  };
@@ -155,6 +159,11 @@ InputGroup.propTypes = {
155
159
  * as the value is inherited in such case.
156
160
  */
157
161
  layout: PropTypes.oneOf(['horizontal', 'vertical']),
162
+ /**
163
+ * If `true`, the `InputGroup`'s label appears as required. Underlying `<fieldset>`
164
+ * element does not take `required` attribute so there is no functional effect.
165
+ */
166
+ required: PropTypes.bool,
158
167
  /**
159
168
  * Size of the `children` elements.
160
169
  */
@@ -41,6 +41,10 @@
41
41
  @include foundation.help-text();
42
42
  }
43
43
 
44
+ .isRootRequired .label {
45
+ @include foundation.label-required();
46
+ }
47
+
44
48
  // States
45
49
  .isRootStateInvalid {
46
50
  @include variants.validation(invalid);
@@ -54,11 +58,6 @@
54
58
  @include variants.validation(warning);
55
59
  }
56
60
 
57
- // Invisible label
58
- .isLabelHidden {
59
- @include accessibility.hide-text();
60
- }
61
-
62
61
  // Layouts
63
62
  .isRootLayoutVertical,
64
63
  .isRootLayoutHorizontal {