@react-ui-org/react-ui 0.42.0 → 0.44.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 +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,8 +1,8 @@
|
|
|
1
1
|
@use 'sass:map';
|
|
2
|
-
@use '
|
|
3
|
-
@use '
|
|
4
|
-
@use '
|
|
5
|
-
@use '
|
|
2
|
+
@use '../../styles/theme/borders';
|
|
3
|
+
@use '../../styles/theme/colors';
|
|
4
|
+
@use '../../styles/theme/typography';
|
|
5
|
+
@use '../../styles/tools/spacing';
|
|
6
6
|
|
|
7
7
|
$cell-padding-x: spacing.of(3);
|
|
8
8
|
$cell-padding-y: spacing.of(1);
|
|
File without changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Tabs
|
|
3
|
-
menu: '
|
|
4
|
-
route: /components/
|
|
3
|
+
menu: 'Miscellaneous'
|
|
4
|
+
route: /components/tabs
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Tabs
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
Playground,
|
|
11
11
|
Props,
|
|
12
12
|
} from 'docz'
|
|
13
|
-
import { Icon } from '
|
|
13
|
+
import { Icon } from '../../../docs/_components/Icon/Icon'
|
|
14
14
|
import ScrollView from '../ScrollView'
|
|
15
15
|
import { Tabs } from './Tabs'
|
|
16
16
|
import { TabsItem } from './TabsItem'
|
|
@@ -1,6 +1,6 @@
|
|
|
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 './Tabs.scss';
|
|
5
5
|
|
|
6
6
|
export const Tabs = ({
|
|
@@ -24,12 +24,12 @@ Tabs.defaultProps = {
|
|
|
24
24
|
|
|
25
25
|
Tabs.propTypes = {
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Nested `TabsItem` elements.
|
|
28
28
|
*/
|
|
29
29
|
children: PropTypes.node,
|
|
30
30
|
/**
|
|
31
|
-
* ID of the root HTML element. It also serves as
|
|
32
|
-
* `<ID>__list
|
|
31
|
+
* ID of the root HTML element. It also serves as base for nested element:
|
|
32
|
+
* * `<ID>__list`
|
|
33
33
|
*/
|
|
34
34
|
id: PropTypes.string,
|
|
35
35
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
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 './TabsItem.scss';
|
|
5
5
|
|
|
6
6
|
export const TabsItem = ({
|
|
@@ -63,8 +63,9 @@ TabsItem.propTypes = {
|
|
|
63
63
|
*/
|
|
64
64
|
href: PropTypes.string.isRequired,
|
|
65
65
|
/**
|
|
66
|
-
* ID of the root HTML element. It also serves as
|
|
67
|
-
* `<ID>__link
|
|
66
|
+
* ID of the root HTML element. It also serves as base for nested elements:
|
|
67
|
+
* * `<ID>__link`
|
|
68
|
+
* * `<ID>__label`
|
|
68
69
|
*/
|
|
69
70
|
id: PropTypes.string,
|
|
70
71
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// 1. Keep inactive items under Tabs' decorative bottom border and pop active ones above it.
|
|
2
2
|
|
|
3
|
-
@use '
|
|
4
|
-
@use '
|
|
5
|
-
@use '
|
|
3
|
+
@use '../../styles/tools/breakpoint';
|
|
4
|
+
@use '../../styles/tools/reset';
|
|
5
|
+
@use '../../styles/tools/transition';
|
|
6
6
|
@use 'theme';
|
|
7
7
|
|
|
8
8
|
.root {
|
|
File without changes
|
|
File without changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Text
|
|
3
|
-
menu: '
|
|
4
|
-
route: /components/
|
|
3
|
+
menu: 'Miscellaneous'
|
|
4
|
+
route: /components/text
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Text
|
|
@@ -10,10 +10,10 @@ import {
|
|
|
10
10
|
Playground,
|
|
11
11
|
Props,
|
|
12
12
|
} from 'docz'
|
|
13
|
-
import { Placeholder } from '
|
|
14
|
-
import { Toolbar } from '
|
|
15
|
-
import { ToolbarGroup } from '
|
|
16
|
-
import { ToolbarItem } from '
|
|
13
|
+
import { Placeholder } from '../../../docs/_components/Placeholder/Placeholder'
|
|
14
|
+
import { Toolbar } from '../Toolbar/Toolbar'
|
|
15
|
+
import { ToolbarGroup } from '../Toolbar/ToolbarGroup'
|
|
16
|
+
import { ToolbarItem } from '../Toolbar/ToolbarItem'
|
|
17
17
|
import { Button } from '../Button/Button'
|
|
18
18
|
import { ButtonGroup } from '../ButtonGroup/ButtonGroup'
|
|
19
19
|
import { TextField } from '../TextField/TextField'
|
|
@@ -78,10 +78,10 @@ appended by an ellipsis (`…`).
|
|
|
78
78
|
<Toolbar align="baseline">
|
|
79
79
|
<ToolbarItem>
|
|
80
80
|
<TextField
|
|
81
|
-
changeHandler={(e) => setLines(e.target.value)}
|
|
82
81
|
label="Number of lines"
|
|
83
82
|
min={1}
|
|
84
83
|
max={100}
|
|
84
|
+
onChange={(e) => setLines(e.target.value)}
|
|
85
85
|
type="number"
|
|
86
86
|
value={lines}
|
|
87
87
|
/>
|
|
@@ -156,19 +156,19 @@ will override automatic break point selection in `auto` mode when present.
|
|
|
156
156
|
<ToolbarItem>
|
|
157
157
|
<ButtonGroup aria-labelledby="#word-wrapping-options-label">
|
|
158
158
|
<Button
|
|
159
|
-
label="normal"
|
|
160
|
-
clickHandler={() => setWordWrapping('normal')}
|
|
161
159
|
color={wordWrapping === 'normal' ? 'dark' : 'primary'}
|
|
160
|
+
label="normal"
|
|
161
|
+
onClick={() => setWordWrapping('normal')}
|
|
162
162
|
/>
|
|
163
163
|
<Button
|
|
164
|
-
label="long-words"
|
|
165
|
-
clickHandler={() => setWordWrapping('long-words')}
|
|
166
164
|
color={wordWrapping === 'long-words' ? 'dark' : 'primary'}
|
|
165
|
+
label="long-words"
|
|
166
|
+
onClick={() => setWordWrapping('long-words')}
|
|
167
167
|
/>
|
|
168
168
|
<Button
|
|
169
|
-
label="anywhere"
|
|
170
|
-
clickHandler={() => setWordWrapping('anywhere')}
|
|
171
169
|
color={wordWrapping === 'anywhere' ? 'dark' : 'primary'}
|
|
170
|
+
label="anywhere"
|
|
171
|
+
onClick={() => setWordWrapping('anywhere')}
|
|
172
172
|
/>
|
|
173
173
|
</ButtonGroup>
|
|
174
174
|
</ToolbarItem>
|
|
@@ -180,19 +180,19 @@ will override automatic break point selection in `auto` mode when present.
|
|
|
180
180
|
<ToolbarItem>
|
|
181
181
|
<ButtonGroup aria-labelledby="#hyphens-options-label">
|
|
182
182
|
<Button
|
|
183
|
-
label="none"
|
|
184
|
-
clickHandler={() => setHyphens('none')}
|
|
185
183
|
color={hyphens === 'none' ? 'dark' : 'primary'}
|
|
184
|
+
label="none"
|
|
185
|
+
onClick={() => setHyphens('none')}
|
|
186
186
|
/>
|
|
187
187
|
<Button
|
|
188
|
-
label="auto"
|
|
189
|
-
clickHandler={() => setHyphens('auto')}
|
|
190
188
|
color={hyphens === 'auto' ? 'dark' : 'primary'}
|
|
189
|
+
label="auto"
|
|
190
|
+
onClick={() => setHyphens('auto')}
|
|
191
191
|
/>
|
|
192
192
|
<Button
|
|
193
|
-
label="manual"
|
|
194
|
-
clickHandler={() => setHyphens('manual')}
|
|
195
193
|
color={hyphens === 'manual' ? 'dark' : 'primary'}
|
|
194
|
+
label="manual"
|
|
195
|
+
onClick={() => setHyphens('manual')}
|
|
196
196
|
/>
|
|
197
197
|
</ButtonGroup>
|
|
198
198
|
</ToolbarItem>
|
|
@@ -1,6 +1,6 @@
|
|
|
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 getRootHyphensClassName from './helpers/getRootHyphensClassName';
|
|
5
5
|
import getRootWordWrappingClassName from './helpers/getRootWordWrappingClassName';
|
|
6
6
|
import styles from './Text.scss';
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: TextArea
|
|
3
|
-
menu: '
|
|
4
|
-
route: /components/
|
|
3
|
+
menu: 'Inputs'
|
|
4
|
+
route: /components/text-area
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# TextArea
|
|
@@ -348,10 +348,10 @@ It's possible to disable the whole input.
|
|
|
348
348
|
|
|
349
349
|
## API
|
|
350
350
|
|
|
351
|
-
In addition to the options below, you can
|
|
352
|
-
interfere with the API, and they will be
|
|
353
|
-
|
|
354
|
-
[accessibility](#forwarding-html-attributes).
|
|
351
|
+
In addition to the options below, you can specify [React synthetic events] or
|
|
352
|
+
any custom HTML attributes that do not interfere with the API, and they will be
|
|
353
|
+
passed to the `textarea` HTML element. This enables making the component
|
|
354
|
+
interactive and helps improve its [accessibility](#forwarding-html-attributes).
|
|
355
355
|
|
|
356
356
|
<Props table of={TextArea} />
|
|
357
357
|
|
|
@@ -359,3 +359,5 @@ This is useful mainly to improve component's
|
|
|
359
359
|
|
|
360
360
|
Head to [Forms Theming](/customize/theming/forms) to see shared form theming
|
|
361
361
|
options.
|
|
362
|
+
|
|
363
|
+
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import PropTypes from 'prop-types';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import getRootSizeClassName from '
|
|
4
|
-
import getRootValidationStateClassName from '
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
2
|
+
import React, { useContext } from 'react';
|
|
3
|
+
import getRootSizeClassName from '../../helpers/getRootSizeClassName';
|
|
4
|
+
import getRootValidationStateClassName from '../../helpers/getRootValidationStateClassName';
|
|
5
|
+
import { resolveContextOrProp } from '../../helpers/resolveContextOrProp';
|
|
6
|
+
import { withProviderContext } from '../../provider';
|
|
7
|
+
import transferProps from '../../utils/transferProps';
|
|
8
|
+
import { FormLayoutContext } from '../FormLayout';
|
|
7
9
|
import withForwardedRef from '../withForwardedRef';
|
|
8
10
|
import styles from './TextArea.scss';
|
|
9
11
|
|
|
10
12
|
export const TextArea = ({
|
|
11
|
-
changeHandler,
|
|
12
13
|
cols,
|
|
13
14
|
disabled,
|
|
14
15
|
forwardedRef,
|
|
15
16
|
fullWidth,
|
|
16
17
|
helpText,
|
|
17
18
|
id,
|
|
18
|
-
inFormLayout,
|
|
19
19
|
isLabelVisible,
|
|
20
20
|
label,
|
|
21
21
|
layout,
|
|
@@ -28,79 +28,82 @@ export const TextArea = ({
|
|
|
28
28
|
value,
|
|
29
29
|
variant,
|
|
30
30
|
...restProps
|
|
31
|
-
}) =>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
inFormLayout ? styles.isRootInFormLayout : '',
|
|
37
|
-
layout === 'horizontal' ? styles.rootLayoutHorizontal : styles.rootLayoutVertical,
|
|
38
|
-
disabled ? styles.isRootDisabled : '',
|
|
39
|
-
required ? styles.isRootRequired : '',
|
|
40
|
-
getRootSizeClassName(size, styles),
|
|
41
|
-
getRootValidationStateClassName(validationState, styles),
|
|
42
|
-
variant === 'filled' ? styles.rootVariantFilled : styles.rootVariantOutline,
|
|
43
|
-
].join(' ')}
|
|
44
|
-
htmlFor={id}
|
|
45
|
-
id={id && `${id}__label`}
|
|
46
|
-
>
|
|
47
|
-
<div
|
|
31
|
+
}) => {
|
|
32
|
+
const context = useContext(FormLayoutContext);
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<label
|
|
48
36
|
className={[
|
|
49
|
-
styles.
|
|
50
|
-
|
|
37
|
+
styles.root,
|
|
38
|
+
fullWidth ? styles.isRootFullWidth : '',
|
|
39
|
+
context ? styles.isRootInFormLayout : '',
|
|
40
|
+
resolveContextOrProp(context && context.layout, layout) === 'horizontal'
|
|
41
|
+
? styles.rootLayoutHorizontal
|
|
42
|
+
: styles.rootLayoutVertical,
|
|
43
|
+
disabled ? styles.isRootDisabled : '',
|
|
44
|
+
required ? styles.isRootRequired : '',
|
|
45
|
+
getRootSizeClassName(size, styles),
|
|
46
|
+
getRootValidationStateClassName(validationState, styles),
|
|
47
|
+
variant === 'filled' ? styles.rootVariantFilled : styles.rootVariantOutline,
|
|
51
48
|
].join(' ')}
|
|
52
|
-
|
|
49
|
+
htmlFor={id}
|
|
50
|
+
id={id && `${id}__label`}
|
|
53
51
|
>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
disabled={disabled}
|
|
63
|
-
id={id}
|
|
64
|
-
onChange={changeHandler}
|
|
65
|
-
placeholder={placeholder}
|
|
66
|
-
ref={forwardedRef}
|
|
67
|
-
required={required}
|
|
68
|
-
rows={rows}
|
|
69
|
-
value={value}
|
|
70
|
-
/>
|
|
71
|
-
{variant === 'filled' && (
|
|
72
|
-
<div className={styles.bottomLine} />
|
|
73
|
-
)}
|
|
52
|
+
<div
|
|
53
|
+
className={[
|
|
54
|
+
styles.label,
|
|
55
|
+
isLabelVisible ? '' : styles.isLabelHidden,
|
|
56
|
+
].join(' ')}
|
|
57
|
+
id={id && `${id}__labelText`}
|
|
58
|
+
>
|
|
59
|
+
{label}
|
|
74
60
|
</div>
|
|
75
|
-
{
|
|
76
|
-
<div
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
61
|
+
<div className={styles.field}>
|
|
62
|
+
<div className={styles.inputContainer}>
|
|
63
|
+
<textarea
|
|
64
|
+
{...transferProps(restProps)}
|
|
65
|
+
className={styles.input}
|
|
66
|
+
cols={cols}
|
|
67
|
+
disabled={disabled}
|
|
68
|
+
id={id}
|
|
69
|
+
placeholder={placeholder}
|
|
70
|
+
ref={forwardedRef}
|
|
71
|
+
required={required}
|
|
72
|
+
rows={rows}
|
|
73
|
+
value={value}
|
|
74
|
+
/>
|
|
75
|
+
{variant === 'filled' && (
|
|
76
|
+
<div className={styles.bottomLine} />
|
|
77
|
+
)}
|
|
89
78
|
</div>
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
79
|
+
{helpText && (
|
|
80
|
+
<div
|
|
81
|
+
className={styles.helpText}
|
|
82
|
+
id={id && `${id}__helpText`}
|
|
83
|
+
>
|
|
84
|
+
{helpText}
|
|
85
|
+
</div>
|
|
86
|
+
)}
|
|
87
|
+
{validationText && (
|
|
88
|
+
<div
|
|
89
|
+
className={styles.validationText}
|
|
90
|
+
id={id && `${id}__validationText`}
|
|
91
|
+
>
|
|
92
|
+
{validationText}
|
|
93
|
+
</div>
|
|
94
|
+
)}
|
|
95
|
+
</div>
|
|
96
|
+
</label>
|
|
97
|
+
);
|
|
98
|
+
};
|
|
94
99
|
|
|
95
100
|
TextArea.defaultProps = {
|
|
96
|
-
changeHandler: null,
|
|
97
101
|
cols: null,
|
|
98
102
|
disabled: false,
|
|
99
103
|
forwardedRef: undefined,
|
|
100
104
|
fullWidth: false,
|
|
101
105
|
helpText: null,
|
|
102
106
|
id: undefined,
|
|
103
|
-
inFormLayout: false,
|
|
104
107
|
isLabelVisible: true,
|
|
105
108
|
layout: 'vertical',
|
|
106
109
|
placeholder: null,
|
|
@@ -114,10 +117,6 @@ TextArea.defaultProps = {
|
|
|
114
117
|
};
|
|
115
118
|
|
|
116
119
|
TextArea.propTypes = {
|
|
117
|
-
/**
|
|
118
|
-
* Function to call when the input has changed.
|
|
119
|
-
*/
|
|
120
|
-
changeHandler: PropTypes.func,
|
|
121
120
|
/**
|
|
122
121
|
* The number of visible text columns for the control.
|
|
123
122
|
*/
|
|
@@ -142,15 +141,13 @@ TextArea.propTypes = {
|
|
|
142
141
|
* Optional help text.
|
|
143
142
|
*/
|
|
144
143
|
helpText: PropTypes.node,
|
|
145
|
-
/**
|
|
146
|
-
* ID
|
|
147
|
-
*
|
|
144
|
+
/** ID of the input HTML element. It also serves as a prefix for nested elements:
|
|
145
|
+
* * `<ID>__label`
|
|
146
|
+
* * `<ID>__labelText`
|
|
147
|
+
* * `<ID>__helpText`
|
|
148
|
+
* * `<ID>__validationText`
|
|
148
149
|
*/
|
|
149
150
|
id: PropTypes.string,
|
|
150
|
-
/**
|
|
151
|
-
* Treat the field differently when it's inside a FormLayout. Do not set manually!
|
|
152
|
-
*/
|
|
153
|
-
inFormLayout: PropTypes.bool,
|
|
154
151
|
/**
|
|
155
152
|
* If `false`, the label will be visually hidden (but remains accessible by assistive
|
|
156
153
|
* technologies).
|
|
@@ -162,6 +159,9 @@ TextArea.propTypes = {
|
|
|
162
159
|
label: PropTypes.string.isRequired,
|
|
163
160
|
/**
|
|
164
161
|
* Layout of the field.
|
|
162
|
+
*
|
|
163
|
+
* Ignored if the component is rendered within `FormLayout` component
|
|
164
|
+
* as the value is inherited in such case.
|
|
165
165
|
*/
|
|
166
166
|
layout: PropTypes.oneOf(['horizontal', 'vertical']),
|
|
167
167
|
/**
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
@use '
|
|
2
|
-
@use '
|
|
3
|
-
@use '
|
|
4
|
-
@use '
|
|
5
|
-
@use '
|
|
6
|
-
@use '
|
|
1
|
+
@use '../../styles/tools/form-fields/box-field-elements';
|
|
2
|
+
@use '../../styles/tools/form-fields/box-field-layout';
|
|
3
|
+
@use '../../styles/tools/form-fields/box-field-sizes';
|
|
4
|
+
@use '../../styles/tools/form-fields/foundation';
|
|
5
|
+
@use '../../styles/tools/form-fields/variants';
|
|
6
|
+
@use '../../styles/tools/accessibility';
|
|
7
7
|
|
|
8
8
|
// Foundation
|
|
9
9
|
.root {
|
|
File without changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: TextField
|
|
3
|
-
menu: '
|
|
4
|
-
route: /components/
|
|
3
|
+
menu: 'Inputs'
|
|
4
|
+
route: /components/text-field
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# TextField
|
|
@@ -491,10 +491,10 @@ It's possible to disable the whole input.
|
|
|
491
491
|
|
|
492
492
|
## API
|
|
493
493
|
|
|
494
|
-
In addition to the options below, you can
|
|
495
|
-
interfere with the API, and they will be
|
|
496
|
-
|
|
497
|
-
[accessibility](#forwarding-html-attributes).
|
|
494
|
+
In addition to the options below, you can specify [React synthetic events] or
|
|
495
|
+
any custom HTML attributes that do not interfere with the API, and they will be
|
|
496
|
+
passed to the `input` HTML element. This enables making the component
|
|
497
|
+
interactive and helps improve its [accessibility](#forwarding-html-attributes).
|
|
498
498
|
|
|
499
499
|
<Props table of={TextField} />
|
|
500
500
|
|
|
@@ -513,3 +513,4 @@ Head to [Forms Theming][theming-forms] to see shared form theming options.
|
|
|
513
513
|
[input-tel]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/tel
|
|
514
514
|
[input-password]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password
|
|
515
515
|
[theming-forms]: /customize/theming/forms
|
|
516
|
+
[React synthetic events]: https://reactjs.org/docs/events.html
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import PropTypes from 'prop-types';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import getRootSizeClassName from '
|
|
4
|
-
import getRootValidationStateClassName from '
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
2
|
+
import React, { useContext } from 'react';
|
|
3
|
+
import getRootSizeClassName from '../../helpers/getRootSizeClassName';
|
|
4
|
+
import getRootValidationStateClassName from '../../helpers/getRootValidationStateClassName';
|
|
5
|
+
import { resolveContextOrProp } from '../../helpers/resolveContextOrProp';
|
|
6
|
+
import { withProviderContext } from '../../provider';
|
|
7
|
+
import transferProps from '../../utils/transferProps';
|
|
8
|
+
import { FormLayoutContext } from '../FormLayout';
|
|
7
9
|
import withForwardedRef from '../withForwardedRef';
|
|
8
10
|
import styles from './TextField.scss';
|
|
9
11
|
|
|
10
12
|
const SMALL_INPUT_SIZE = 10;
|
|
11
13
|
|
|
12
14
|
export const TextField = ({
|
|
13
|
-
changeHandler,
|
|
14
15
|
disabled,
|
|
15
16
|
forwardedRef,
|
|
16
17
|
fullWidth,
|
|
17
18
|
helpText,
|
|
18
19
|
id,
|
|
19
|
-
inFormLayout,
|
|
20
20
|
inputSize,
|
|
21
21
|
isLabelVisible,
|
|
22
22
|
label,
|
|
@@ -31,6 +31,7 @@ export const TextField = ({
|
|
|
31
31
|
variant,
|
|
32
32
|
...restProps
|
|
33
33
|
}) => {
|
|
34
|
+
const context = useContext(FormLayoutContext);
|
|
34
35
|
const hasSmallInput = (inputSize !== null) && (inputSize <= SMALL_INPUT_SIZE);
|
|
35
36
|
|
|
36
37
|
return (
|
|
@@ -39,9 +40,10 @@ export const TextField = ({
|
|
|
39
40
|
styles.root,
|
|
40
41
|
fullWidth ? styles.isRootFullWidth : '',
|
|
41
42
|
hasSmallInput ? styles.hasRootSmallInput : '',
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
context ? styles.isRootInFormLayout : '',
|
|
44
|
+
resolveContextOrProp(context && context.layout, layout) === 'horizontal'
|
|
45
|
+
? styles.rootLayoutHorizontal
|
|
46
|
+
: styles.rootLayoutVertical,
|
|
45
47
|
disabled ? styles.isRootDisabled : '',
|
|
46
48
|
required ? styles.isRootRequired : '',
|
|
47
49
|
getRootSizeClassName(size, styles),
|
|
@@ -68,7 +70,6 @@ export const TextField = ({
|
|
|
68
70
|
className={styles.input}
|
|
69
71
|
disabled={disabled}
|
|
70
72
|
id={id}
|
|
71
|
-
onChange={changeHandler}
|
|
72
73
|
placeholder={placeholder}
|
|
73
74
|
ref={forwardedRef}
|
|
74
75
|
required={required}
|
|
@@ -102,13 +103,11 @@ export const TextField = ({
|
|
|
102
103
|
};
|
|
103
104
|
|
|
104
105
|
TextField.defaultProps = {
|
|
105
|
-
changeHandler: null,
|
|
106
106
|
disabled: false,
|
|
107
107
|
forwardedRef: undefined,
|
|
108
108
|
fullWidth: false,
|
|
109
109
|
helpText: null,
|
|
110
110
|
id: undefined,
|
|
111
|
-
inFormLayout: false,
|
|
112
111
|
inputSize: null,
|
|
113
112
|
isLabelVisible: true,
|
|
114
113
|
layout: 'vertical',
|
|
@@ -123,10 +122,6 @@ TextField.defaultProps = {
|
|
|
123
122
|
};
|
|
124
123
|
|
|
125
124
|
TextField.propTypes = {
|
|
126
|
-
/**
|
|
127
|
-
* Function to call when the input has changed.
|
|
128
|
-
*/
|
|
129
|
-
changeHandler: PropTypes.func,
|
|
130
125
|
/**
|
|
131
126
|
* If `true`, the input will be disabled.
|
|
132
127
|
*/
|
|
@@ -148,17 +143,16 @@ TextField.propTypes = {
|
|
|
148
143
|
*/
|
|
149
144
|
helpText: PropTypes.node,
|
|
150
145
|
/**
|
|
151
|
-
* ID of the input HTML element. It also serves as a prefix for
|
|
152
|
-
* `<ID>__label
|
|
146
|
+
* ID of the input HTML element. It also serves as a prefix for nested elements:
|
|
147
|
+
* * `<ID>__label`
|
|
148
|
+
* * `<ID>__labelText`
|
|
149
|
+
* * `<ID>__helpText`
|
|
150
|
+
* * `<ID>__validationText`
|
|
153
151
|
*/
|
|
154
152
|
id: PropTypes.string,
|
|
155
153
|
/**
|
|
156
154
|
* Treat the field differently when it's inside a FormLayout. Do not set manually!
|
|
157
155
|
*/
|
|
158
|
-
inFormLayout: PropTypes.bool,
|
|
159
|
-
/**
|
|
160
|
-
* Width of the input field. Translated as `size` attribute for input types other than `number`.
|
|
161
|
-
*/
|
|
162
156
|
inputSize: PropTypes.number,
|
|
163
157
|
/**
|
|
164
158
|
* If `false`, the label will be visually hidden (but remains accessible by assistive
|
|
@@ -171,6 +165,9 @@ TextField.propTypes = {
|
|
|
171
165
|
label: PropTypes.string.isRequired,
|
|
172
166
|
/**
|
|
173
167
|
* Layout of the field.
|
|
168
|
+
*
|
|
169
|
+
* Ignored if the component is rendered within `FormLayout` component
|
|
170
|
+
* as the value is inherited in such case.
|
|
174
171
|
*/
|
|
175
172
|
layout: PropTypes.oneOf(['horizontal', 'vertical']),
|
|
176
173
|
/**
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
@use '
|
|
2
|
-
@use '
|
|
3
|
-
@use '
|
|
4
|
-
@use '
|
|
5
|
-
@use '
|
|
6
|
-
@use '
|
|
1
|
+
@use '../../styles/tools/form-fields/box-field-elements';
|
|
2
|
+
@use '../../styles/tools/form-fields/box-field-layout';
|
|
3
|
+
@use '../../styles/tools/form-fields/box-field-sizes';
|
|
4
|
+
@use '../../styles/tools/form-fields/foundation';
|
|
5
|
+
@use '../../styles/tools/form-fields/variants';
|
|
6
|
+
@use '../../styles/tools/accessibility';
|
|
7
7
|
|
|
8
8
|
// Foundation
|
|
9
9
|
.root {
|
|
File without changes
|