jobiqo-cl
Version:
[](https://circleci.com/gh/jobiqo/jobiqo-cl)
66 lines (62 loc) • 2.69 kB
JavaScript
import { __rest } from '../../../../../node_modules/tslib/tslib.es6.js';
import React__default from 'react';
import styled from 'styled-components';
import { Grid } from '../../../02-atoms/06-layout/04-grid/index.js';
import { Cell } from '../../../02-atoms/06-layout/04-grid/01-cell/index.js';
/**
* @file index.tsx
*
* @fileoverview Creates a group of several form items and displays them
* together under a single label and description.
*/
const StyledFormGroup = styled.div `
margin: ${props => props.theme.formGroup.margin};
padding: ${props => props.theme.formGroup.padding};
border-top-width: ${props => props.theme.formGroup.borderWidth};
border-top-style: ${props => props.theme.formGroup.borderStyle};
border-top-color: ${props => props.theme.formGroup.borderColor};
&:first-child {
border-top-width: 0px;
padding-top: 0;
margin-top: 0;
}
`;
const StyledLabel = styled.div `
display: flex;
color: ${props => props.valid
? props.theme.colors.success
: props.theme.formGroup.label.color};
text-transform: ${props => props.theme.formGroup.label.textTransform};
letter-spacing: ${props => props.theme.formGroup.label.letterSpacing};
font-weight: ${props => props.theme.formGroup.label.fontWeight};
font-size: ${props => props.theme.formGroup.label.fontSize};
svg {
margin-right: 0.5rem;
width: 20px;
height: 20px;
}
`;
const StyledDescription = styled.div `
margin-top: ${props => props.theme.formGroup.description.marginTop};
font-size: ${props => props.theme.formGroup.description.fontSize};
color: ${props => props.valid
? props.theme.colors.success
: props.theme.formGroup.description.color};
`;
/**
* The form group component groups several form items together in a group.
* For longer forms it is recommended to group items together in logical
* groups so that the user can scan the form more easily.
*/
const FormGroup = (_a) => {
var { children, label, description, icon, valid } = _a, props = __rest(_a, ["children", "label", "description", "icon", "valid"]);
return (React__default.createElement(StyledFormGroup, null,
React__default.createElement(Grid, { gridGap: 8, columns: [1, 3], alignItems: "start" },
(label || description) && (React__default.createElement(Cell, { gridColumn: 1 },
React__default.createElement(StyledLabel, { valid: valid },
icon,
label),
React__default.createElement(StyledDescription, { valid: valid }, description))),
React__default.createElement(Cell, { gridColumn: [1, '2 / 4'] }, children))));
};
export { FormGroup };