@react-ui-org/react-ui 0.52.0 → 0.53.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 (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