@react-ui-org/react-ui 0.52.0 → 0.53.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. package/CODEOWNERS +23 -0
  2. package/README.md +10 -7
  3. package/dist/react-ui.css +42 -0
  4. package/dist/react-ui.js +1 -0
  5. package/package.json +64 -77
  6. package/src/{lib/components → components}/Alert/Alert.jsx +1 -1
  7. package/src/{lib/components/Alert/README.mdx → components/Alert/README.md} +84 -100
  8. package/src/{lib/components → components}/Badge/Badge.jsx +1 -1
  9. package/src/{lib/components → components}/Badge/Badge.scss +1 -1
  10. package/src/components/Badge/README.md +103 -0
  11. package/src/{lib/components → components}/Button/Button.jsx +1 -1
  12. package/src/components/Button/README.md +580 -0
  13. package/src/{lib/components → components}/ButtonGroup/ButtonGroup.jsx +11 -9
  14. package/src/{lib/components/ButtonGroup/README.mdx → components/ButtonGroup/README.md} +128 -134
  15. package/src/{lib/components → components}/Card/Card.jsx +1 -1
  16. package/src/components/Card/README.md +314 -0
  17. package/src/{lib/components/CheckboxField/README.mdx → components/CheckboxField/README.md} +96 -108
  18. package/src/{lib/components/FileInputField/README.mdx → components/FileInputField/README.md} +83 -95
  19. package/src/{lib/components → components}/FormLayout/FormLayout.jsx +4 -4
  20. package/src/components/FormLayout/README.md +462 -0
  21. package/src/{lib/components → components}/Grid/Grid.jsx +2 -2
  22. package/src/components/Grid/README.md +281 -0
  23. package/src/{lib/components → components}/InputGroup/InputGroup.jsx +20 -19
  24. package/src/{lib/components → components}/InputGroup/InputGroup.scss +1 -6
  25. package/src/{lib/components/InputGroup/README.mdx → components/InputGroup/README.md} +145 -163
  26. package/src/{lib/components → components}/Modal/Modal.jsx +6 -6
  27. package/src/components/Modal/README.md +1090 -0
  28. package/src/components/Modal/_hooks/useModalScrollPrevention.js +37 -0
  29. package/src/{lib/components/Paper/README.mdx → components/Paper/README.md} +18 -30
  30. package/src/{lib/components/Popover/README.mdx → components/Popover/README.md} +102 -132
  31. package/src/{lib/components/Radio/README.mdx → components/Radio/README.md} +122 -134
  32. package/src/{lib/components → components}/Radio/Radio.jsx +11 -12
  33. package/src/{lib/components → components}/Radio/Radio.scss +1 -6
  34. package/src/components/ScrollView/README.md +503 -0
  35. package/src/{lib/components → components}/ScrollView/ScrollView.jsx +12 -3
  36. package/src/components/SelectField/README.md +681 -0
  37. package/src/components/Table/README.md +259 -0
  38. package/src/{lib/components → components}/Table/Table.jsx +4 -1
  39. package/src/{lib/components → components}/Table/_components/TableHeaderCell/TableHeaderCell.jsx +1 -1
  40. package/src/{lib/components/Tabs/README.mdx → components/Tabs/README.md} +117 -134
  41. package/src/{lib/components → components}/Tabs/TabsItem.jsx +3 -3
  42. package/src/components/Text/README.md +220 -0
  43. package/src/components/TextArea/README.md +359 -0
  44. package/src/{lib/components/TextField/README.mdx → components/TextField/README.md} +336 -342
  45. package/src/{lib/components/TextLink/README.mdx → components/TextLink/README.md} +19 -31
  46. package/src/{lib/components/Toggle/README.mdx → components/Toggle/README.md} +98 -110
  47. package/src/components/Toolbar/README.md +359 -0
  48. package/src/{lib/components → components}/Toolbar/_helpers/getAlignClassName.js +12 -4
  49. package/src/components/_helpers/getRootPriorityClassName.js +15 -0
  50. package/src/{lib/index.js → index.js} +6 -0
  51. package/src/{lib/provider → provider}/RUIProvider.jsx +17 -11
  52. package/src/{lib/styles → styles}/tools/_caret.scss +1 -1
  53. package/src/{lib/styles → styles}/tools/form-fields/_box-field-elements.scss +1 -1
  54. package/src/{lib/styles → styles}/tools/form-fields/_box-field-layout.scss +26 -14
  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-sizes.scss +0 -0
  256. /package/src/{lib/styles → styles}/tools/form-fields/_foundation.scss +0 -0
  257. /package/src/{lib/styles → styles}/tools/form-fields/_inline-field-layout.scss +0 -0
  258. /package/src/{lib/styles → styles}/tools/form-fields/_variants.scss +0 -0
  259. /package/src/{lib/translations → translations}/en.js +0 -0
  260. /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';
@@ -24,6 +27,11 @@ export const InputGroup = ({
24
27
  ...restProps
25
28
  }) => {
26
29
  const formLayoutContext = useContext(FormLayoutContext);
30
+ const inputGroupContextValue = useMemo(() => ({
31
+ disabled,
32
+ layout,
33
+ size,
34
+ }), [disabled, layout, size]);
27
35
 
28
36
  if (isChildrenEmpty(children)) {
29
37
  return null;
@@ -42,7 +50,6 @@ export const InputGroup = ({
42
50
  return (
43
51
  <fieldset
44
52
  {...transferProps(restProps)}
45
- id={id}
46
53
  className={classNames(
47
54
  styles.root,
48
55
  formLayoutContext && styles.isRootInFormLayout,
@@ -54,6 +61,7 @@ export const InputGroup = ({
54
61
  getRootValidationStateClassName(validationState, styles),
55
62
  )}
56
63
  disabled={disabled}
64
+ id={id}
57
65
  >
58
66
  <legend
59
67
  className={styles.legend}
@@ -61,28 +69,21 @@ export const InputGroup = ({
61
69
  >
62
70
  {label}
63
71
  </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>
72
+ {isLabelVisible && (
73
+ <div
74
+ aria-hidden
75
+ className={styles.label}
76
+ id={id && `${id}__displayLabel`}
77
+ >
78
+ {label}
79
+ </div>
80
+ )}
74
81
  <div className={styles.field}>
75
82
  <div
76
83
  className={styles.inputGroup}
77
84
  id={id && `${id}__group`}
78
85
  >
79
- <InputGroupContext.Provider
80
- value={{
81
- disabled,
82
- layout,
83
- size,
84
- }}
85
- >
86
+ <InputGroupContext.Provider value={inputGroupContextValue}>
86
87
  {children}
87
88
  </InputGroupContext.Provider>
88
89
  </div>
@@ -54,11 +54,6 @@
54
54
  @include variants.validation(warning);
55
55
  }
56
56
 
57
- // Invisible label
58
- .isLabelHidden {
59
- @include accessibility.hide-text();
60
- }
61
-
62
57
  // Layouts
63
58
  .isRootLayoutVertical,
64
59
  .isRootLayoutHorizontal {
@@ -75,7 +70,7 @@
75
70
  }
76
71
 
77
72
  .isRootInFormLayout {
78
- @include box-field-layout.in-form-layout();
73
+ @include box-field-layout.in-form-layout($is-fieldset: true);
79
74
  }
80
75
 
81
76
  // Sizes