@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,359 @@
1
+ # Toolbar
2
+
3
+ The responsive Toolbar layout is a versatile tool that allows spacing, grouping,
4
+ and aligning inline items.
5
+
6
+ ## Basic Usage
7
+
8
+ To implement the Toolbar component, you need to import it first:
9
+
10
+ ```js
11
+ import { Toolbar, ToolbarItem } from '@react-ui-org/react-ui';
12
+ ```
13
+
14
+ And use it:
15
+
16
+ ```docoff-react-preview
17
+ <Toolbar>
18
+ <ToolbarItem>
19
+ <docoff-placeholder bordered>Toolbar item</docoff-placeholder>
20
+ </ToolbarItem>
21
+ <ToolbarItem>
22
+ <docoff-placeholder bordered>Toolbar item</docoff-placeholder>
23
+ </ToolbarItem>
24
+ <ToolbarItem>
25
+ <docoff-placeholder bordered>Toolbar item</docoff-placeholder>
26
+ </ToolbarItem>
27
+ </Toolbar>
28
+ ```
29
+
30
+ See [API](#api) for all available options.
31
+
32
+ ## General Guidelines
33
+
34
+ - **Toolbar is great for flexible inline layouts.** For stacking your content
35
+ vertically or building two-dimensional layouts head to the [Grid][grid]
36
+ layout.
37
+
38
+ - **Wrap your items** into the ToolbarItem component. This ensures your content
39
+ is properly spaced and aligned with other Toolbar elements. Do **not** try to
40
+ put any custom HTML or React components directly into the Toolbar layout
41
+ without wrapping it with the ToolbarItem first.
42
+
43
+ - **Be careful with using Toolbar with long or dynamic items in narrow
44
+ containers.** Toolbar intentionally prevents its items from shrinking using
45
+ `flex: none` which may cause overflow in case of lack of horizontal space.
46
+ Depending on your situation, consider turning on the `nowrap` option
47
+ (which allows shrinking of items but disables Toolbar from wrapping), using
48
+ the [Text][text] component to precisely control text wrapping, or switching to
49
+ the [Grid][grid] layout.
50
+
51
+ ## Alignment
52
+
53
+ You can tweak your Toolbar layout using rich alignment options, both in
54
+ horizontal and vertical direction.
55
+
56
+ 👉 At the current stage of development, React UI is **RTL aware** so switching
57
+ to a fully RTL-compatible behavior in the future should be painless. That's why
58
+ the justification values are called rather `start` than `left` and `end` instead
59
+ of `right`.
60
+
61
+ ```docoff-react-preview
62
+ React.createElement(() => {
63
+ const [alignment, setAlignment] = React.useState('top');
64
+ const [justification, setJustification] = React.useState('start');
65
+ return (
66
+ <div>
67
+ <Toolbar>
68
+ <ToolbarGroup align="baseline">
69
+ <ToolbarItem>
70
+ <span id="alignment-label">Alignment:</span>
71
+ </ToolbarItem>
72
+ <ToolbarItem>
73
+ <ButtonGroup aria-labelledby="alignment-label" priority="outline">
74
+ <Button
75
+ aria-pressed={alignment === 'top'}
76
+ color={alignment === 'top' ? 'selected' : 'secondary'}
77
+ label="top"
78
+ onClick={() => setAlignment('top')}
79
+ />
80
+ <Button
81
+ aria-pressed={alignment === 'middle'}
82
+ color={alignment === 'middle' ? 'selected' : 'secondary'}
83
+ label="middle"
84
+ onClick={() => setAlignment('middle')}
85
+ />
86
+ <Button
87
+ aria-pressed={alignment === 'bottom'}
88
+ color={alignment === 'bottom' ? 'selected' : 'secondary'}
89
+ label="bottom"
90
+ onClick={() => setAlignment('bottom')}
91
+ />
92
+ <Button
93
+ aria-pressed={alignment === 'baseline'}
94
+ color={alignment === 'baseline' ? 'selected' : 'secondary'}
95
+ label="baseline"
96
+ onClick={() => setAlignment('baseline')}
97
+ />
98
+ </ButtonGroup>
99
+ </ToolbarItem>
100
+ </ToolbarGroup>
101
+ <ToolbarGroup align="baseline">
102
+ <ToolbarItem>
103
+ <span id="justification-label">Justification:</span>
104
+ </ToolbarItem>
105
+ <ToolbarItem>
106
+ <ButtonGroup aria-labelledby="justification-label" priority="outline">
107
+ <Button
108
+ aria-pressed={justification === 'start'}
109
+ color={justification === 'start' ? 'selected' : 'secondary'}
110
+ label="start"
111
+ onClick={() => setJustification('start')}
112
+ />
113
+ <Button
114
+ aria-pressed={justification === 'center'}
115
+ color={justification === 'center' ? 'selected' : 'secondary'}
116
+ label="center"
117
+ onClick={() => setJustification('center')}
118
+ />
119
+ <Button
120
+ aria-pressed={justification === 'end'}
121
+ color={justification === 'end' ? 'selected' : 'secondary'}
122
+ label="end"
123
+ onClick={() => setJustification('end')}
124
+ />
125
+ <Button
126
+ aria-pressed={justification === 'space-between'}
127
+ color={justification === 'space-between' ? 'selected' : 'secondary'}
128
+ label="space-between"
129
+ onClick={() => setJustification('space-between')}
130
+ />
131
+ </ButtonGroup>
132
+ </ToolbarItem>
133
+ </ToolbarGroup>
134
+ </Toolbar>
135
+ <Toolbar align={alignment} justify={justification}>
136
+ <ToolbarItem>
137
+ <docoff-placeholder bordered>First item</docoff-placeholder>
138
+ </ToolbarItem>
139
+ <ToolbarItem>
140
+ <docoff-placeholder bordered>
141
+ Second item<br />
142
+ is taller
143
+ </docoff-placeholder>
144
+ </ToolbarItem>
145
+ <ToolbarItem>
146
+ <docoff-placeholder bordered>Third item</docoff-placeholder>
147
+ </ToolbarItem>
148
+ </Toolbar>
149
+ </div>
150
+ );
151
+ });
152
+ ```
153
+
154
+ ## Groups
155
+
156
+ Toolbar items can be grouped which enables you aligning related items together.
157
+ To provide the best possible flexibility for building your layout, the
158
+ ToolbarGroup allows you to set many options similar to the Toolbar: vertical
159
+ alignment, [dense spacing](#dense-layout), or [disable wrapping](#wrapping).
160
+
161
+ ```docoff-react-preview
162
+ <Toolbar justify="space-between">
163
+ <ToolbarGroup>
164
+ <ToolbarItem>
165
+ <docoff-placeholder bordered>Group A</docoff-placeholder>
166
+ </ToolbarItem>
167
+ <ToolbarItem>
168
+ <docoff-placeholder bordered>Group A</docoff-placeholder>
169
+ </ToolbarItem>
170
+ </ToolbarGroup>
171
+ <ToolbarGroup align="middle">
172
+ <ToolbarItem>
173
+ <docoff-placeholder bordered>Group B</docoff-placeholder>
174
+ </ToolbarItem>
175
+ <ToolbarItem>
176
+ <docoff-placeholder bordered>Group B</docoff-placeholder>
177
+ </ToolbarItem>
178
+ </ToolbarGroup>
179
+ <ToolbarItem>
180
+ <docoff-placeholder bordered>Item</docoff-placeholder>
181
+ </ToolbarItem>
182
+ </Toolbar>
183
+ ```
184
+
185
+ ## Dense Layout
186
+
187
+ Sometimes it's useful to get related items even closer together. This can be
188
+ easily achieved through the `dense` option which can be applied on individual
189
+ toolbar groups, or on the entire toolbar.
190
+
191
+ ```docoff-react-preview
192
+ React.createElement(() => {
193
+ const [isGroupDense, setIsGroupDense] = React.useState(false);
194
+ const [isToolbarDense, setIsToolbarDense] = React.useState(false);
195
+ return (
196
+ <div>
197
+ <Toolbar>
198
+ <ToolbarItem>
199
+ <CheckboxField
200
+ checked={isGroupDense}
201
+ label="Dense ToolbarGroup"
202
+ onChange={(e) => setIsGroupDense(e.target.checked)}
203
+ />
204
+ </ToolbarItem>
205
+ <ToolbarItem>
206
+ <CheckboxField
207
+ checked={isToolbarDense}
208
+ label="Dense Toolbar"
209
+ onChange={(e) => setIsToolbarDense(e.target.checked)}
210
+ />
211
+ </ToolbarItem>
212
+ </Toolbar>
213
+ <Toolbar dense={isToolbarDense}>
214
+ <ToolbarGroup dense={isGroupDense}>
215
+ <ToolbarItem>
216
+ <docoff-placeholder bordered>Group item</docoff-placeholder>
217
+ </ToolbarItem>
218
+ <ToolbarItem>
219
+ <docoff-placeholder bordered>Group item</docoff-placeholder>
220
+ </ToolbarItem>
221
+ </ToolbarGroup>
222
+ <ToolbarItem>
223
+ <docoff-placeholder bordered>Standalone item</docoff-placeholder>
224
+ </ToolbarItem>
225
+ <ToolbarItem>
226
+ <docoff-placeholder bordered>Standalone item</docoff-placeholder>
227
+ </ToolbarItem>
228
+ </Toolbar>
229
+ </div>
230
+ );
231
+ });
232
+ ```
233
+
234
+ ## Wrapping
235
+
236
+ By default, all toolbar items are queued up one after another in a row. The
237
+ items automatically wrap and create a new row. To prevent this behavior, just
238
+ set the `nowrap` option on the Toolbar or on individual ToolbarGroups. Note that
239
+ ToolbarGroups can still wrap when the wrapping is disabled just on their parent
240
+ Toolbar.
241
+
242
+ ```docoff-react-preview
243
+ <p>Disabled wrapping on entire toolbar:</p>
244
+ <Toolbar justify="space-between" nowrap>
245
+ <ToolbarGroup>
246
+ <ToolbarItem>
247
+ <docoff-placeholder bordered>Group A</docoff-placeholder>
248
+ </ToolbarItem>
249
+ <ToolbarItem>
250
+ <docoff-placeholder bordered>Group A</docoff-placeholder>
251
+ </ToolbarItem>
252
+ </ToolbarGroup>
253
+ <ToolbarGroup>
254
+ <ToolbarItem>
255
+ <docoff-placeholder bordered>Group B</docoff-placeholder>
256
+ </ToolbarItem>
257
+ <ToolbarItem>
258
+ <docoff-placeholder bordered>Group B</docoff-placeholder>
259
+ </ToolbarItem>
260
+ </ToolbarGroup>
261
+ <ToolbarItem>
262
+ <docoff-placeholder bordered>Item</docoff-placeholder>
263
+ </ToolbarItem>
264
+ </Toolbar>
265
+ <p>Disabled wrapping on toolbar groups:</p>
266
+ <Toolbar justify="space-between">
267
+ <ToolbarGroup nowrap>
268
+ <ToolbarItem>
269
+ <docoff-placeholder bordered>Group A</docoff-placeholder>
270
+ </ToolbarItem>
271
+ <ToolbarItem>
272
+ <docoff-placeholder bordered>Group A</docoff-placeholder>
273
+ </ToolbarItem>
274
+ </ToolbarGroup>
275
+ <ToolbarGroup nowrap>
276
+ <ToolbarItem>
277
+ <docoff-placeholder bordered>Group B</docoff-placeholder>
278
+ </ToolbarItem>
279
+ <ToolbarItem>
280
+ <docoff-placeholder bordered>Group B</docoff-placeholder>
281
+ </ToolbarItem>
282
+ </ToolbarGroup>
283
+ <ToolbarItem>
284
+ <docoff-placeholder bordered>Item</docoff-placeholder>
285
+ </ToolbarItem>
286
+ </Toolbar>
287
+ ```
288
+
289
+ 👉 Depending on your situation, you may need to further control wrapping of text
290
+ content placed within Toolbar. The [Text][text] component is designed
291
+ specifically for this kind of job.
292
+
293
+ ## Flexible Items
294
+
295
+ Toolbar items can be made flexible to grow and shrink according to the available
296
+ space. This is useful e.g. when you need to combine text with an action:
297
+
298
+ ```docoff-react-preview
299
+ <Toolbar>
300
+ <ToolbarItem flexible>
301
+ <docoff-placeholder bordered>My Headline</docoff-placeholder>
302
+ </ToolbarItem>
303
+ <ToolbarItem>
304
+ <docoff-placeholder bordered>Action</docoff-placeholder>
305
+ </ToolbarItem>
306
+ </Toolbar>
307
+ ```
308
+
309
+ Or to build a classic media layout with image on the left and text on the right:
310
+
311
+ ```docoff-react-preview
312
+ <Toolbar>
313
+ <ToolbarItem>
314
+ <docoff-placeholder bordered>Media object</docoff-placeholder>
315
+ </ToolbarItem>
316
+ <ToolbarItem flexible>
317
+ <docoff-placeholder bordered>Media body</docoff-placeholder>
318
+ </ToolbarItem>
319
+ </Toolbar>
320
+ ```
321
+
322
+ ## Forwarding HTML Attributes
323
+
324
+ In addition to the options below in the [component's API](#api) section, you
325
+ can specify [React synthetic events] or **any HTML attribute you like.** All
326
+ attributes that don't interfere with the API are forwarded to the root `<div>`
327
+ HTML element. This enables making the component interactive and helps to improve
328
+ its accessibility.
329
+
330
+ 👉 Refer to the MDN reference for the full list of supported attributes of the
331
+ [div] element.
332
+
333
+ ## API
334
+
335
+ <docoff-react-props src="/components/Toolbar/Toolbar.jsx"></docoff-react-props>
336
+
337
+ ### ToolbarGroup API
338
+
339
+ A wrapper for grouping ToolbarItems together.
340
+
341
+ <docoff-react-props src="/components/Toolbar/ToolbarGroup.jsx"></docoff-react-props>
342
+
343
+ ### ToolbarItem API
344
+
345
+ A wrapper for individual toolbar items.
346
+
347
+ <docoff-react-props src="/components/Toolbar/ToolbarItem.jsx"></docoff-react-props>
348
+
349
+ ## Theming
350
+
351
+ | Custom Property | Description |
352
+ |------------------------------------------------------|--------------------------------------------------------------|
353
+ | `--rui-Toolbar__gap` | Gap between toolbar items |
354
+ | `--rui-Toolbar__gap--dense` | Dense gap between toolbar items |
355
+
356
+ [grid]: /components/Grid
357
+ [text]: /components/Text
358
+ [React synthetic events]: https://reactjs.org/docs/events.html
359
+ [div]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
@@ -1,19 +1,27 @@
1
1
  export const getAlignClassName = (value, styles, type) => {
2
2
  if (value === 'top') {
3
- if (type === 'group') return styles.isGroupAlignedToTop;
3
+ if (type === 'group') {
4
+ return styles.isGroupAlignedToTop;
5
+ }
4
6
  return styles.isToolbarAlignedToTop;
5
7
  }
6
8
 
7
9
  if (value === 'middle') {
8
- if (type === 'group') return styles.isGroupAlignedToMiddle;
10
+ if (type === 'group') {
11
+ return styles.isGroupAlignedToMiddle;
12
+ }
9
13
  return styles.isToolbarAlignedToMiddle;
10
14
  }
11
15
 
12
16
  if (value === 'bottom') {
13
- if (type === 'group') return styles.isGroupAlignedToBottom;
17
+ if (type === 'group') {
18
+ return styles.isGroupAlignedToBottom;
19
+ }
14
20
  return styles.isToolbarAlignedToBottom;
15
21
  }
16
22
 
17
- if (type === 'group') return styles.isGroupAlignedToBaseline;
23
+ if (type === 'group') {
24
+ return styles.isGroupAlignedToBaseline;
25
+ }
18
26
  return styles.isToolbarAlignedToBaseline;
19
27
  };
@@ -0,0 +1,15 @@
1
+ export default (priority, styles) => {
2
+ if (priority === 'filled') {
3
+ return styles.isRootPriorityFilled;
4
+ }
5
+
6
+ if (priority === 'outline') {
7
+ return styles.isRootPriorityOutline;
8
+ }
9
+
10
+ if (priority === 'flat') {
11
+ return styles.isRootPriorityFlat;
12
+ }
13
+
14
+ return null;
15
+ };
@@ -1,3 +1,9 @@
1
+ // Global definitions
2
+ // These need to be imported here to be placed in the distribution CSS file
3
+ import './theme.scss';
4
+ import './foundation.scss';
5
+ import './helpers.scss';
6
+
1
7
  // Components
2
8
  export { Alert } from './components/Alert';
3
9
  export { Badge } from './components/Badge';
@@ -1,5 +1,7 @@
1
1
  import PropTypes from 'prop-types';
2
- import React from 'react';
2
+ import React, {
3
+ useMemo,
4
+ } from 'react';
3
5
  import defaultTranslations from '../translations/en';
4
6
  import RUIContext from './RUIContext';
5
7
 
@@ -7,16 +9,20 @@ const RUIProvider = ({
7
9
  children,
8
10
  globalProps,
9
11
  translations,
10
- }) => (
11
- <RUIContext.Provider
12
- value={{
13
- globalProps,
14
- translations,
15
- }}
16
- >
17
- {children}
18
- </RUIContext.Provider>
19
- );
12
+ }) => {
13
+ const childProps = useMemo(() => ({
14
+ globalProps,
15
+ translations,
16
+ }), [globalProps, translations]);
17
+
18
+ return (
19
+ <RUIContext.Provider
20
+ value={childProps}
21
+ >
22
+ {children}
23
+ </RUIContext.Provider>
24
+ );
25
+ };
20
26
 
21
27
  RUIProvider.defaultProps = {
22
28
  children: null,
@@ -6,7 +6,7 @@
6
6
  height: 0.4375rem;
7
7
  border-width: 2px;
8
8
  border-style: none solid solid none;
9
- border-color: currentColor;
9
+ border-color: currentcolor;
10
10
  }
11
11
 
12
12
  @mixin rotate($rotate: 0) {
@@ -7,7 +7,7 @@
7
7
 
8
8
  @use "../../settings/form-fields" as settings;
9
9
  @use "../../theme/form-fields" as theme;
10
- @use "../../tools/caret";
10
+ @use "../caret";
11
11
  @use "../spacing";
12
12
  @use "../transition";
13
13
 
@@ -26,8 +26,12 @@
26
26
  // Reverted for full-width fields.
27
27
  //
28
28
  // 8. Grid settings are inherited from horizontal FormLayout and applied using `subgrid`.
29
- // A fallback is supplied to browsers that don't support `subgrid` yet. See FormLayout styles
30
- // for more.
29
+ // A fallback is supplied to browsers that don't support `subgrid` yet.
30
+ //
31
+ // Chrome 117+ supports `subgrid` but it doesn't work for `<fieldset>`. This is why we always
32
+ // use the fallback for `<fieldset>`.
33
+ //
34
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=1473242
31
35
  // https://github.com/react-ui-org/react-ui/issues/232
32
36
  //
33
37
  // 9. Help texts and validation messages can take up full width of FormLayout. There is no reason
@@ -180,7 +184,7 @@
180
184
  }
181
185
  }
182
186
 
183
- @mixin in-form-layout() {
187
+ @mixin in-form-layout($is-fieldset: false) {
184
188
  justify-self: start; // 12.
185
189
 
186
190
  .field {
@@ -192,19 +196,27 @@
192
196
  width: auto; // 11.
193
197
  }
194
198
 
195
- &.isRootLayoutHorizontal,
196
- &.isRootLayoutHorizontal.hasRootSmallInput {
197
- grid: inherit; // 8.
198
- grid-template-columns: subgrid; // 8.
199
- grid-column: span 2; // 8.
200
-
201
- @supports not (grid-template-columns: subgrid) {
202
- display: contents; // 8.
199
+ // 8.
200
+ @if $is-fieldset {
201
+ &.isRootLayoutHorizontal,
202
+ &.isRootLayoutHorizontal.hasRootSmallInput {
203
+ display: contents;
204
+ }
205
+ } @else {
206
+ &.isRootLayoutHorizontal,
207
+ &.isRootLayoutHorizontal.hasRootSmallInput {
208
+ grid: inherit;
209
+ grid-template-columns: subgrid;
210
+ grid-column: span 2;
211
+
212
+ @supports not (grid-template-columns: subgrid) {
213
+ display: contents;
214
+ }
203
215
  }
204
- }
205
216
 
206
- &.isRootLayoutHorizontal.isRootFullWidth {
207
- grid-template-columns: subgrid; // 8.
217
+ &.isRootLayoutHorizontal.isRootFullWidth {
218
+ grid-template-columns: subgrid;
219
+ }
208
220
  }
209
221
 
210
222
  &.isRootLayoutHorizontal .label,
@@ -11,7 +11,7 @@
11
11
 
12
12
  @use "../../theme/typography";
13
13
  @use "../../theme/form-fields" as theme;
14
- @use "../../tools/accessibility";
14
+ @use "../accessibility";
15
15
  @use "../transition";
16
16
 
17
17
  @mixin check-input($type) {
@@ -26,7 +26,7 @@
26
26
  background-size: contain;
27
27
  background-repeat: no-repeat;
28
28
  background-color: var(--rui-local-check-background-color);
29
- color-adjust: exact; // 1.
29
+ print-color-adjust: exact; // 1.
30
30
 
31
31
  &:focus,
32
32
  &:checked:focus {
@@ -4,7 +4,8 @@
4
4
  @use "styles/theme-constants/colors";
5
5
  @use "styles/theme-constants/svg";
6
6
 
7
- :root {
7
+ :root,
8
+ :host {
8
9
  // ============================================================================================ //
9
10
  // GLOBAL TOKENS //
10
11
  // ============================================================================================ //
@@ -717,7 +718,7 @@
717
718
  // ButtonGroup: filled buttons
718
719
  --rui-ButtonGroup--filled__gap: calc(-1 * var(--rui-Button__border-width));
719
720
  --rui-ButtonGroup--filled__separator__width: var(--rui-Button__border-width);
720
- --rui-ButtonGroup--filled__separator__color: currentColor;
721
+ --rui-ButtonGroup--filled__separator__color: currentcolor;
721
722
 
722
723
  // ButtonGroup: outline buttons
723
724
  --rui-ButtonGroup--outline__gap: calc(-1 * var(--rui-Button__border-width));
@@ -727,7 +728,7 @@
727
728
  // ButtonGroup: flat buttons
728
729
  --rui-ButtonGroup--flat__gap: var(--rui-Button__border-width);
729
730
  --rui-ButtonGroup--flat__separator__width: var(--rui-ButtonGroup--flat__gap);
730
- --rui-ButtonGroup--flat__separator__color: currentColor;
731
+ --rui-ButtonGroup--flat__separator__color: currentcolor;
731
732
 
732
733
  //
733
734
  // Card