@react-ui-org/react-ui 0.45.0 → 0.46.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/CONTRIBUTING.md +7 -0
- package/dist/lib.development.js +113 -89
- package/dist/lib.js +1 -1
- package/package.json +4 -4
- package/src/lib/components/Badge/Badge.jsx +1 -4
- package/src/lib/components/Button/README.mdx +1 -1
- package/src/lib/components/ButtonGroup/ButtonGroup.jsx +30 -22
- package/src/lib/components/Card/CardBody.jsx +5 -11
- package/src/lib/components/Card/CardFooter.jsx +10 -5
- package/src/lib/components/CheckboxField/CheckboxField.jsx +9 -9
- package/src/lib/components/CheckboxField/CheckboxField.scss +1 -1
- package/src/lib/components/CheckboxField/README.mdx +1 -1
- package/src/lib/components/FileInputField/README.mdx +1 -1
- package/src/lib/components/FormLayout/FormLayout.jsx +11 -10
- package/src/lib/components/FormLayout/FormLayoutCustomField.jsx +6 -1
- package/src/lib/components/FormLayout/README.mdx +7 -9
- package/src/lib/components/Grid/Grid.jsx +3 -2
- package/src/lib/components/Grid/GridSpan.jsx +3 -2
- package/src/lib/components/List/List.jsx +3 -2
- package/src/lib/components/List/ListItem.jsx +3 -2
- package/src/lib/components/Media/Media.jsx +12 -5
- package/src/lib/components/Media/MediaBody.jsx +18 -7
- package/src/lib/components/Media/MediaObject.jsx +18 -7
- package/src/lib/components/Modal/Modal.jsx +2 -1
- package/src/lib/components/Paper/Paper.jsx +1 -2
- package/src/lib/components/Radio/README.mdx +1 -1
- package/src/lib/components/Radio/Radio.scss +1 -1
- package/src/lib/components/ScrollView/README.mdx +3 -0
- package/src/lib/components/ScrollView/ScrollView.jsx +2 -1
- package/src/lib/components/SelectField/README.mdx +1 -1
- package/src/lib/components/Tabs/Tabs.jsx +1 -2
- package/src/lib/components/Text/README.mdx +1 -1
- package/src/lib/components/Text/Text.jsx +8 -2
- package/src/lib/components/Text/Text.scss +12 -2
- package/src/lib/components/Text/_helpers/getRootClampClassName.js +11 -0
- package/src/lib/components/TextArea/README.mdx +1 -1
- package/src/lib/components/TextArea/TextArea.jsx +4 -1
- package/src/lib/components/TextField/README.mdx +1 -1
- package/src/lib/components/TextLink/README.mdx +77 -0
- package/src/lib/components/{Link/Link.jsx → TextLink/TextLink.jsx} +11 -12
- package/src/lib/components/TextLink/TextLink.scss +11 -0
- package/src/lib/components/TextLink/_theme.scss +4 -0
- package/src/lib/components/TextLink/index.js +1 -0
- package/src/lib/components/Toggle/README.mdx +1 -1
- package/src/lib/components/Toggle/Toggle.jsx +9 -9
- package/src/lib/components/Toggle/Toggle.scss +1 -1
- package/src/lib/components/Toolbar/README.mdx +16 -0
- package/src/lib/components/Toolbar/Toolbar.jsx +18 -10
- package/src/lib/components/Toolbar/Toolbar.scss +13 -8
- package/src/lib/components/Toolbar/ToolbarGroup.jsx +13 -9
- package/src/lib/components/Toolbar/ToolbarItem.jsx +26 -7
- package/src/lib/components/_helpers/isChildrenEmpty.js +3 -0
- package/src/lib/index.js +1 -1
- package/src/lib/styles/tools/_reset.scss +4 -1
- package/src/lib/styles/tools/form-fields/_box-field-layout.scss +3 -3
- package/src/lib/styles/tools/form-fields/_inline-field-elements.scss +12 -1
- package/src/lib/styles/tools/form-fields/_inline-field-layout.scss +46 -5
- package/src/lib/theme.scss +6 -6
- package/src/lib/components/Link/Link.scss +0 -11
- package/src/lib/components/Link/README.mdx +0 -85
- package/src/lib/components/Link/_theme.scss +0 -4
- package/src/lib/components/Link/index.js +0 -1
@@ -18,7 +18,6 @@ export const Tabs = ({
|
|
18
18
|
);
|
19
19
|
|
20
20
|
Tabs.defaultProps = {
|
21
|
-
children: null,
|
22
21
|
id: undefined,
|
23
22
|
};
|
24
23
|
|
@@ -26,7 +25,7 @@ Tabs.propTypes = {
|
|
26
25
|
/**
|
27
26
|
* Nested `TabsItem` elements.
|
28
27
|
*/
|
29
|
-
children: PropTypes.node,
|
28
|
+
children: PropTypes.node.isRequired,
|
30
29
|
/**
|
31
30
|
* ID of the root HTML element. It also serves as base for nested element:
|
32
31
|
* * `<ID>__list`
|
@@ -2,6 +2,8 @@ import PropTypes from 'prop-types';
|
|
2
2
|
import React from 'react';
|
3
3
|
import { withProviderContext } from '../../provider';
|
4
4
|
import { classNames } from '../../utils/classNames';
|
5
|
+
import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
|
6
|
+
import { getRootClampClassName } from './_helpers/getRootClampClassName';
|
5
7
|
import { getRootHyphensClassName } from './_helpers/getRootHyphensClassName';
|
6
8
|
import { getRootWordWrappingClassName } from './_helpers/getRootWordWrappingClassName';
|
7
9
|
import styles from './Text.scss';
|
@@ -14,19 +16,23 @@ export const Text = ({
|
|
14
16
|
lines,
|
15
17
|
wordWrapping,
|
16
18
|
}) => {
|
19
|
+
if (isChildrenEmpty(children)) {
|
20
|
+
return null;
|
21
|
+
}
|
22
|
+
|
17
23
|
const HtmlElement = blockLevel ? 'div' : 'span';
|
18
24
|
|
19
25
|
return (
|
20
26
|
<HtmlElement
|
21
27
|
className={(hyphens !== 'none' || lines > 0 || wordWrapping !== 'normal')
|
22
28
|
? classNames(
|
23
|
-
(lines
|
29
|
+
getRootClampClassName(lines, styles),
|
24
30
|
getRootHyphensClassName(hyphens, styles),
|
25
31
|
getRootWordWrappingClassName(wordWrapping, styles),
|
26
32
|
)
|
27
33
|
: undefined}
|
28
34
|
id={id}
|
29
|
-
style={(lines >
|
35
|
+
style={(lines > 1) ? { '--rui-custom-lines': lines } : undefined}
|
30
36
|
>
|
31
37
|
{children}
|
32
38
|
</HtmlElement>
|
@@ -1,10 +1,20 @@
|
|
1
1
|
// 1. `word-break: break-word` is deprecated in favour of `overflow-wrap: anywhere`, but it's still
|
2
2
|
// required for Safari.
|
3
3
|
// https://caniuse.com/mdn-css_properties_overflow-wrap_anywhere
|
4
|
+
//
|
5
|
+
// 2. Different approaches are used for single and multiline texts because the latter approach
|
6
|
+
// doesn't always work for single-line texts.
|
7
|
+
|
8
|
+
.rootClampSingleLine {
|
9
|
+
display: block; // 2.
|
10
|
+
overflow: hidden;
|
11
|
+
text-overflow: ellipsis;
|
12
|
+
white-space: nowrap;
|
13
|
+
}
|
4
14
|
|
5
15
|
// stylelint-disable property-no-vendor-prefix, value-no-vendor-prefix
|
6
|
-
.
|
7
|
-
display: -webkit-box;
|
16
|
+
.rootClampMultiLine {
|
17
|
+
display: -webkit-box; // 2.
|
8
18
|
-webkit-line-clamp: var(--rui-custom-lines);
|
9
19
|
-webkit-box-orient: vertical;
|
10
20
|
overflow: hidden;
|
@@ -350,7 +350,7 @@ It's possible to disable the whole input.
|
|
350
350
|
|
351
351
|
In addition to the options below, you can specify [React synthetic events] or
|
352
352
|
any custom HTML attributes that do not interfere with the API, and they will be
|
353
|
-
passed to the
|
353
|
+
passed to the `<textarea>` HTML element. This enables making the component
|
354
354
|
interactive and helps improve its [accessibility](#forwarding-html-attributes).
|
355
355
|
|
356
356
|
<Props table of={TextArea} />
|
@@ -192,7 +192,10 @@ TextArea.propTypes = {
|
|
192
192
|
/**
|
193
193
|
* Value of the input.
|
194
194
|
*/
|
195
|
-
value: PropTypes.
|
195
|
+
value: PropTypes.oneOfType([
|
196
|
+
PropTypes.string,
|
197
|
+
PropTypes.number,
|
198
|
+
]),
|
196
199
|
/**
|
197
200
|
* Design variant of the field, further customizable with CSS custom properties.
|
198
201
|
*/
|
@@ -493,7 +493,7 @@ It's possible to disable the whole input.
|
|
493
493
|
|
494
494
|
In addition to the options below, you can specify [React synthetic events] or
|
495
495
|
any custom HTML attributes that do not interfere with the API, and they will be
|
496
|
-
passed to the
|
496
|
+
passed to the `<input>` HTML element. This enables making the component
|
497
497
|
interactive and helps improve its [accessibility](#forwarding-html-attributes).
|
498
498
|
|
499
499
|
<Props table of={TextField} />
|
@@ -0,0 +1,77 @@
|
|
1
|
+
---
|
2
|
+
name: TextLink
|
3
|
+
menu: 'Actions'
|
4
|
+
route: /components/text-link
|
5
|
+
---
|
6
|
+
|
7
|
+
# TextLink
|
8
|
+
|
9
|
+
import {
|
10
|
+
Playground,
|
11
|
+
Props,
|
12
|
+
} from 'docz'
|
13
|
+
import { TextLink } from './TextLink'
|
14
|
+
|
15
|
+
TextLink allows users to follow navigation.
|
16
|
+
|
17
|
+
## Basic Usage
|
18
|
+
|
19
|
+
To implement the TextLink component, you need to import it first:
|
20
|
+
|
21
|
+
```js
|
22
|
+
import { TextLink } from '@react-ui-org/react-ui';
|
23
|
+
```
|
24
|
+
|
25
|
+
And use it:
|
26
|
+
|
27
|
+
<Playground>
|
28
|
+
<TextLink
|
29
|
+
href="/contribute/guidelines"
|
30
|
+
label="How can I contribute to React UI?"
|
31
|
+
/>
|
32
|
+
</Playground>
|
33
|
+
|
34
|
+
See [API](#api) for all available options.
|
35
|
+
|
36
|
+
## General Guidelines
|
37
|
+
|
38
|
+
**Avoid using links for actions**, use a [Button](/components/button)
|
39
|
+
instead. This is because users expect navigation to happen when clicking on
|
40
|
+
something what looks like a link.
|
41
|
+
|
42
|
+
## Custom Routing
|
43
|
+
|
44
|
+
It's common to use custom function for routing within SPAs. Use the
|
45
|
+
`onClick` option to provide such function.
|
46
|
+
|
47
|
+
<Playground>
|
48
|
+
<TextLink
|
49
|
+
href="/contribute/guidelines"
|
50
|
+
label="This link is controlled by custom function"
|
51
|
+
onClick={(event) => {
|
52
|
+
event.preventDefault();
|
53
|
+
alert('You will be redirected.')
|
54
|
+
window.location = event.currentTarget.getAttribute('href');
|
55
|
+
}}
|
56
|
+
/>
|
57
|
+
</Playground>
|
58
|
+
|
59
|
+
## API
|
60
|
+
|
61
|
+
In addition to the options below, you can specify [React synthetic events] or
|
62
|
+
any custom HTML attributes that do not interfere with the API, and they will be
|
63
|
+
passed to the `<a>` HTML element. This enables making the component interactive
|
64
|
+
and helps improve its accessibility.
|
65
|
+
|
66
|
+
<Props table of={TextLink} />
|
67
|
+
|
68
|
+
## Theming
|
69
|
+
|
70
|
+
| Custom Property | Description |
|
71
|
+
|------------------------------------------|-----------------------------------|
|
72
|
+
| `--rui-TextLink__color` | Text color |
|
73
|
+
| `--rui-TextLink__text-decoration` | Text decoration, e.g. underline |
|
74
|
+
| `--rui-TextLink--hover__color` | Text color on hover |
|
75
|
+
| `--rui-TextLink--hover__text-decoration` | Text decoration on hover |
|
76
|
+
|
77
|
+
[React synthetic events]: https://reactjs.org/docs/events.html
|
@@ -2,12 +2,12 @@ import PropTypes from 'prop-types';
|
|
2
2
|
import React from 'react';
|
3
3
|
import { withProviderContext } from '../../provider';
|
4
4
|
import { transferProps } from '../_helpers/transferProps';
|
5
|
-
import styles from './
|
5
|
+
import styles from './TextLink.scss';
|
6
6
|
|
7
|
-
export const
|
8
|
-
children,
|
7
|
+
export const TextLink = ({
|
9
8
|
href,
|
10
9
|
id,
|
10
|
+
label,
|
11
11
|
...restProps
|
12
12
|
}) => (
|
13
13
|
<a
|
@@ -16,20 +16,15 @@ export const Link = ({
|
|
16
16
|
className={styles.root}
|
17
17
|
id={id}
|
18
18
|
>
|
19
|
-
{
|
19
|
+
{label}
|
20
20
|
</a>
|
21
21
|
);
|
22
22
|
|
23
|
-
|
24
|
-
children: null,
|
23
|
+
TextLink.defaultProps = {
|
25
24
|
id: undefined,
|
26
25
|
};
|
27
26
|
|
28
|
-
|
29
|
-
/**
|
30
|
-
* Content of the link.
|
31
|
-
*/
|
32
|
-
children: PropTypes.node,
|
27
|
+
TextLink.propTypes = {
|
33
28
|
/**
|
34
29
|
* Link's `href` attribute.
|
35
30
|
*/
|
@@ -38,8 +33,12 @@ Link.propTypes = {
|
|
38
33
|
* ID of the root HTML element.
|
39
34
|
*/
|
40
35
|
id: PropTypes.string,
|
36
|
+
/**
|
37
|
+
* Link label.
|
38
|
+
*/
|
39
|
+
label: PropTypes.string.isRequired,
|
41
40
|
};
|
42
41
|
|
43
|
-
export const LinkWithContext = withProviderContext(
|
42
|
+
export const LinkWithContext = withProviderContext(TextLink, 'Link');
|
44
43
|
|
45
44
|
export default LinkWithContext;
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default } from './TextLink';
|
@@ -181,7 +181,7 @@ Disabled state makes the input unavailable.
|
|
181
181
|
|
182
182
|
In addition to the options below, you can specify [React synthetic events] or
|
183
183
|
any custom HTML attributes that do not interfere with the API, and they will be
|
184
|
-
passed to the
|
184
|
+
passed to the `<input>` HTML element. This enables making the component
|
185
185
|
interactive and helps improve its accessibility.
|
186
186
|
|
187
187
|
<Props table of={Toggle} />
|
@@ -40,6 +40,15 @@ export const Toggle = ({
|
|
40
40
|
id={id && `${id}__label`}
|
41
41
|
>
|
42
42
|
<div className={styles.field}>
|
43
|
+
<div
|
44
|
+
className={classNames(
|
45
|
+
styles.label,
|
46
|
+
!isLabelVisible && styles.isLabelHidden,
|
47
|
+
)}
|
48
|
+
id={id && `${id}__labelText`}
|
49
|
+
>
|
50
|
+
{label}
|
51
|
+
</div>
|
43
52
|
<input
|
44
53
|
{...transferProps(restProps)}
|
45
54
|
checked={checked}
|
@@ -52,15 +61,6 @@ export const Toggle = ({
|
|
52
61
|
type="checkbox"
|
53
62
|
value={value}
|
54
63
|
/>
|
55
|
-
<div
|
56
|
-
className={classNames(
|
57
|
-
styles.label,
|
58
|
-
!isLabelVisible && styles.isLabelHidden,
|
59
|
-
)}
|
60
|
-
id={id && `${id}__labelText`}
|
61
|
-
>
|
62
|
-
{label}
|
63
|
-
</div>
|
64
64
|
</div>
|
65
65
|
{helpText && (
|
66
66
|
<div
|
@@ -304,6 +304,22 @@ Toolbar.
|
|
304
304
|
content placed within Toolbar. The [Text][text] component is designed
|
305
305
|
specifically for this kind of job.
|
306
306
|
|
307
|
+
## Flexible Items
|
308
|
+
|
309
|
+
Toolbar items can be made flexible to grow and shrink according to the available
|
310
|
+
space. This is useful e.g. when you need to combine text with an action.
|
311
|
+
|
312
|
+
<Playground>
|
313
|
+
<Toolbar>
|
314
|
+
<ToolbarItem flexible>
|
315
|
+
<Placeholder bordered>My Headline</Placeholder>
|
316
|
+
</ToolbarItem>
|
317
|
+
<ToolbarItem>
|
318
|
+
<Placeholder bordered>Action</Placeholder>
|
319
|
+
</ToolbarItem>
|
320
|
+
</Toolbar>
|
321
|
+
</Playground>
|
322
|
+
|
307
323
|
## API
|
308
324
|
|
309
325
|
<Props table of={Toolbar} />
|
@@ -2,16 +2,19 @@ import PropTypes from 'prop-types';
|
|
2
2
|
import React from 'react';
|
3
3
|
import { withProviderContext } from '../../provider';
|
4
4
|
import { classNames } from '../../utils/classNames';
|
5
|
+
import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
|
5
6
|
import styles from './Toolbar.scss';
|
6
7
|
|
7
|
-
export const Toolbar = (
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
export const Toolbar = ({
|
9
|
+
align,
|
10
|
+
children,
|
11
|
+
dense,
|
12
|
+
justify,
|
13
|
+
nowrap,
|
14
|
+
}) => {
|
15
|
+
if (isChildrenEmpty(children)) {
|
16
|
+
return null;
|
17
|
+
}
|
15
18
|
|
16
19
|
const alignClass = (value) => {
|
17
20
|
if (value === 'top') {
|
@@ -62,6 +65,7 @@ export const Toolbar = (props) => {
|
|
62
65
|
|
63
66
|
Toolbar.defaultProps = {
|
64
67
|
align: 'top',
|
68
|
+
children: null,
|
65
69
|
dense: false,
|
66
70
|
justify: 'start',
|
67
71
|
nowrap: false,
|
@@ -73,9 +77,13 @@ Toolbar.propTypes = {
|
|
73
77
|
*/
|
74
78
|
align: PropTypes.oneOf(['top', 'middle', 'bottom', 'baseline']),
|
75
79
|
/**
|
76
|
-
*
|
80
|
+
* Nested elements. Supported types are:
|
81
|
+
* * `ToolbarItems`
|
82
|
+
* * `ToolbarGroups`
|
83
|
+
*
|
84
|
+
* If none are provided nothing is rendered.
|
77
85
|
*/
|
78
|
-
children: PropTypes.node
|
86
|
+
children: PropTypes.node,
|
79
87
|
/**
|
80
88
|
* If `true`, spacing of all toolbar items in the toolbar will be reduced.
|
81
89
|
*/
|
@@ -22,6 +22,11 @@
|
|
22
22
|
margin: theme.$gap;
|
23
23
|
}
|
24
24
|
|
25
|
+
.isItemFlexible {
|
26
|
+
flex: 1;
|
27
|
+
min-width: 0;
|
28
|
+
}
|
29
|
+
|
25
30
|
.isAlignedToTop {
|
26
31
|
align-items: flex-start;
|
27
32
|
}
|
@@ -54,14 +59,6 @@
|
|
54
59
|
justify-content: space-between;
|
55
60
|
}
|
56
61
|
|
57
|
-
.isNowrap {
|
58
|
-
flex-wrap: nowrap;
|
59
|
-
}
|
60
|
-
|
61
|
-
.isNowrap > .item {
|
62
|
-
flex: 0 1 auto;
|
63
|
-
}
|
64
|
-
|
65
62
|
.isDense {
|
66
63
|
margin: calc(-1 * #{theme.$gap-dense});
|
67
64
|
}
|
@@ -74,6 +71,14 @@
|
|
74
71
|
margin: 0;
|
75
72
|
}
|
76
73
|
|
74
|
+
.isNowrap {
|
75
|
+
flex-wrap: nowrap;
|
76
|
+
}
|
77
|
+
|
78
|
+
.isNowrap > .item:not(.isItemFlexible) {
|
79
|
+
flex: 0 1 auto;
|
80
|
+
}
|
81
|
+
|
77
82
|
.toolbar.isDense {
|
78
83
|
@include spacing.bottom(layouts, $compensation: theme.$gap-dense);
|
79
84
|
}
|
@@ -2,15 +2,18 @@ import PropTypes from 'prop-types';
|
|
2
2
|
import React from 'react';
|
3
3
|
import { withProviderContext } from '../../provider';
|
4
4
|
import { classNames } from '../../utils/classNames';
|
5
|
+
import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
|
5
6
|
import styles from './Toolbar.scss';
|
6
7
|
|
7
|
-
export const ToolbarGroup = (
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
export const ToolbarGroup = ({
|
9
|
+
align,
|
10
|
+
children,
|
11
|
+
dense,
|
12
|
+
nowrap,
|
13
|
+
}) => {
|
14
|
+
if (isChildrenEmpty(children)) {
|
15
|
+
return null;
|
16
|
+
}
|
14
17
|
|
15
18
|
const alignClass = (value) => {
|
16
19
|
if (value === 'top') {
|
@@ -44,6 +47,7 @@ export const ToolbarGroup = (props) => {
|
|
44
47
|
|
45
48
|
ToolbarGroup.defaultProps = {
|
46
49
|
align: 'top',
|
50
|
+
children: null,
|
47
51
|
dense: false,
|
48
52
|
nowrap: false,
|
49
53
|
};
|
@@ -54,9 +58,9 @@ ToolbarGroup.propTypes = {
|
|
54
58
|
*/
|
55
59
|
align: PropTypes.oneOf(['top', 'middle', 'bottom', 'baseline']),
|
56
60
|
/**
|
57
|
-
* Grouped ToolbarItems.
|
61
|
+
* Grouped ToolbarItems. If none are provided nothing is rendered.
|
58
62
|
*/
|
59
|
-
children: PropTypes.node
|
63
|
+
children: PropTypes.node,
|
60
64
|
/**
|
61
65
|
* If `true`, spacing of toolbar items in the group will be reduced.
|
62
66
|
*/
|
@@ -1,25 +1,44 @@
|
|
1
1
|
import PropTypes from 'prop-types';
|
2
2
|
import React from 'react';
|
3
|
+
import { classNames } from '../../utils/classNames';
|
3
4
|
import { withProviderContext } from '../../provider';
|
5
|
+
import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
|
4
6
|
import styles from './Toolbar.scss';
|
5
7
|
|
6
|
-
export const ToolbarItem = (
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
export const ToolbarItem = ({
|
9
|
+
children,
|
10
|
+
flexible,
|
11
|
+
}) => {
|
12
|
+
if (isChildrenEmpty(children)) {
|
13
|
+
return null;
|
14
|
+
}
|
10
15
|
|
11
16
|
return (
|
12
|
-
<div
|
17
|
+
<div
|
18
|
+
className={classNames(
|
19
|
+
styles.item,
|
20
|
+
flexible && styles.isItemFlexible,
|
21
|
+
)}
|
22
|
+
>
|
13
23
|
{children}
|
14
24
|
</div>
|
15
25
|
);
|
16
26
|
};
|
17
27
|
|
28
|
+
ToolbarItem.defaultProps = {
|
29
|
+
children: null,
|
30
|
+
flexible: false,
|
31
|
+
};
|
32
|
+
|
18
33
|
ToolbarItem.propTypes = {
|
19
34
|
/**
|
20
|
-
* Content of the toolbar item.
|
35
|
+
* Content of the toolbar item. If none are provided nothing is rendered.
|
36
|
+
*/
|
37
|
+
children: PropTypes.node,
|
38
|
+
/**
|
39
|
+
* Allow item to grow and shrink if needed.
|
21
40
|
*/
|
22
|
-
|
41
|
+
flexible: PropTypes.bool,
|
23
42
|
};
|
24
43
|
|
25
44
|
export const ToolbarItemWithContext = withProviderContext(ToolbarItem, 'ToolbarItem');
|
package/src/lib/index.js
CHANGED
@@ -18,7 +18,6 @@ export {
|
|
18
18
|
Grid,
|
19
19
|
GridSpan,
|
20
20
|
} from './components/Grid';
|
21
|
-
export { default as Link } from './components/Link';
|
22
21
|
export {
|
23
22
|
List,
|
24
23
|
ListItem,
|
@@ -41,6 +40,7 @@ export { default as Table } from './components/Table';
|
|
41
40
|
export { default as Text } from './components/Text';
|
42
41
|
export { default as TextArea } from './components/TextArea';
|
43
42
|
export { default as TextField } from './components/TextField';
|
43
|
+
export { default as TextLink } from './components/TextLink';
|
44
44
|
export { default as Toggle } from './components/Toggle';
|
45
45
|
export {
|
46
46
|
Toolbar,
|
@@ -5,9 +5,9 @@
|
|
5
5
|
// 2. Form fields in horizontal layout also take up only as much space as they need. Labels do not
|
6
6
|
// wrap until label width limit is reached (50 % of available horizontal space by default).
|
7
7
|
//
|
8
|
-
// 3.
|
9
|
-
//
|
10
|
-
//
|
8
|
+
// 3. Help texts and validation messages are aligned below input and wrapped. Their width is always
|
9
|
+
// limited to the width of the input field so they don't shift adjacent elements when they show
|
10
|
+
// up. This applies unless the field is inside FormLayout (see 10).
|
11
11
|
//
|
12
12
|
// 4. Define grid spacing as padding of child elements because grid areas make row and column gaps
|
13
13
|
// show up even when not necessary.
|
@@ -6,6 +6,8 @@
|
|
6
6
|
//
|
7
7
|
// 3. Reset extra space previously added to symmetrically pad the field in FormLayout context as
|
8
8
|
// there already is a sufficient row gap provided by FormLayout.
|
9
|
+
//
|
10
|
+
// 4. Destroy tap target when subgrid is not supported.
|
9
11
|
|
10
12
|
@use "../../theme/typography";
|
11
13
|
@use "../../theme/form-fields" as theme;
|
@@ -93,7 +95,16 @@
|
|
93
95
|
padding-top: 0;
|
94
96
|
|
95
97
|
&::before {
|
96
|
-
top: calc((#{typography.$line-height-base} -
|
98
|
+
top: calc((1rem * #{typography.$line-height-base} - #{theme.$check-tap-target-size}) / 2);
|
99
|
+
}
|
100
|
+
}
|
101
|
+
|
102
|
+
&.isRootInFormLayout.rootLayoutHorizontal::before {
|
103
|
+
grid-column-start: 2;
|
104
|
+
|
105
|
+
// 4.
|
106
|
+
@supports not (grid-template-columns: subgrid) {
|
107
|
+
display: none;
|
97
108
|
}
|
98
109
|
}
|
99
110
|
}
|