@react-ui-org/react-ui 0.45.0 → 0.46.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|