@react-ui-org/react-ui 0.47.0 → 0.49.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.
- package/dist/lib.development.js +465 -93
- package/dist/lib.js +1 -1
- package/package.json +1 -1
- package/src/lib/components/Alert/Alert.jsx +3 -0
- package/src/lib/components/Alert/Alert.scss +10 -10
- package/src/lib/components/Alert/README.mdx +18 -2
- package/src/lib/components/Alert/index.js +1 -1
- package/src/lib/components/Badge/Badge.jsx +4 -8
- package/src/lib/components/Badge/Badge.scss +21 -21
- package/src/lib/components/Badge/README.mdx +15 -1
- package/src/lib/components/Badge/index.js +1 -1
- package/src/lib/components/Button/Button.jsx +23 -34
- package/src/lib/components/Button/README.mdx +21 -7
- package/src/lib/components/Button/_base.scss +20 -20
- package/src/lib/components/Button/_priorities.scss +35 -35
- package/src/lib/components/Button/helpers/getRootLabelVisibilityClassName.js +7 -7
- package/src/lib/components/Button/helpers/getRootPriorityClassName.js +3 -3
- package/src/lib/components/Button/index.js +1 -1
- package/src/lib/components/ButtonGroup/ButtonGroup.jsx +2 -8
- package/src/lib/components/ButtonGroup/README.mdx +18 -2
- package/src/lib/components/Card/Card.jsx +6 -10
- package/src/lib/components/Card/Card.scss +13 -13
- package/src/lib/components/Card/CardBody.jsx +6 -10
- package/src/lib/components/Card/CardFooter.jsx +6 -7
- package/src/lib/components/Card/README.mdx +21 -5
- package/src/lib/components/CheckboxField/CheckboxField.jsx +17 -44
- package/src/lib/components/CheckboxField/README.mdx +18 -6
- package/src/lib/components/CheckboxField/index.js +1 -1
- package/src/lib/components/FileInputField/FileInputField.jsx +20 -29
- package/src/lib/components/FileInputField/FileInputField.scss +3 -3
- package/src/lib/components/FileInputField/README.mdx +30 -28
- package/src/lib/components/FileInputField/index.js +1 -1
- package/src/lib/components/FormLayout/FormLayout.jsx +5 -9
- package/src/lib/components/FormLayout/FormLayout.scss +3 -3
- package/src/lib/components/FormLayout/FormLayoutCustomField.jsx +4 -1
- package/src/lib/components/FormLayout/FormLayoutCustomField.scss +8 -8
- package/src/lib/components/FormLayout/README.mdx +28 -13
- package/src/lib/components/Grid/Grid.jsx +31 -35
- package/src/lib/components/Grid/Grid.scss +10 -15
- package/src/lib/components/Grid/GridSpan.jsx +5 -11
- package/src/lib/components/Grid/README.mdx +48 -36
- package/src/lib/components/Grid/_helpers/generateResponsiveCustomProperties.js +11 -3
- package/src/lib/components/Grid/_settings.scss +18 -0
- package/src/lib/components/Grid/_tools.scss +5 -5
- package/src/lib/components/Modal/Modal.jsx +147 -254
- package/src/lib/components/Modal/Modal.scss +7 -55
- package/src/lib/components/Modal/ModalBody.jsx +60 -0
- package/src/lib/components/Modal/ModalBody.scss +18 -0
- package/src/lib/components/Modal/ModalCloseButton.jsx +45 -0
- package/src/lib/components/Modal/ModalCloseButton.scss +18 -0
- package/src/lib/components/Modal/ModalContent.jsx +39 -0
- package/src/lib/components/Modal/ModalContent.scss +5 -0
- package/src/lib/components/Modal/ModalFooter.jsx +42 -0
- package/src/lib/components/Modal/ModalFooter.scss +35 -0
- package/src/lib/components/Modal/ModalHeader.jsx +44 -0
- package/src/lib/components/Modal/ModalHeader.scss +30 -0
- package/src/lib/components/Modal/ModalTitle.jsx +44 -0
- package/src/lib/components/Modal/ModalTitle.scss +10 -0
- package/src/lib/components/Modal/README.mdx +865 -195
- package/src/lib/components/Modal/_helpers/getJustifyClassName.js +19 -0
- package/src/lib/components/Modal/_helpers/getScrollingClassName.js +11 -0
- package/src/lib/components/Modal/_settings.scss +1 -5
- package/src/lib/components/Modal/_theme.scss +6 -0
- package/src/lib/components/Modal/index.js +7 -1
- package/src/lib/components/Paper/Paper.jsx +5 -9
- package/src/lib/components/Paper/Paper.scss +2 -2
- package/src/lib/components/Paper/README.mdx +15 -1
- package/src/lib/components/Paper/index.js +1 -1
- package/src/lib/components/Popover/Popover.jsx +14 -30
- package/src/lib/components/Popover/Popover.scss +7 -6
- package/src/lib/components/Popover/PopoverWrapper.jsx +5 -12
- package/src/lib/components/Popover/PopoverWrapper.scss +3 -0
- package/src/lib/components/Popover/README.mdx +32 -11
- package/src/lib/components/Popover/_theme.scss +1 -1
- package/src/lib/components/Radio/README.mdx +13 -6
- package/src/lib/components/Radio/Radio.jsx +39 -29
- package/src/lib/components/Radio/Radio.scss +3 -3
- package/src/lib/components/Radio/index.js +1 -1
- package/src/lib/components/ScrollView/README.mdx +165 -84
- package/src/lib/components/ScrollView/ScrollView.jsx +115 -117
- package/src/lib/components/ScrollView/ScrollView.scss +18 -16
- package/src/lib/components/ScrollView/index.js +1 -1
- package/src/lib/components/SelectField/README.mdx +83 -7
- package/src/lib/components/SelectField/SelectField.jsx +86 -61
- package/src/lib/components/SelectField/SelectField.scss +8 -8
- package/src/lib/components/SelectField/_components/Option/Option.jsx +46 -0
- package/src/lib/components/SelectField/_components/Option/index.js +1 -0
- package/src/lib/components/SelectField/index.js +1 -1
- package/src/lib/components/Table/README.mdx +25 -9
- package/src/lib/components/Table/Table.jsx +43 -101
- package/src/lib/components/Table/Table.scss +0 -24
- package/src/lib/components/Table/_components/TableBodyCell/TableBodyCell.jsx +46 -0
- package/src/lib/components/Table/_components/TableBodyCell/index.js +1 -0
- package/src/lib/components/Table/_components/TableCell.scss +25 -0
- package/src/lib/components/Table/_components/TableHeaderCell/TableHeaderCell.jsx +71 -0
- package/src/lib/components/Table/_components/TableHeaderCell/index.js +1 -0
- package/src/lib/components/Table/index.js +1 -1
- package/src/lib/components/Tabs/README.mdx +21 -3
- package/src/lib/components/Tabs/Tabs.jsx +6 -1
- package/src/lib/components/Tabs/TabsItem.jsx +3 -0
- package/src/lib/components/Tabs/TabsItem.scss +1 -2
- package/src/lib/components/Text/README.mdx +25 -7
- package/src/lib/components/Text/Text.jsx +3 -7
- package/src/lib/components/Text/Text.scss +6 -6
- package/src/lib/components/Text/_helpers/getRootClampClassName.js +2 -2
- package/src/lib/components/Text/_helpers/getRootHyphensClassName.js +2 -2
- package/src/lib/components/Text/_helpers/getRootWordWrappingClassName.js +2 -2
- package/src/lib/components/Text/index.js +1 -1
- package/src/lib/components/TextArea/README.mdx +34 -31
- package/src/lib/components/TextArea/TextArea.jsx +23 -63
- package/src/lib/components/TextArea/TextArea.scss +8 -8
- package/src/lib/components/TextArea/index.js +1 -1
- package/src/lib/components/TextField/README.mdx +56 -54
- package/src/lib/components/TextField/TextField.jsx +25 -52
- package/src/lib/components/TextField/TextField.scss +9 -9
- package/src/lib/components/TextField/index.js +1 -1
- package/src/lib/components/TextLink/README.mdx +13 -6
- package/src/lib/components/TextLink/TextLink.jsx +0 -10
- package/src/lib/components/TextLink/index.js +1 -1
- package/src/lib/components/Toggle/README.mdx +18 -6
- package/src/lib/components/Toggle/Toggle.jsx +18 -44
- package/src/lib/components/Toggle/index.js +1 -1
- package/src/lib/components/Toolbar/README.mdx +21 -6
- package/src/lib/components/Toolbar/Toolbar.jsx +9 -43
- package/src/lib/components/Toolbar/Toolbar.scss +24 -12
- package/src/lib/components/Toolbar/ToolbarGroup.jsx +7 -26
- package/src/lib/components/Toolbar/ToolbarItem.jsx +3 -7
- package/src/lib/components/Toolbar/_helpers/getAlignClassName.js +19 -0
- package/src/lib/components/Toolbar/_helpers/getJustifyClassName.js +16 -0
- package/src/lib/components/_helpers/getRootColorClassName.js +10 -10
- package/src/lib/components/_helpers/getRootSizeClassName.js +3 -3
- package/src/lib/components/_helpers/transferProps.js +1 -1
- package/src/lib/index.js +24 -16
- package/src/lib/provider/withGlobalProps.jsx +20 -3
- package/src/lib/styles/tools/form-fields/_box-field-layout.scss +15 -15
- package/src/lib/styles/tools/form-fields/_inline-field-elements.scss +1 -1
- package/src/lib/styles/tools/form-fields/_inline-field-layout.scss +9 -9
- package/src/lib/theme.scss +18 -26
- package/src/lib/translations/en.js +1 -1
- package/src/lib/components/Grid/_theme.scss +0 -11
- package/src/lib/components/ScrollView/_theme.scss +0 -2
- package/src/lib/components/withForwardedRef.jsx +0 -11
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
Playground,
|
|
13
13
|
Props,
|
|
14
14
|
} from 'docz'
|
|
15
|
-
import { TextField } from '
|
|
15
|
+
import { TextField } from '../..'
|
|
16
16
|
|
|
17
17
|
## Basic Usage
|
|
18
18
|
|
|
@@ -189,8 +189,8 @@ attribute to achieve that effect (doesn't work for `number` input type though).
|
|
|
189
189
|
by `inputSize` API option) is
|
|
190
190
|
[not available for `number` input type][input-number-size]. TextField supports
|
|
191
191
|
`inputSize` option for all types of inputs, so you can use it whenever you find
|
|
192
|
-
it suitable. Just keep in mind the `size` attribute will not be present
|
|
193
|
-
numeric inputs.
|
|
192
|
+
it suitable. Just keep in mind the `size` attribute will not be present in the
|
|
193
|
+
DOM for numeric inputs.
|
|
194
194
|
|
|
195
195
|
<Playground>
|
|
196
196
|
<TextField
|
|
@@ -215,47 +215,6 @@ numeric inputs.
|
|
|
215
215
|
/>
|
|
216
216
|
</Playground>
|
|
217
217
|
|
|
218
|
-
## Forwarding HTML Attributes
|
|
219
|
-
|
|
220
|
-
When you want to improve the accessibility of your text fields even further, you
|
|
221
|
-
can **add whatever HTML attribute you like.** All attributes that don't
|
|
222
|
-
interfere with [component's API](#api) are forwarded to the native HTML input.
|
|
223
|
-
|
|
224
|
-
<Playground>
|
|
225
|
-
<TextField
|
|
226
|
-
label="Address"
|
|
227
|
-
autoComplete="street-address"
|
|
228
|
-
minLength={3}
|
|
229
|
-
maxLength={80}
|
|
230
|
-
/>
|
|
231
|
-
<TextField
|
|
232
|
-
label="Address"
|
|
233
|
-
variant="filled"
|
|
234
|
-
autoComplete="street-address"
|
|
235
|
-
minLength={3}
|
|
236
|
-
maxLength={80}
|
|
237
|
-
/>
|
|
238
|
-
<TextField
|
|
239
|
-
inputSize={3}
|
|
240
|
-
min={13}
|
|
241
|
-
max={120}
|
|
242
|
-
label="Age"
|
|
243
|
-
type="number"
|
|
244
|
-
/>
|
|
245
|
-
<TextField
|
|
246
|
-
inputSize={3}
|
|
247
|
-
min={13}
|
|
248
|
-
max={120}
|
|
249
|
-
label="Age"
|
|
250
|
-
type="number"
|
|
251
|
-
variant="filled"
|
|
252
|
-
/>
|
|
253
|
-
</Playground>
|
|
254
|
-
|
|
255
|
-
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
256
|
-
[text][input-text], [email][input-email], [number][input-number],
|
|
257
|
-
[tel][input-tel], and [password][input-password] input types.
|
|
258
|
-
|
|
259
218
|
## Invisible Label
|
|
260
219
|
|
|
261
220
|
In some cases, it may be convenient to visually hide the field label. The label
|
|
@@ -489,12 +448,54 @@ It's possible to disable the whole input.
|
|
|
489
448
|
/>
|
|
490
449
|
</Playground>
|
|
491
450
|
|
|
492
|
-
##
|
|
451
|
+
## Forwarding HTML Attributes
|
|
493
452
|
|
|
494
|
-
In addition to the options below
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
453
|
+
In addition to the options below in the [component's API](#api) section, you
|
|
454
|
+
can specify [React synthetic events] or you can **add whatever HTML attribute
|
|
455
|
+
you like.** All attributes that don't interfere with the API are forwarded to
|
|
456
|
+
the native HTML `<input>`. This enables making the component interactive and
|
|
457
|
+
helps to improve its accessibility.
|
|
458
|
+
|
|
459
|
+
<Playground>
|
|
460
|
+
<TextField
|
|
461
|
+
label="Address"
|
|
462
|
+
autoComplete="street-address"
|
|
463
|
+
minLength={3}
|
|
464
|
+
maxLength={80}
|
|
465
|
+
/>
|
|
466
|
+
<TextField
|
|
467
|
+
label="Address"
|
|
468
|
+
variant="filled"
|
|
469
|
+
autoComplete="street-address"
|
|
470
|
+
minLength={3}
|
|
471
|
+
maxLength={80}
|
|
472
|
+
/>
|
|
473
|
+
<TextField
|
|
474
|
+
inputSize={3}
|
|
475
|
+
min={13}
|
|
476
|
+
max={120}
|
|
477
|
+
label="Age"
|
|
478
|
+
type="number"
|
|
479
|
+
/>
|
|
480
|
+
<TextField
|
|
481
|
+
inputSize={3}
|
|
482
|
+
min={13}
|
|
483
|
+
max={120}
|
|
484
|
+
label="Age"
|
|
485
|
+
type="number"
|
|
486
|
+
variant="filled"
|
|
487
|
+
/>
|
|
488
|
+
</Playground>
|
|
489
|
+
|
|
490
|
+
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
491
|
+
[text][input-text], [email][input-email], [number][input-number],
|
|
492
|
+
[tel][input-tel], and [password][input-password] input types.
|
|
493
|
+
|
|
494
|
+
## Forwarding ref
|
|
495
|
+
|
|
496
|
+
If you provide [ref], it is forwarded to the native HTML `<input>` element.
|
|
497
|
+
|
|
498
|
+
## API
|
|
498
499
|
|
|
499
500
|
<Props table of={TextField} />
|
|
500
501
|
|
|
@@ -507,10 +508,11 @@ Head to [Forms Theming][theming-forms] to see shared form theming options.
|
|
|
507
508
|
[size]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/text#size
|
|
508
509
|
[max]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number#max
|
|
509
510
|
[input-number-size]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number#Controlling_input_size
|
|
510
|
-
[input-text]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/text
|
|
511
|
-
[input-email]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email
|
|
512
|
-
[input-number]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number
|
|
513
|
-
[input-tel]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/tel
|
|
514
|
-
[input-password]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password
|
|
511
|
+
[input-text]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/text#additional_attributes
|
|
512
|
+
[input-email]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email#additional_attributes
|
|
513
|
+
[input-number]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number#additional_attributes
|
|
514
|
+
[input-tel]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/tel#additional_attributes
|
|
515
|
+
[input-password]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password#additional_attributes
|
|
515
516
|
[theming-forms]: /customize/theming/forms
|
|
516
517
|
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
518
|
+
[ref]: https://reactjs.org/docs/refs-and-the-dom.html
|
|
@@ -7,31 +7,28 @@ import { getRootValidationStateClassName } from '../_helpers/getRootValidationSt
|
|
|
7
7
|
import { resolveContextOrProp } from '../_helpers/resolveContextOrProp';
|
|
8
8
|
import { transferProps } from '../_helpers/transferProps';
|
|
9
9
|
import { FormLayoutContext } from '../FormLayout';
|
|
10
|
-
import withForwardedRef from '../withForwardedRef';
|
|
11
10
|
import styles from './TextField.scss';
|
|
12
11
|
|
|
13
12
|
const SMALL_INPUT_SIZE = 10;
|
|
14
13
|
|
|
15
|
-
export const TextField = ({
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
...restProps
|
|
34
|
-
}) => {
|
|
14
|
+
export const TextField = React.forwardRef((props, ref) => {
|
|
15
|
+
const {
|
|
16
|
+
disabled,
|
|
17
|
+
fullWidth,
|
|
18
|
+
helpText,
|
|
19
|
+
id,
|
|
20
|
+
inputSize,
|
|
21
|
+
isLabelVisible,
|
|
22
|
+
label,
|
|
23
|
+
layout,
|
|
24
|
+
required,
|
|
25
|
+
size,
|
|
26
|
+
type,
|
|
27
|
+
validationState,
|
|
28
|
+
validationText,
|
|
29
|
+
variant,
|
|
30
|
+
...restProps
|
|
31
|
+
} = props;
|
|
35
32
|
const context = useContext(FormLayoutContext);
|
|
36
33
|
const hasSmallInput = (inputSize !== null) && (inputSize <= SMALL_INPUT_SIZE);
|
|
37
34
|
|
|
@@ -44,13 +41,13 @@ export const TextField = ({
|
|
|
44
41
|
inputSize && styles.hasRootCustomInputSize,
|
|
45
42
|
context && styles.isRootInFormLayout,
|
|
46
43
|
resolveContextOrProp(context && context.layout, layout) === 'horizontal'
|
|
47
|
-
? styles.
|
|
48
|
-
: styles.
|
|
44
|
+
? styles.isRootLayoutHorizontal
|
|
45
|
+
: styles.isRootLayoutVertical,
|
|
49
46
|
disabled && styles.isRootDisabled,
|
|
50
47
|
required && styles.isRootRequired,
|
|
51
48
|
getRootSizeClassName(size, styles),
|
|
52
49
|
getRootValidationStateClassName(validationState, styles),
|
|
53
|
-
variant === 'filled' ? styles.
|
|
50
|
+
variant === 'filled' ? styles.isRootVariantFilled : styles.isRootVariantOutline,
|
|
54
51
|
)}
|
|
55
52
|
htmlFor={id}
|
|
56
53
|
id={id && `${id}__label`}
|
|
@@ -72,12 +69,10 @@ export const TextField = ({
|
|
|
72
69
|
className={styles.input}
|
|
73
70
|
disabled={disabled}
|
|
74
71
|
id={id}
|
|
75
|
-
|
|
76
|
-
ref={forwardedRef}
|
|
72
|
+
ref={ref}
|
|
77
73
|
required={required}
|
|
78
74
|
size={type !== 'number' ? inputSize : null}
|
|
79
75
|
type={type}
|
|
80
|
-
value={value}
|
|
81
76
|
/>
|
|
82
77
|
{variant === 'filled' && (
|
|
83
78
|
<div className={styles.bottomLine} />
|
|
@@ -102,24 +97,21 @@ export const TextField = ({
|
|
|
102
97
|
</div>
|
|
103
98
|
</label>
|
|
104
99
|
);
|
|
105
|
-
};
|
|
100
|
+
});
|
|
106
101
|
|
|
107
102
|
TextField.defaultProps = {
|
|
108
103
|
disabled: false,
|
|
109
|
-
forwardedRef: undefined,
|
|
110
104
|
fullWidth: false,
|
|
111
105
|
helpText: null,
|
|
112
106
|
id: undefined,
|
|
113
107
|
inputSize: null,
|
|
114
108
|
isLabelVisible: true,
|
|
115
109
|
layout: 'vertical',
|
|
116
|
-
placeholder: null,
|
|
117
110
|
required: false,
|
|
118
111
|
size: 'medium',
|
|
119
112
|
type: 'text',
|
|
120
113
|
validationState: null,
|
|
121
114
|
validationText: null,
|
|
122
|
-
value: undefined,
|
|
123
115
|
variant: 'outline',
|
|
124
116
|
};
|
|
125
117
|
|
|
@@ -128,14 +120,6 @@ TextField.propTypes = {
|
|
|
128
120
|
* If `true`, the input will be disabled.
|
|
129
121
|
*/
|
|
130
122
|
disabled: PropTypes.bool,
|
|
131
|
-
/**
|
|
132
|
-
* Reference forwarded to the `input` element.
|
|
133
|
-
*/
|
|
134
|
-
forwardedRef: PropTypes.oneOfType([
|
|
135
|
-
PropTypes.func,
|
|
136
|
-
// eslint-disable-next-line react/forbid-prop-types
|
|
137
|
-
PropTypes.shape({ current: PropTypes.any }),
|
|
138
|
-
]),
|
|
139
123
|
/**
|
|
140
124
|
* If `true`, the field will span the full width of its parent.
|
|
141
125
|
*/
|
|
@@ -153,7 +137,7 @@ TextField.propTypes = {
|
|
|
153
137
|
*/
|
|
154
138
|
id: PropTypes.string,
|
|
155
139
|
/**
|
|
156
|
-
*
|
|
140
|
+
* Width of the input field. Translated as `size` attribute for input types other than `number`.
|
|
157
141
|
*/
|
|
158
142
|
inputSize: PropTypes.number,
|
|
159
143
|
/**
|
|
@@ -172,10 +156,6 @@ TextField.propTypes = {
|
|
|
172
156
|
* as the value is inherited in such case.
|
|
173
157
|
*/
|
|
174
158
|
layout: PropTypes.oneOf(['horizontal', 'vertical']),
|
|
175
|
-
/**
|
|
176
|
-
* Optional example value.
|
|
177
|
-
*/
|
|
178
|
-
placeholder: PropTypes.string,
|
|
179
159
|
/**
|
|
180
160
|
* If `true`, the input will be required.
|
|
181
161
|
*/
|
|
@@ -196,19 +176,12 @@ TextField.propTypes = {
|
|
|
196
176
|
* Validation message to be displayed.
|
|
197
177
|
*/
|
|
198
178
|
validationText: PropTypes.node,
|
|
199
|
-
/**
|
|
200
|
-
* Value of the input.
|
|
201
|
-
*/
|
|
202
|
-
value: PropTypes.oneOfType([
|
|
203
|
-
PropTypes.string,
|
|
204
|
-
PropTypes.number,
|
|
205
|
-
]),
|
|
206
179
|
/**
|
|
207
180
|
* Design variant of the field, further customizable with CSS custom properties.
|
|
208
181
|
*/
|
|
209
182
|
variant: PropTypes.oneOf(['filled', 'outline']),
|
|
210
183
|
};
|
|
211
184
|
|
|
212
|
-
export const TextFieldWithGlobalProps =
|
|
185
|
+
export const TextFieldWithGlobalProps = withGlobalProps(TextField, 'TextField');
|
|
213
186
|
|
|
214
187
|
export default TextFieldWithGlobalProps;
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
// Variants
|
|
43
|
-
.
|
|
43
|
+
.isRootVariantFilled {
|
|
44
44
|
@include variants.visual(box, $variant: filled);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
.
|
|
47
|
+
.isRootVariantOutline {
|
|
48
48
|
@include variants.visual(box, $variant: outline);
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -67,12 +67,12 @@
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
// Layouts
|
|
70
|
-
.
|
|
71
|
-
.
|
|
70
|
+
.isRootLayoutVertical,
|
|
71
|
+
.isRootLayoutHorizontal {
|
|
72
72
|
@include box-field-layout.vertical();
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
.
|
|
75
|
+
.isRootLayoutHorizontal {
|
|
76
76
|
@include box-field-layout.horizontal();
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -84,19 +84,19 @@
|
|
|
84
84
|
@include box-field-layout.in-form-layout();
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
.hasRootSmallInput.
|
|
87
|
+
.hasRootSmallInput.isRootLayoutHorizontal {
|
|
88
88
|
@include box-field-layout.horizontal-with-small-input();
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
// Sizes
|
|
92
|
-
.
|
|
92
|
+
.isRootSizeSmall {
|
|
93
93
|
@include box-field-sizes.size(small);
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
.
|
|
96
|
+
.isRootSizeMedium {
|
|
97
97
|
@include box-field-sizes.size(medium);
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
.
|
|
100
|
+
.isRootSizeLarge {
|
|
101
101
|
@include box-field-sizes.size(large);
|
|
102
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default } from './TextField';
|
|
1
|
+
export { default as TextField } from './TextField';
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
Playground,
|
|
11
11
|
Props,
|
|
12
12
|
} from 'docz'
|
|
13
|
-
import { TextLink } from '
|
|
13
|
+
import { TextLink } from '../..'
|
|
14
14
|
|
|
15
15
|
TextLink allows users to follow navigation.
|
|
16
16
|
|
|
@@ -56,12 +56,18 @@ It's common to use custom function for routing within SPAs. Use the
|
|
|
56
56
|
/>
|
|
57
57
|
</Playground>
|
|
58
58
|
|
|
59
|
-
##
|
|
59
|
+
## Forwarding HTML Attributes
|
|
60
|
+
|
|
61
|
+
In addition to the options below in the [component's API](#api) section, you
|
|
62
|
+
can specify [React synthetic events] or **any HTML attribute you like.** All
|
|
63
|
+
attributes that don't interfere with the API are forwarded to the `<a>` HTML
|
|
64
|
+
element. This enables making the component interactive and helps to improve its
|
|
65
|
+
accessibility.
|
|
60
66
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
67
|
+
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
68
|
+
[a] element.
|
|
69
|
+
|
|
70
|
+
## API
|
|
65
71
|
|
|
66
72
|
<Props table of={TextLink} />
|
|
67
73
|
|
|
@@ -75,3 +81,4 @@ and helps improve its accessibility.
|
|
|
75
81
|
| `--rui-TextLink--hover__text-decoration` | Text decoration on hover |
|
|
76
82
|
|
|
77
83
|
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
84
|
+
[a]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attributes
|
|
@@ -6,7 +6,6 @@ import styles from './TextLink.scss';
|
|
|
6
6
|
|
|
7
7
|
export const TextLink = ({
|
|
8
8
|
href,
|
|
9
|
-
id,
|
|
10
9
|
label,
|
|
11
10
|
...restProps
|
|
12
11
|
}) => (
|
|
@@ -14,25 +13,16 @@ export const TextLink = ({
|
|
|
14
13
|
{...transferProps(restProps)}
|
|
15
14
|
href={href}
|
|
16
15
|
className={styles.root}
|
|
17
|
-
id={id}
|
|
18
16
|
>
|
|
19
17
|
{label}
|
|
20
18
|
</a>
|
|
21
19
|
);
|
|
22
20
|
|
|
23
|
-
TextLink.defaultProps = {
|
|
24
|
-
id: undefined,
|
|
25
|
-
};
|
|
26
|
-
|
|
27
21
|
TextLink.propTypes = {
|
|
28
22
|
/**
|
|
29
23
|
* Link's `href` attribute.
|
|
30
24
|
*/
|
|
31
25
|
href: PropTypes.string.isRequired,
|
|
32
|
-
/**
|
|
33
|
-
* ID of the root HTML element.
|
|
34
|
-
*/
|
|
35
|
-
id: PropTypes.string,
|
|
36
26
|
/**
|
|
37
27
|
* Link label.
|
|
38
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default } from './TextLink';
|
|
1
|
+
export { default as TextLink } from './TextLink';
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
Playground,
|
|
13
13
|
Props,
|
|
14
14
|
} from 'docz'
|
|
15
|
-
import { Toggle } from '
|
|
15
|
+
import { Toggle } from '../..'
|
|
16
16
|
|
|
17
17
|
## Basic Usage
|
|
18
18
|
|
|
@@ -177,12 +177,22 @@ Disabled state makes the input unavailable.
|
|
|
177
177
|
/>
|
|
178
178
|
</Playground>
|
|
179
179
|
|
|
180
|
-
##
|
|
180
|
+
## Forwarding HTML Attributes
|
|
181
|
+
|
|
182
|
+
In addition to the options below in the [component's API](#api) section, you
|
|
183
|
+
can specify [React synthetic events] or you can **add whatever HTML attribute
|
|
184
|
+
you like.** All attributes that don't interfere with the API are forwarded to
|
|
185
|
+
the native HTML `<input>`. This enables making the component interactive and
|
|
186
|
+
helps to improve its accessibility.
|
|
187
|
+
|
|
188
|
+
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
189
|
+
[checkbox] input type.
|
|
181
190
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
191
|
+
## Forwarding ref
|
|
192
|
+
|
|
193
|
+
If you provide [ref], it is forwarded to the native HTML `<input>` element.
|
|
194
|
+
|
|
195
|
+
## API
|
|
186
196
|
|
|
187
197
|
<Props table of={Toggle} />
|
|
188
198
|
|
|
@@ -202,3 +212,5 @@ options. On top of that, the following options are available for Toggle.
|
|
|
202
212
|
| `--rui-FormField--check__input--toggle--checked__background-position` | Background position of checked input |
|
|
203
213
|
|
|
204
214
|
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
215
|
+
[checkbox]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#additional_attributes
|
|
216
|
+
[ref]: https://reactjs.org/docs/refs-and-the-dom.html
|
|
@@ -5,24 +5,22 @@ import { classNames } from '../../utils/classNames';
|
|
|
5
5
|
import { getRootValidationStateClassName } from '../_helpers/getRootValidationStateClassName';
|
|
6
6
|
import { transferProps } from '../_helpers/transferProps';
|
|
7
7
|
import { FormLayoutContext } from '../FormLayout';
|
|
8
|
-
import withForwardedRef from '../withForwardedRef';
|
|
9
8
|
import styles from './Toggle.scss';
|
|
10
9
|
|
|
11
|
-
export const Toggle = ({
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}) => {
|
|
10
|
+
export const Toggle = React.forwardRef((props, ref) => {
|
|
11
|
+
const {
|
|
12
|
+
disabled,
|
|
13
|
+
helpText,
|
|
14
|
+
id,
|
|
15
|
+
isLabelVisible,
|
|
16
|
+
label,
|
|
17
|
+
labelPosition,
|
|
18
|
+
required,
|
|
19
|
+
validationState,
|
|
20
|
+
validationText,
|
|
21
|
+
...restProps
|
|
22
|
+
} = props;
|
|
23
|
+
|
|
26
24
|
const context = useContext(FormLayoutContext);
|
|
27
25
|
|
|
28
26
|
return (
|
|
@@ -30,7 +28,7 @@ export const Toggle = ({
|
|
|
30
28
|
className={classNames(
|
|
31
29
|
styles.root,
|
|
32
30
|
context && styles.isRootInFormLayout,
|
|
33
|
-
context && context.layout === 'horizontal' ? styles.
|
|
31
|
+
context && context.layout === 'horizontal' ? styles.isRootLayoutHorizontal : styles.isRootLayoutVertical,
|
|
34
32
|
labelPosition === 'before' && styles.hasRootLabelBefore,
|
|
35
33
|
disabled && styles.isRootDisabled,
|
|
36
34
|
required && styles.isRootRequired,
|
|
@@ -51,15 +49,13 @@ export const Toggle = ({
|
|
|
51
49
|
</div>
|
|
52
50
|
<input
|
|
53
51
|
{...transferProps(restProps)}
|
|
54
|
-
checked={checked}
|
|
55
52
|
className={styles.input}
|
|
56
53
|
disabled={disabled}
|
|
57
54
|
id={id}
|
|
58
55
|
name={id}
|
|
59
|
-
ref={
|
|
56
|
+
ref={ref}
|
|
60
57
|
required={required}
|
|
61
58
|
type="checkbox"
|
|
62
|
-
value={value}
|
|
63
59
|
/>
|
|
64
60
|
</div>
|
|
65
61
|
{helpText && (
|
|
@@ -80,12 +76,10 @@ export const Toggle = ({
|
|
|
80
76
|
)}
|
|
81
77
|
</label>
|
|
82
78
|
);
|
|
83
|
-
};
|
|
79
|
+
});
|
|
84
80
|
|
|
85
81
|
Toggle.defaultProps = {
|
|
86
|
-
checked: undefined,
|
|
87
82
|
disabled: false,
|
|
88
|
-
forwardedRef: undefined,
|
|
89
83
|
helpText: null,
|
|
90
84
|
id: undefined,
|
|
91
85
|
isLabelVisible: true,
|
|
@@ -93,26 +87,13 @@ Toggle.defaultProps = {
|
|
|
93
87
|
required: false,
|
|
94
88
|
validationState: null,
|
|
95
89
|
validationText: null,
|
|
96
|
-
value: undefined,
|
|
97
90
|
};
|
|
98
91
|
|
|
99
92
|
Toggle.propTypes = {
|
|
100
|
-
/**
|
|
101
|
-
* If `true`, the input will be checked.
|
|
102
|
-
*/
|
|
103
|
-
checked: PropTypes.bool,
|
|
104
93
|
/**
|
|
105
94
|
* If `true`, the input will be disabled.
|
|
106
95
|
*/
|
|
107
96
|
disabled: PropTypes.bool,
|
|
108
|
-
/**
|
|
109
|
-
* Reference forwarded to the `input` element.
|
|
110
|
-
*/
|
|
111
|
-
forwardedRef: PropTypes.oneOfType([
|
|
112
|
-
PropTypes.func,
|
|
113
|
-
// eslint-disable-next-line react/forbid-prop-types
|
|
114
|
-
PropTypes.shape({ current: PropTypes.any }),
|
|
115
|
-
]),
|
|
116
97
|
/**
|
|
117
98
|
* Optional help text.
|
|
118
99
|
*/
|
|
@@ -150,15 +131,8 @@ Toggle.propTypes = {
|
|
|
150
131
|
* Validation message to be displayed.
|
|
151
132
|
*/
|
|
152
133
|
validationText: PropTypes.node,
|
|
153
|
-
/**
|
|
154
|
-
* Value of the input.
|
|
155
|
-
*/
|
|
156
|
-
value: PropTypes.oneOfType([
|
|
157
|
-
PropTypes.string,
|
|
158
|
-
PropTypes.number,
|
|
159
|
-
]),
|
|
160
134
|
};
|
|
161
135
|
|
|
162
|
-
export const ToggleWithGlobalProps =
|
|
136
|
+
export const ToggleWithGlobalProps = withGlobalProps(Toggle, 'Toggle');
|
|
163
137
|
|
|
164
138
|
export default ToggleWithGlobalProps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default } from './Toggle';
|
|
1
|
+
export { default as Toggle } from './Toggle';
|
|
@@ -11,12 +11,14 @@ import {
|
|
|
11
11
|
Props,
|
|
12
12
|
} from 'docz'
|
|
13
13
|
import { Placeholder } from '../../../docs/_components/Placeholder/Placeholder'
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
import {
|
|
15
|
+
CheckboxField,
|
|
16
|
+
Button,
|
|
17
|
+
ButtonGroup,
|
|
18
|
+
Toolbar,
|
|
19
|
+
ToolbarGroup,
|
|
20
|
+
ToolbarItem,
|
|
21
|
+
} from '../..'
|
|
20
22
|
|
|
21
23
|
The responsive Toolbar layout is a versatile tool that allows spacing, grouping,
|
|
22
24
|
and aligning inline items.
|
|
@@ -333,6 +335,17 @@ Or to build a classic media layout with image on the left and text on the right:
|
|
|
333
335
|
</Toolbar>
|
|
334
336
|
</Playground>
|
|
335
337
|
|
|
338
|
+
## Forwarding HTML Attributes
|
|
339
|
+
|
|
340
|
+
In addition to the options below in the [component's API](#api) section, you
|
|
341
|
+
can specify [React synthetic events] or **any HTML attribute you like.** All
|
|
342
|
+
attributes that don't interfere with the API are forwarded to the root `<div>`
|
|
343
|
+
HTML element. This enables making the component interactive and helps to improve
|
|
344
|
+
its accessibility.
|
|
345
|
+
|
|
346
|
+
👉 Refer to the MDN reference for the full list of supported attributes of the
|
|
347
|
+
[div] element.
|
|
348
|
+
|
|
336
349
|
## API
|
|
337
350
|
|
|
338
351
|
<Props table of={Toolbar} />
|
|
@@ -361,3 +374,5 @@ A wrapper for individual toolbar items.
|
|
|
361
374
|
[grid]: /components/grid
|
|
362
375
|
[spacing]: /css-helpers/spacing
|
|
363
376
|
[text]: /components/text
|
|
377
|
+
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
378
|
+
[div]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div#attributes
|