diff options
Diffstat (limited to 'packages/forms/src/label')
-rw-r--r-- | packages/forms/src/label/index.tsx | 47 | ||||
-rw-r--r-- | packages/forms/src/label/styles.ts | 14 |
2 files changed, 61 insertions, 0 deletions
diff --git a/packages/forms/src/label/index.tsx b/packages/forms/src/label/index.tsx new file mode 100644 index 000000000..36fcfbedf --- /dev/null +++ b/packages/forms/src/label/index.tsx | |||
@@ -0,0 +1,47 @@ | |||
1 | import classnames from 'classnames'; | ||
2 | import { Classes } from 'jss'; | ||
3 | import React, { Component } from 'react'; | ||
4 | import injectSheet from 'react-jss'; | ||
5 | |||
6 | import { IFormField } from '../typings/generic'; | ||
7 | |||
8 | import styles from './styles'; | ||
9 | |||
10 | interface ILabel extends IFormField, React.LabelHTMLAttributes<HTMLLabelElement> { | ||
11 | classes: Classes; | ||
12 | } | ||
13 | |||
14 | class LabelComponent extends Component<ILabel> { | ||
15 | static defaultProps = { | ||
16 | showLabel: true, | ||
17 | }; | ||
18 | |||
19 | render() { | ||
20 | const { | ||
21 | title, | ||
22 | showLabel, | ||
23 | classes, | ||
24 | className, | ||
25 | children, | ||
26 | htmlFor, | ||
27 | } = this.props; | ||
28 | |||
29 | return ( | ||
30 | <label | ||
31 | className={classnames({ | ||
32 | [`${className}`]: className, | ||
33 | })} | ||
34 | htmlFor={htmlFor} | ||
35 | > | ||
36 | {showLabel && ( | ||
37 | <span className={classes.label}>{title}</span> | ||
38 | )} | ||
39 | <div className={classes.content}> | ||
40 | {children} | ||
41 | </div> | ||
42 | </label> | ||
43 | ); | ||
44 | } | ||
45 | } | ||
46 | |||
47 | export const Label = injectSheet(styles)(LabelComponent); | ||
diff --git a/packages/forms/src/label/styles.ts b/packages/forms/src/label/styles.ts new file mode 100644 index 000000000..f3998de04 --- /dev/null +++ b/packages/forms/src/label/styles.ts | |||
@@ -0,0 +1,14 @@ | |||
1 | import { Theme } from '../../../theme/lib'; | ||
2 | |||
3 | export default (theme: Theme) => ({ | ||
4 | content: { | ||
5 | marginTop: 5, | ||
6 | }, | ||
7 | label: { | ||
8 | color: theme.labelColor, | ||
9 | fontSize: theme.uiFontSize, | ||
10 | }, | ||
11 | hasError: { | ||
12 | color: theme.brandDanger, | ||
13 | }, | ||
14 | }); | ||