@react-ui-org/react-ui 0.42.0 → 0.44.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CONTRIBUTING.md +44 -25
- package/README.md +1 -1
- package/dist/lib.development.js +1598 -652
- package/dist/lib.js +1 -9
- package/package.json +49 -48
- package/src/lib/components/{ui/Alert → Alert}/Alert.jsx +17 -14
- package/src/lib/components/{ui/Alert → Alert}/Alert.scss +3 -3
- package/src/lib/components/{ui/Alert → Alert}/README.mdx +6 -6
- package/src/lib/components/{ui/Alert → Alert}/_settings.scss +1 -1
- package/src/lib/components/{ui/Alert → Alert}/_theme.scss +0 -0
- package/src/lib/components/{ui/Alert → Alert}/_tools.scss +0 -0
- package/src/lib/components/{ui/Alert → Alert}/index.js +0 -0
- package/src/lib/components/{ui/Badge → Badge}/Badge.jsx +2 -2
- package/src/lib/components/{ui/Badge → Badge}/Badge.scss +3 -3
- package/src/lib/components/{ui/Badge → Badge}/README.mdx +3 -3
- package/src/lib/components/{ui/Badge → Badge}/index.js +0 -0
- package/src/lib/components/Button/Button.jsx +198 -0
- package/src/lib/components/{ui/Button → Button}/Button.scss +0 -0
- package/src/lib/components/{ui/Button → Button}/README.mdx +160 -75
- package/src/lib/components/Button/_base.scss +148 -0
- package/src/lib/components/{ui/Button → Button}/_priorities.scss +0 -4
- package/src/lib/components/{ui/Button → Button}/_settings.scss +2 -3
- package/src/lib/components/{ui/Button → Button}/_theme.scss +3 -11
- package/src/lib/components/{ui/Button → Button}/_tools.scss +27 -44
- package/src/lib/components/Button/helpers/getRootLabelVisibilityClassName.js +33 -0
- package/src/lib/components/{ui/Button → Button}/helpers/getRootPriorityClassName.js +0 -4
- package/src/lib/components/{ui/Button → Button}/index.js +0 -0
- package/src/lib/components/{ui/ButtonGroup → ButtonGroup}/ButtonGroup.jsx +9 -11
- package/src/lib/components/{ui/ButtonGroup → ButtonGroup}/ButtonGroup.scss +0 -0
- package/src/lib/components/ButtonGroup/ButtonGroupContext.js +3 -0
- package/src/lib/components/{ui/ButtonGroup → ButtonGroup}/README.mdx +26 -2
- package/src/lib/components/ButtonGroup/index.js +2 -0
- package/src/lib/components/{layout/CTA → CTA}/CTA.jsx +5 -2
- package/src/lib/components/{layout/CTA → CTA}/CTA.scss +2 -2
- package/src/lib/components/{layout/CTA → CTA}/CTACenter.jsx +1 -1
- package/src/lib/components/{layout/CTA → CTA}/CTAEnd.jsx +1 -1
- package/src/lib/components/{layout/CTA → CTA}/CTAStart.jsx +1 -1
- package/src/lib/components/{layout/CTA → CTA}/README.mdx +3 -3
- package/src/lib/components/{layout/CTA → CTA}/index.js +0 -0
- package/src/lib/components/{ui/Card → Card}/Card.jsx +6 -4
- package/src/lib/components/{ui/Card → Card}/Card.scss +1 -1
- package/src/lib/components/{ui/Card → Card}/CardBody.jsx +1 -1
- package/src/lib/components/{ui/Card → Card}/CardFooter.jsx +1 -1
- package/src/lib/components/{ui/Card → Card}/README.mdx +2 -2
- package/src/lib/components/{ui/Card → Card}/_theme.scss +0 -0
- package/src/lib/components/{ui/Card → Card}/_tools.scss +0 -0
- package/src/lib/components/{ui/Card → Card}/index.js +0 -0
- package/src/lib/components/{layout/Center → Center}/Center.jsx +1 -1
- package/src/lib/components/{layout/Center → Center}/Center.scss +0 -0
- package/src/lib/components/{layout/Center → Center}/README.mdx +2 -2
- package/src/lib/components/{layout/Center → Center}/index.js +0 -0
- package/src/lib/components/CheckboxField/CheckboxField.jsx +164 -0
- package/src/lib/components/{ui/CheckboxField → CheckboxField}/CheckboxField.scss +5 -5
- package/src/lib/components/{ui/CheckboxField → CheckboxField}/README.mdx +15 -12
- package/src/lib/components/{ui/CheckboxField → CheckboxField}/index.js +0 -0
- package/src/lib/components/FileInputField/FileInputField.jsx +162 -0
- package/src/lib/components/{ui/FileInputField → FileInputField}/FileInputField.scss +5 -5
- package/src/lib/components/{ui/FileInputField → FileInputField}/README.mdx +8 -6
- package/src/lib/components/{ui/FileInputField → FileInputField}/index.js +0 -0
- package/src/lib/components/{layout/FormLayout → FormLayout}/FormLayout.jsx +16 -18
- package/src/lib/components/{layout/FormLayout → FormLayout}/FormLayout.scss +3 -3
- package/src/lib/components/FormLayout/FormLayoutContext.js +3 -0
- package/src/lib/components/{layout/FormLayout → FormLayout}/FormLayoutCustomField.jsx +33 -30
- package/src/lib/components/{layout/FormLayout → FormLayout}/FormLayoutCustomField.scss +4 -4
- package/src/lib/components/{layout/FormLayout → FormLayout}/README.mdx +30 -40
- package/src/lib/components/{layout/FormLayout → FormLayout}/_theme.scss +0 -0
- package/src/lib/components/{layout/FormLayout → FormLayout}/index.js +1 -0
- package/src/lib/components/{layout/Grid → Grid}/Grid.jsx +23 -5
- package/src/lib/components/{layout/Grid → Grid}/Grid.scss +2 -4
- package/src/lib/components/{layout/Grid → Grid}/GridSpan.jsx +10 -3
- package/src/lib/components/{layout/Grid → Grid}/README.mdx +42 -38
- package/src/lib/components/{layout/Grid → Grid}/_theme.scss +1 -2
- package/src/lib/components/{layout/Grid → Grid}/_tools.scss +2 -2
- package/src/lib/components/{layout/Grid → Grid}/helpers/generateResponsiveCustomProperties.js +0 -0
- package/src/lib/components/{layout/Grid → Grid}/index.js +0 -0
- package/src/lib/components/Link/Link.jsx +45 -0
- package/src/lib/components/Link/Link.scss +11 -0
- package/src/lib/components/Link/README.mdx +85 -0
- package/src/lib/components/Link/_theme.scss +4 -0
- package/src/lib/components/Link/index.js +1 -0
- package/src/lib/components/{layout/List → List}/List.jsx +1 -1
- package/src/lib/components/{layout/List → List}/List.scss +2 -2
- package/src/lib/components/{layout/List → List}/ListItem.jsx +1 -1
- package/src/lib/components/{layout/List → List}/README.mdx +2 -2
- package/src/lib/components/{layout/List → List}/_theme.scss +0 -0
- package/src/lib/components/{layout/List → List}/index.js +0 -0
- package/src/lib/components/{layout/Media → Media}/Media.jsx +4 -2
- package/src/lib/components/{layout/Media → Media}/Media.scss +1 -1
- package/src/lib/components/{layout/Media → Media}/MediaBody.jsx +1 -1
- package/src/lib/components/{layout/Media → Media}/MediaObject.jsx +1 -1
- package/src/lib/components/{layout/Media → Media}/README.mdx +2 -2
- package/src/lib/components/{layout/Media → Media}/index.js +0 -0
- package/src/lib/components/{ui/Modal → Modal}/Modal.jsx +28 -27
- package/src/lib/components/{ui/Modal → Modal}/Modal.scss +5 -5
- package/src/lib/components/{ui/Modal → Modal}/README.mdx +40 -40
- package/src/lib/components/{ui/Modal → Modal}/_settings.scss +4 -4
- package/src/lib/components/{ui/Modal → Modal}/_theme.scss +0 -0
- package/src/lib/components/{ui/Modal → Modal}/index.js +0 -0
- package/src/lib/components/{ui/Paper → Paper}/Paper.jsx +8 -1
- package/src/lib/components/{ui/Paper → Paper}/Paper.scss +5 -0
- package/src/lib/components/{ui/Paper → Paper}/README.mdx +14 -2
- package/src/lib/components/{ui/Paper → Paper}/_theme.scss +2 -0
- package/src/lib/components/{ui/Paper → Paper}/index.js +0 -0
- package/src/lib/components/{ui/Radio → Radio}/README.mdx +17 -14
- package/src/lib/components/Radio/Radio.jsx +188 -0
- package/src/lib/components/{ui/Radio → Radio}/Radio.scss +9 -9
- package/src/lib/components/{ui/Radio → Radio}/index.js +0 -0
- package/src/lib/components/{ui/ScrollView → ScrollView}/README.mdx +10 -10
- package/src/lib/components/{ui/ScrollView → ScrollView}/ScrollView.jsx +9 -10
- package/src/lib/components/{ui/ScrollView → ScrollView}/ScrollView.scss +6 -6
- package/src/lib/components/{ui/ScrollView → ScrollView}/_theme.scss +0 -0
- package/src/lib/components/{ui/ScrollView → ScrollView}/index.js +0 -0
- package/src/lib/components/{ui/SelectField → SelectField}/README.mdx +44 -41
- package/src/lib/components/SelectField/SelectField.jsx +219 -0
- package/src/lib/components/{ui/SelectField → SelectField}/SelectField.scss +6 -6
- package/src/lib/components/{ui/SelectField → SelectField}/index.js +0 -0
- package/src/lib/components/{ui/Table → Table}/README.mdx +7 -7
- package/src/lib/components/{ui/Table → Table}/Table.jsx +9 -13
- package/src/lib/components/{ui/Table → Table}/Table.scss +1 -1
- package/src/lib/components/{ui/Table → Table}/_settings.scss +4 -4
- package/src/lib/components/{ui/Table → Table}/index.js +0 -0
- package/src/lib/components/{ui/Tabs → Tabs}/README.mdx +3 -3
- package/src/lib/components/{ui/Tabs → Tabs}/Tabs.jsx +4 -4
- package/src/lib/components/{ui/Tabs → Tabs}/Tabs.scss +1 -1
- package/src/lib/components/{ui/Tabs → Tabs}/TabsItem.jsx +4 -3
- package/src/lib/components/{ui/Tabs → Tabs}/TabsItem.scss +3 -3
- package/src/lib/components/{ui/Tabs → Tabs}/_theme.scss +0 -0
- package/src/lib/components/{ui/Tabs → Tabs}/index.js +0 -0
- package/src/lib/components/{ui/Text → Text}/README.mdx +19 -19
- package/src/lib/components/{ui/Text → Text}/Text.jsx +1 -1
- package/src/lib/components/{ui/Text → Text}/Text.scss +0 -0
- package/src/lib/components/{ui/Text → Text}/helpers/getRootHyphensClassName.js +0 -0
- package/src/lib/components/{ui/Text → Text}/helpers/getRootWordWrappingClassName.js +0 -0
- package/src/lib/components/{ui/Text → Text}/index.js +0 -0
- package/src/lib/components/{ui/TextArea → TextArea}/README.mdx +8 -6
- package/src/lib/components/{ui/TextArea → TextArea}/TextArea.jsx +78 -78
- package/src/lib/components/{ui/TextArea → TextArea}/TextArea.scss +6 -6
- package/src/lib/components/{ui/TextArea → TextArea}/index.js +0 -0
- package/src/lib/components/{ui/TextField → TextField}/README.mdx +7 -6
- package/src/lib/components/{ui/TextField → TextField}/TextField.jsx +20 -23
- package/src/lib/components/{ui/TextField → TextField}/TextField.scss +6 -6
- package/src/lib/components/{ui/TextField → TextField}/index.js +0 -0
- package/src/lib/components/{ui/Toggle → Toggle}/README.mdx +15 -12
- package/src/lib/components/Toggle/Toggle.jsx +163 -0
- package/src/lib/components/{ui/Toggle → Toggle}/Toggle.scss +5 -5
- package/src/lib/components/{ui/Toggle → Toggle}/index.js +0 -0
- package/src/lib/components/{layout/Toolbar → Toolbar}/README.mdx +26 -26
- package/src/lib/components/{layout/Toolbar → Toolbar}/Toolbar.jsx +1 -1
- package/src/lib/components/{layout/Toolbar → Toolbar}/Toolbar.scss +1 -1
- package/src/lib/components/{layout/Toolbar → Toolbar}/ToolbarGroup.jsx +1 -1
- package/src/lib/components/{layout/Toolbar → Toolbar}/ToolbarItem.jsx +1 -1
- package/src/lib/components/{layout/Toolbar → Toolbar}/_theme.scss +0 -0
- package/src/lib/components/{layout/Toolbar → Toolbar}/index.js +0 -0
- package/src/lib/components/{ui/withForwardedRef.jsx → withForwardedRef.jsx} +0 -0
- package/src/lib/helpers/resolveContextOrProp.js +7 -0
- package/src/lib/index.js +34 -35
- package/src/lib/styles/tools/_accessibility.scss +9 -0
- package/src/lib/theme.scss +25 -7
- package/src/lib/components/ui/Button/Button.jsx +0 -191
- package/src/lib/components/ui/Button/_base.scss +0 -154
- package/src/lib/components/ui/Button/helpers/getRootLabelVisibilityClassName.js +0 -11
- package/src/lib/components/ui/ButtonGroup/index.js +0 -1
- package/src/lib/components/ui/CheckboxField/CheckboxField.jsx +0 -173
- package/src/lib/components/ui/FileInputField/FileInputField.jsx +0 -158
- package/src/lib/components/ui/Radio/Radio.jsx +0 -179
- package/src/lib/components/ui/SelectField/SelectField.jsx +0 -214
- package/src/lib/components/ui/Toggle/Toggle.jsx +0 -174
@@ -1,12 +1,12 @@
|
|
1
1
|
import PropTypes from 'prop-types';
|
2
2
|
import React from 'react';
|
3
3
|
import { createPortal } from 'react-dom';
|
4
|
-
import transferProps from '
|
5
|
-
import { withProviderContext } from '
|
4
|
+
import transferProps from '../../utils/transferProps';
|
5
|
+
import { withProviderContext } from '../../provider';
|
6
6
|
import {
|
7
7
|
Toolbar,
|
8
8
|
ToolbarItem,
|
9
|
-
} from '
|
9
|
+
} from '../Toolbar';
|
10
10
|
import Button from '../Button';
|
11
11
|
import ScrollView from '../ScrollView';
|
12
12
|
import styles from './Modal.scss';
|
@@ -54,18 +54,18 @@ export class Modal extends React.Component {
|
|
54
54
|
keyPressHandler(e) {
|
55
55
|
const {
|
56
56
|
actions,
|
57
|
-
|
57
|
+
onClose,
|
58
58
|
} = this.props;
|
59
59
|
|
60
|
-
if (e.keyCode === 27 &&
|
61
|
-
|
60
|
+
if (e.keyCode === 27 && onClose) {
|
61
|
+
onClose();
|
62
62
|
}
|
63
63
|
|
64
64
|
if (e.keyCode === 13 && e.target.nodeName !== 'BUTTON') {
|
65
65
|
const submitAction = actions.find((action) => action.type === 'submit');
|
66
66
|
|
67
67
|
if (submitAction && !submitAction.disabled) {
|
68
|
-
submitAction.
|
68
|
+
submitAction.onClick(e);
|
69
69
|
}
|
70
70
|
}
|
71
71
|
}
|
@@ -74,8 +74,8 @@ export class Modal extends React.Component {
|
|
74
74
|
const {
|
75
75
|
actions,
|
76
76
|
children,
|
77
|
-
closeHandler,
|
78
77
|
id,
|
78
|
+
onClose,
|
79
79
|
position,
|
80
80
|
scrollView,
|
81
81
|
size,
|
@@ -147,8 +147,8 @@ export class Modal extends React.Component {
|
|
147
147
|
className={styles.backdrop}
|
148
148
|
id={id}
|
149
149
|
onClick={(e) => {
|
150
|
-
if (
|
151
|
-
|
150
|
+
if (onClose) {
|
151
|
+
onClose(e);
|
152
152
|
}
|
153
153
|
}}
|
154
154
|
role="presentation"
|
@@ -171,11 +171,11 @@ export class Modal extends React.Component {
|
|
171
171
|
>
|
172
172
|
{title}
|
173
173
|
</h3>
|
174
|
-
{
|
174
|
+
{onClose && (
|
175
175
|
<button
|
176
176
|
type="button"
|
177
177
|
className={styles.close}
|
178
|
-
onClick={
|
178
|
+
onClick={onClose}
|
179
179
|
title={translations.close}
|
180
180
|
{...(id && { id: `${id}__closeModalHeaderButton` })}
|
181
181
|
>
|
@@ -184,29 +184,29 @@ export class Modal extends React.Component {
|
|
184
184
|
)}
|
185
185
|
</div>
|
186
186
|
{modalBody()}
|
187
|
-
{(actions.length ||
|
187
|
+
{(actions.length || onClose) && (
|
188
188
|
<div className={styles.footer}>
|
189
189
|
<Toolbar justify="center" dense>
|
190
190
|
{actions.map((action) => (
|
191
191
|
<ToolbarItem key={action.label}>
|
192
192
|
<Button
|
193
193
|
{...transferProps(action)}
|
194
|
-
clickHandler={action.clickHandler}
|
195
194
|
color={action.color}
|
196
195
|
disabled={action.disabled}
|
196
|
+
feedbackIcon={action.feedbackIcon}
|
197
|
+
forwardedRef={this.submitButtonRef}
|
197
198
|
id={action.id || undefined}
|
198
199
|
label={action.label}
|
199
|
-
|
200
|
-
forwardedRef={this.submitButtonRef}
|
200
|
+
onClick={action.onClick}
|
201
201
|
type="button"
|
202
202
|
/>
|
203
203
|
</ToolbarItem>
|
204
204
|
))}
|
205
|
-
{
|
205
|
+
{onClose && (
|
206
206
|
<ToolbarItem>
|
207
207
|
<Button
|
208
|
-
clickHandler={closeHandler}
|
209
208
|
label={translations.close}
|
209
|
+
onClick={onClose}
|
210
210
|
priority="flat"
|
211
211
|
{...(id && { id: `${id}__closeModalFooterButton` })}
|
212
212
|
/>
|
@@ -234,8 +234,8 @@ export class Modal extends React.Component {
|
|
234
234
|
Modal.defaultProps = {
|
235
235
|
actions: [],
|
236
236
|
autoFocus: true,
|
237
|
-
closeHandler: null,
|
238
237
|
id: undefined,
|
238
|
+
onClose: null,
|
239
239
|
portalId: null,
|
240
240
|
position: 'center',
|
241
241
|
scrollView: (<ScrollView
|
@@ -251,12 +251,12 @@ Modal.propTypes = {
|
|
251
251
|
* Actions to be rendered in modal footer.
|
252
252
|
*/
|
253
253
|
actions: PropTypes.arrayOf(PropTypes.shape({
|
254
|
-
clickHandler: PropTypes.func.isRequired,
|
255
254
|
color: PropTypes.oneOf(['primary', 'secondary', 'success', 'warning', 'danger', 'help', 'info', 'note', 'light', 'dark']),
|
256
255
|
disabled: PropTypes.bool,
|
256
|
+
feedbackIcon: PropTypes.node,
|
257
257
|
id: PropTypes.string,
|
258
258
|
label: PropTypes.string.isRequired,
|
259
|
-
|
259
|
+
onClick: PropTypes.func.isRequired,
|
260
260
|
})),
|
261
261
|
/**
|
262
262
|
* If `true`, focus the first action in the footer when the modal is opened.
|
@@ -267,15 +267,16 @@ Modal.propTypes = {
|
|
267
267
|
*/
|
268
268
|
children: PropTypes.node.isRequired,
|
269
269
|
/**
|
270
|
-
*
|
270
|
+
* ID of the root HTML element. It also serves as a base for nested elements:
|
271
|
+
* * `<ID>__content`
|
272
|
+
* * `<ID>__closeModalHeaderButton`
|
273
|
+
* * `<ID>__closeModalFooterButton`
|
271
274
|
*/
|
272
|
-
|
275
|
+
id: PropTypes.string,
|
273
276
|
/**
|
274
|
-
*
|
275
|
-
* the modal and for the close buttons: `<ID>__content`, `<ID>__closeModalHeaderButton`,
|
276
|
-
* `<ID>__closeModalFooterButton`.
|
277
|
+
* If a function is provided, the close buttons will be displayed.
|
277
278
|
*/
|
278
|
-
|
279
|
+
onClose: PropTypes.func,
|
279
280
|
/**
|
280
281
|
* If set, the modal is rendered in the React Portal with that ID.
|
281
282
|
*/
|
@@ -1,9 +1,9 @@
|
|
1
1
|
@use 'sass:map';
|
2
|
-
@use '
|
3
|
-
@use '
|
4
|
-
@use '
|
5
|
-
@use '
|
6
|
-
@use '
|
2
|
+
@use '../../styles/theme/typography';
|
3
|
+
@use '../../styles/tools/accessibility';
|
4
|
+
@use '../../styles/tools/breakpoint';
|
5
|
+
@use '../../styles/tools/reset';
|
6
|
+
@use '../../styles/tools/spacing';
|
7
7
|
@use 'settings';
|
8
8
|
@use 'theme';
|
9
9
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
name: Modal
|
3
|
-
menu: '
|
4
|
-
route: /components/
|
3
|
+
menu: 'Miscellaneous'
|
4
|
+
route: /components/modal
|
5
5
|
---
|
6
6
|
|
7
7
|
# Modal
|
@@ -34,20 +34,20 @@ And use it:
|
|
34
34
|
return (
|
35
35
|
<>
|
36
36
|
<Button
|
37
|
-
clickHandler={() => setModalOpen(true)}
|
38
37
|
label="Launch modal"
|
38
|
+
onClick={() => setModalOpen(true)}
|
39
39
|
priority="outline"
|
40
40
|
/>
|
41
41
|
<div>
|
42
42
|
{modalOpen && (
|
43
43
|
<Modal
|
44
|
-
title="Warning"
|
45
44
|
actions={[{
|
46
|
-
clickHandler: () => setModalOpen(false),
|
47
|
-
label: 'Delete',
|
48
45
|
color: 'danger',
|
46
|
+
label: 'Delete',
|
47
|
+
onClick: () => setModalOpen(false),
|
49
48
|
}]}
|
50
|
-
|
49
|
+
onClose={() => setModalOpen(false)}
|
50
|
+
title="Warning"
|
51
51
|
>
|
52
52
|
<p>
|
53
53
|
Do you really want to delete the user <code>admin</code>?
|
@@ -96,48 +96,48 @@ Modals of any size automatically shrink when they cannot fit the screen width.
|
|
96
96
|
return (
|
97
97
|
<>
|
98
98
|
<Button
|
99
|
-
|
99
|
+
label="Launch small modal"
|
100
|
+
onClick={() => {
|
100
101
|
setModalSize('small');
|
101
102
|
setModalOpen(true);
|
102
103
|
}}
|
103
|
-
label="Launch small modal"
|
104
104
|
priority="outline"
|
105
105
|
/>
|
106
106
|
<Button
|
107
|
-
|
107
|
+
label="Launch medium modal"
|
108
|
+
onClick={() => {
|
108
109
|
setModalSize('medium');
|
109
110
|
setModalOpen(true);
|
110
111
|
}}
|
111
|
-
label="Launch medium modal"
|
112
112
|
priority="outline"
|
113
113
|
/>
|
114
114
|
<Button
|
115
|
-
|
115
|
+
label="Launch large modal"
|
116
|
+
onClick={() => {
|
116
117
|
setModalSize('large');
|
117
118
|
setModalOpen(true);
|
118
119
|
}}
|
119
|
-
label="Launch large modal"
|
120
120
|
priority="outline"
|
121
121
|
/>
|
122
122
|
<Button
|
123
|
-
|
123
|
+
label="Launch fullscreen modal"
|
124
|
+
onClick={() => {
|
124
125
|
setModalSize('fullscreen');
|
125
126
|
setModalOpen(true);
|
126
127
|
}}
|
127
|
-
label="Launch fullscreen modal"
|
128
128
|
priority="outline"
|
129
129
|
/>
|
130
130
|
<div>
|
131
131
|
{modalOpen && (
|
132
132
|
<Modal
|
133
|
-
title="Delete the user?"
|
134
133
|
actions={[{
|
135
|
-
clickHandler: () => setModalOpen(false),
|
136
|
-
label: 'Delete',
|
137
134
|
color: 'danger',
|
135
|
+
label: 'Delete',
|
136
|
+
onClick: () => setModalOpen(false),
|
138
137
|
}]}
|
139
|
-
|
138
|
+
onClose={() => setModalOpen(false)}
|
140
139
|
size={modalSize}
|
140
|
+
title="Delete the user?"
|
141
141
|
>
|
142
142
|
<p>
|
143
143
|
Do you really want to delete the user <code>admin</code>?
|
@@ -164,21 +164,21 @@ magic that doesn't work together yet 🎩.
|
|
164
164
|
return (
|
165
165
|
<>
|
166
166
|
<Button
|
167
|
-
clickHandler={() => setModalOpen(true)}
|
168
167
|
label="Launch auto-width modal"
|
168
|
+
onClick={() => setModalOpen(true)}
|
169
169
|
priority="outline"
|
170
170
|
/>
|
171
171
|
<div>
|
172
172
|
{modalOpen && (
|
173
173
|
<Modal
|
174
|
-
title="Delete the user?"
|
175
174
|
actions={[{
|
176
|
-
clickHandler: () => setModalOpen(false),
|
177
|
-
label: 'Delete',
|
178
175
|
color: 'danger',
|
176
|
+
label: 'Delete',
|
177
|
+
onClick: () => setModalOpen(false),
|
179
178
|
}]}
|
180
|
-
|
179
|
+
onClose={() => setModalOpen(false)}
|
181
180
|
size="auto"
|
181
|
+
title="Delete the user?"
|
182
182
|
>
|
183
183
|
<p>
|
184
184
|
Do you really want to delete the user <code>admin</code>?
|
@@ -203,32 +203,32 @@ Modal can be aligned either to top or center of the screen.
|
|
203
203
|
return (
|
204
204
|
<>
|
205
205
|
<Button
|
206
|
-
|
206
|
+
label="Launch modal at center"
|
207
|
+
onClick={() => {
|
207
208
|
setModalPosition('center');
|
208
209
|
setModalOpen(true);
|
209
210
|
}}
|
210
|
-
label="Launch modal at center"
|
211
211
|
priority="outline"
|
212
212
|
/>
|
213
213
|
<Button
|
214
|
-
|
214
|
+
label="Launch modal at top"
|
215
|
+
onClick={() => {
|
215
216
|
setModalPosition('top');
|
216
217
|
setModalOpen(true);
|
217
218
|
}}
|
218
|
-
label="Launch modal at top"
|
219
219
|
priority="outline"
|
220
220
|
/>
|
221
221
|
<div>
|
222
222
|
{modalOpen && (
|
223
223
|
<Modal
|
224
|
-
title="Delete the user?"
|
225
224
|
actions={[{
|
226
|
-
|
225
|
+
onClick: () => setModalOpen(false),
|
227
226
|
label: 'Delete',
|
228
227
|
color: 'danger',
|
229
228
|
}]}
|
230
|
-
|
229
|
+
onClose={() => setModalOpen(false)}
|
231
230
|
position={modalPosition}
|
231
|
+
title="Delete the user?"
|
232
232
|
>
|
233
233
|
<p>
|
234
234
|
Do you really want to delete the user <code>admin</code>?
|
@@ -258,33 +258,33 @@ component.
|
|
258
258
|
return (
|
259
259
|
<>
|
260
260
|
<Button
|
261
|
-
|
261
|
+
label="Launch modal with scrolling body"
|
262
|
+
onClick={() => {
|
262
263
|
setModalScrollView(true);
|
263
264
|
setModalOpen(true);
|
264
265
|
}}
|
265
|
-
label="Launch modal with scrolling body"
|
266
266
|
priority="outline"
|
267
267
|
/>
|
268
268
|
<Button
|
269
|
-
|
269
|
+
label="Launch scrolling modal"
|
270
|
+
onClick={() => {
|
270
271
|
setModalScrollView(false);
|
271
272
|
setModalOpen(true);
|
272
273
|
}}
|
273
|
-
label="Launch scrolling modal"
|
274
274
|
priority="outline"
|
275
275
|
/>
|
276
276
|
<div>
|
277
277
|
{modalOpen && (
|
278
278
|
<Modal
|
279
|
-
title="Modal with long content"
|
280
279
|
actions={[{
|
281
|
-
clickHandler: () => setModalOpen(false),
|
282
280
|
label: 'OK',
|
281
|
+
onClick: () => setModalOpen(false),
|
283
282
|
}]}
|
284
283
|
autoFocus={false}
|
285
|
-
|
284
|
+
onClose={() => setModalOpen(false)}
|
286
285
|
scrollView={modalScrollView ? undefined : null}
|
287
286
|
size="small"
|
287
|
+
title="Modal with long content"
|
288
288
|
>
|
289
289
|
<p>
|
290
290
|
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean
|
@@ -380,8 +380,8 @@ to prevent interaction. That's where blocking modals may come handy.
|
|
380
380
|
return (
|
381
381
|
<>
|
382
382
|
<Button
|
383
|
-
clickHandler={() => setModalOpen(true)}
|
384
383
|
label="Launch blocking modal"
|
384
|
+
onClick={() => setModalOpen(true)}
|
385
385
|
priority="outline"
|
386
386
|
/>
|
387
387
|
<div>
|
@@ -393,8 +393,8 @@ to prevent interaction. That's where blocking modals may come handy.
|
|
393
393
|
Don't turn off the device!
|
394
394
|
</p>
|
395
395
|
<Button
|
396
|
-
clickHandler={() => setModalOpen(false)}
|
397
396
|
label="Close the demo"
|
397
|
+
onClick={() => setModalOpen(false)}
|
398
398
|
priority="flat"
|
399
399
|
/>
|
400
400
|
</Modal>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
@use 'sass:map';
|
2
|
-
@use '
|
3
|
-
@use '
|
4
|
-
@use '
|
5
|
-
@use '
|
2
|
+
@use '../../styles/settings/z-indexes';
|
3
|
+
@use '../../styles/theme/borders';
|
4
|
+
@use '../../styles/theme/typography';
|
5
|
+
@use '../../styles/tools/spacing';
|
6
6
|
|
7
7
|
$padding-x: spacing.of(5);
|
8
8
|
$padding-y: spacing.of(3);
|
File without changes
|
File without changes
|
@@ -1,16 +1,18 @@
|
|
1
1
|
import PropTypes from 'prop-types';
|
2
2
|
import React from 'react';
|
3
|
-
import { withProviderContext } from '
|
3
|
+
import { withProviderContext } from '../../provider';
|
4
4
|
import styles from './Paper.scss';
|
5
5
|
|
6
6
|
export const Paper = ({
|
7
7
|
children,
|
8
8
|
id,
|
9
|
+
muted,
|
9
10
|
raised,
|
10
11
|
}) => (
|
11
12
|
<div
|
12
13
|
className={[
|
13
14
|
styles.root,
|
15
|
+
muted ? styles.rootMuted : '',
|
14
16
|
raised ? styles.rootRaised : '',
|
15
17
|
].join(' ')}
|
16
18
|
id={id}
|
@@ -22,6 +24,7 @@ export const Paper = ({
|
|
22
24
|
Paper.defaultProps = {
|
23
25
|
children: null,
|
24
26
|
id: undefined,
|
27
|
+
muted: false,
|
25
28
|
raised: false,
|
26
29
|
};
|
27
30
|
|
@@ -34,6 +37,10 @@ Paper.propTypes = {
|
|
34
37
|
* ID of the root HTML element.
|
35
38
|
*/
|
36
39
|
id: PropTypes.string,
|
40
|
+
/**
|
41
|
+
* Visually suppress Paper.
|
42
|
+
*/
|
43
|
+
muted: PropTypes.bool,
|
37
44
|
/**
|
38
45
|
* Add shadow to pull the Paper above surface.
|
39
46
|
*/
|
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
name: Paper
|
3
|
-
menu: '
|
4
|
-
route: /components/
|
3
|
+
menu: 'Miscellaneous'
|
4
|
+
route: /components/paper
|
5
5
|
---
|
6
6
|
|
7
7
|
# Paper
|
@@ -53,6 +53,16 @@ Add optional shadow to lift the paper above background.
|
|
53
53
|
</Paper>
|
54
54
|
</Playground>
|
55
55
|
|
56
|
+
## Muted Paper
|
57
|
+
|
58
|
+
Dim background and add transparency to visually suppress the Paper.
|
59
|
+
|
60
|
+
<Playground>
|
61
|
+
<Paper muted>
|
62
|
+
Sssh! I'm paper and I'm muted.
|
63
|
+
</Paper>
|
64
|
+
</Playground>
|
65
|
+
|
56
66
|
## API
|
57
67
|
|
58
68
|
<Props table of={Paper} />
|
@@ -66,4 +76,6 @@ Add optional shadow to lift the paper above background.
|
|
66
76
|
| `--rui-Paper__border-color` | Border color |
|
67
77
|
| `--rui-Paper__border-radius` | Corner radius |
|
68
78
|
| `--rui-Paper__background-color` | Paper background color |
|
79
|
+
| `--rui-Paper--muted__background-color` | Background color of muted paper |
|
80
|
+
| `--rui-Paper--muted__opacity` | Opacity of muted paper |
|
69
81
|
| `--rui-Paper--raised__box-shadow` | Box shadow of raised paper |
|
@@ -3,4 +3,6 @@ $border-width: var(--rui-Paper__border-width);
|
|
3
3
|
$border-color: var(--rui-Paper__border-color);
|
4
4
|
$border-radius: var(--rui-Paper__border-radius);
|
5
5
|
$background-color: var(--rui-Paper__background-color);
|
6
|
+
$muted-background-color: var(--rui-Paper--muted__background-color);
|
7
|
+
$muted-opacity: var(--rui-Paper--muted__opacity);
|
6
8
|
$raised-box-shadow: var(--rui-Paper--raised__box-shadow);
|
File without changes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
name: Radio
|
3
|
-
menu: '
|
4
|
-
route: /components/
|
3
|
+
menu: 'Inputs'
|
4
|
+
route: /components/radio
|
5
5
|
---
|
6
6
|
|
7
7
|
# Radio
|
@@ -29,8 +29,8 @@ And use it:
|
|
29
29
|
const [fruit, setFruit] = React.useState('apple');
|
30
30
|
return (
|
31
31
|
<Radio
|
32
|
-
changeHandler={(e) => setFruit(e.target.value)}
|
33
32
|
label="Your favourite fruit"
|
33
|
+
onChange={(e) => setFruit(e.target.value)}
|
34
34
|
options={[
|
35
35
|
{
|
36
36
|
label: 'Apple',
|
@@ -91,9 +91,9 @@ the input.
|
|
91
91
|
const [frequency, setFrequency] = React.useState('weekly');
|
92
92
|
return (
|
93
93
|
<Radio
|
94
|
-
changeHandler={(e) => setFrequency(e.target.value)}
|
95
94
|
isLabelVisible={false}
|
96
95
|
label="Newsletter frequency"
|
96
|
+
onChange={(e) => setFrequency(e.target.value)}
|
97
97
|
options={[
|
98
98
|
{
|
99
99
|
label: 'I want to subscribe to the weekly newsletter',
|
@@ -125,9 +125,9 @@ supports this kind of layout as well.
|
|
125
125
|
const [frequency, setFrequency] = React.useState('weekly');
|
126
126
|
return (
|
127
127
|
<Radio
|
128
|
-
changeHandler={(e) => setFrequency(e.target.value)}
|
129
128
|
label="Newsletter frequency"
|
130
129
|
layout="horizontal"
|
130
|
+
onChange={(e) => setFrequency(e.target.value)}
|
131
131
|
options={[
|
132
132
|
{
|
133
133
|
label: 'I want to subscribe to the weekly newsletter',
|
@@ -158,9 +158,9 @@ filled.
|
|
158
158
|
const [fruit, setFruit] = React.useState('apple');
|
159
159
|
return (
|
160
160
|
<Radio
|
161
|
-
changeHandler={(e) => setFruit(e.target.value)}
|
162
161
|
helpText="What do you prefer?"
|
163
162
|
label="Your favourite fruit"
|
163
|
+
onChange={(e) => setFruit(e.target.value)}
|
164
164
|
options={[
|
165
165
|
{
|
166
166
|
label: 'Apple',
|
@@ -210,8 +210,8 @@ have.
|
|
210
210
|
return (
|
211
211
|
<>
|
212
212
|
<Radio
|
213
|
-
changeHandler={(e) => setFruit(e.target.value)}
|
214
213
|
label="Your favourite fruit"
|
214
|
+
onChange={(e) => setFruit(e.target.value)}
|
215
215
|
options={options}
|
216
216
|
required
|
217
217
|
validationState="valid"
|
@@ -219,8 +219,8 @@ have.
|
|
219
219
|
value={fruit}
|
220
220
|
/>
|
221
221
|
<Radio
|
222
|
-
changeHandler={(e) => setFruit(e.target.value)}
|
223
222
|
label="Your favourite fruit"
|
223
|
+
onChange={(e) => setFruit(e.target.value)}
|
224
224
|
options={options}
|
225
225
|
required
|
226
226
|
validationState="warning"
|
@@ -228,8 +228,8 @@ have.
|
|
228
228
|
value={fruit}
|
229
229
|
/>
|
230
230
|
<Radio
|
231
|
-
changeHandler={(e) => setFruit(e.target.value)}
|
232
231
|
label="Your favourite fruit"
|
232
|
+
onChange={(e) => setFruit(e.target.value)}
|
233
233
|
options={options}
|
234
234
|
required
|
235
235
|
validationState="invalid"
|
@@ -266,15 +266,15 @@ It's possible to disable just some options or the whole set.
|
|
266
266
|
return (
|
267
267
|
<>
|
268
268
|
<Radio
|
269
|
-
changeHandler={(e) => setFruit(e.target.value)}
|
270
269
|
label="Your favourite fruit"
|
270
|
+
onChange={(e) => setFruit(e.target.value)}
|
271
271
|
options={options}
|
272
272
|
value={fruit}
|
273
273
|
/>
|
274
274
|
<Radio
|
275
|
-
changeHandler={(e) => setFruit(e.target.value)}
|
276
275
|
disabled
|
277
276
|
label="Your favourite fruit"
|
277
|
+
onChange={(e) => setFruit(e.target.value)}
|
278
278
|
options={options}
|
279
279
|
value="apple"
|
280
280
|
/>
|
@@ -285,9 +285,10 @@ It's possible to disable just some options or the whole set.
|
|
285
285
|
|
286
286
|
## API
|
287
287
|
|
288
|
-
In addition to the options below, you can
|
289
|
-
interfere with the API, and they will be
|
290
|
-
|
288
|
+
In addition to the options below, you can specify [React synthetic events] or
|
289
|
+
any custom HTML attributes that do not interfere with the API, and they will be
|
290
|
+
passed to the `input` HTML element. This enables making the component
|
291
|
+
interactive and helps improve its accessibility.
|
291
292
|
|
292
293
|
<Props table of={Radio} />
|
293
294
|
|
@@ -300,3 +301,5 @@ options. On top of that, the following options are available for Radio.
|
|
300
301
|
|--------------------------------------------------------------------|------------------------------------------------|
|
301
302
|
| `--rui-FormField--check__input--radio__border-radius` | Input corner radius |
|
302
303
|
| `--rui-FormField--check__input--radio--checked__background-image` | Checked input background image (inline, URL, …) |
|
304
|
+
|
305
|
+
[React synthetic events]: https://reactjs.org/docs/events.html
|