suomifi-ui-components
Version:
Suomi.fi UI component library
143 lines (140 loc) • 6.77 kB
JavaScript
import { __extends, __rest, __assign, __makeTemplateObject } from 'tslib';
import React, { Component, forwardRef } from 'react';
import { styled } from 'styled-components';
import classnames from 'classnames';
import { getConditionalAriaProp } from '../../../utils/aria/aria.js';
import { SuomifiThemeConsumer } from '../../theme/SuomifiThemeProvider/SuomifiThemeProvider.js';
import '../../theme/SuomifiTheme/SuomifiTheme.js';
import { SpacingConsumer } from '../../theme/SpacingProvider/SpacingProvider.js';
import { separateMarginProps } from '../../theme/utils/spacing.js';
import '../../../reset/HtmlA/HtmlA.js';
import '../../../reset/HtmlButton/HtmlButton.js';
import { HtmlDivWithRef, HtmlDiv } from '../../../reset/HtmlDiv/HtmlDiv.js';
import { HtmlFieldSet } from '../../../reset/HtmlFieldSet/HtmlFieldSet.js';
import '../../../reset/HtmlH/HtmlH.js';
import '../../../reset/HtmlInput/HtmlInput.js';
import '../../../reset/HtmlLabel/HtmlLabel.js';
import { HtmlLegend } from '../../../reset/HtmlLegend/HtmlLegend.js';
import '../../../reset/HtmlLi/HtmlLi.js';
import '../../../reset/HtmlNav/HtmlNav.js';
import '../../../reset/HtmlOl/HtmlOl.js';
import '../../../reset/HtmlSpan/HtmlSpan.js';
import '../../../reset/HtmlTextarea/HtmlTextarea.js';
import '../../../reset/HtmlUl/HtmlUl.js';
import '../../../reset/HtmlTable/HtmlTable.js';
import '../../../reset/HtmlTable/HtmlTableCaption.js';
import '../../../reset/HtmlTable/HtmlTableHeader.js';
import '../../../reset/HtmlTable/HtmlTableRow.js';
import '../../../reset/HtmlTable/HtmlTableBody.js';
import '../../../reset/HtmlTable/HtmlTableHeaderCell.js';
import '../../../reset/HtmlTable/HtmlTableCell.js';
import { Label } from '../Label/Label.js';
import { HintText } from '../HintText/HintText.js';
import { StatusText } from '../StatusText/StatusText.js';
import { baseStyles } from './CheckboxGroup.baseStyles.js';
import { AutoId } from '../../utils/AutoId/AutoId.js';
import { VisuallyHidden } from '../../VisuallyHidden/VisuallyHidden.js';
import { filterDuplicateKeys } from '../../../utils/common/common.js';
var baseClassName = 'fi-checkbox-group';
var checkboxGroupClassNames = {
legend: "".concat(baseClassName, "_legend"),
legendWithMargin: "".concat(baseClassName, "_legend--with-margin"),
labelWithMargin: "".concat(baseClassName, "_label--with-margin"),
container: "".concat(baseClassName, "_container"),
statusTextHasContent: "".concat(baseClassName, "_statusText--has-content")
};
var defaultProviderValue = {};
var _a = /*#__PURE__*/React.createContext(defaultProviderValue),
Provider = _a.Provider,
CheckboxGroupConsumer = _a.Consumer;
var BaseCheckboxGroup = function (_super) {
__extends(BaseCheckboxGroup, _super);
function BaseCheckboxGroup() {
return _super !== null && _super.apply(this, arguments) || this;
}
BaseCheckboxGroup.prototype.render = function () {
var _a, _b, _c;
var _d = this.props,
children = _d.children,
className = _d.className;
_d.theme;
var labelText = _d.labelText,
labelMode = _d.labelMode,
optionalText = _d.optionalText,
groupHintText = _d.groupHintText,
id = _d.id,
_e = _d.groupStatus,
groupStatus = _e === void 0 ? 'default' : _e,
groupStatusText = _d.groupStatusText,
tooltipComponent = _d.tooltipComponent,
style = _d.style,
rest = __rest(_d, ["children", "className", "theme", "labelText", "labelMode", "optionalText", "groupHintText", "id", "groupStatus", "groupStatusText", "tooltipComponent", "style"]);
var _f = separateMarginProps(rest),
passProps = _f[1];
var statusTextId = !!groupStatusText ? "".concat(id, "-statusText") : undefined;
return /*#__PURE__*/React.createElement(HtmlDivWithRef, __assign({
className: classnames(baseClassName, className),
id: id
}, passProps, {
style: style
}), /*#__PURE__*/React.createElement(HtmlFieldSet, null, /*#__PURE__*/React.createElement(HtmlLegend, {
className: classnames(checkboxGroupClassNames.legend, (_a = {}, _a[checkboxGroupClassNames.legendWithMargin] = !!groupHintText || labelMode !== 'hidden', _a))
}, /*#__PURE__*/React.createElement(Label, {
htmlFor: id,
labelMode: labelMode,
optionalText: optionalText,
className: classnames((_b = {}, _b[checkboxGroupClassNames.labelWithMargin] = groupHintText && labelMode !== 'hidden', _b)),
tooltipComponent: tooltipComponent
}, labelText), groupHintText && /*#__PURE__*/React.createElement(HintText, null, groupHintText), groupStatusText && ( /*#__PURE__*/React.createElement(VisuallyHidden, __assign({}, getConditionalAriaProp('aria-labelledby', [statusTextId]))))), /*#__PURE__*/React.createElement(HtmlDiv, {
className: checkboxGroupClassNames.container
}, /*#__PURE__*/React.createElement(Provider, {
value: {
status: groupStatus
}
}, children))), /*#__PURE__*/React.createElement(StatusText, {
className: classnames((_c = {}, _c[checkboxGroupClassNames.statusTextHasContent] = !!groupStatusText, _c)),
id: statusTextId,
status: groupStatus
}, groupStatusText));
};
return BaseCheckboxGroup;
}(Component);
var StyledCheckboxGroup = styled(function (_a) {
_a.globalMargins;
var passProps = __rest(_a, ["globalMargins"]);
return /*#__PURE__*/React.createElement(BaseCheckboxGroup, __assign({}, passProps));
}).withConfig({
componentId: "sc-svuo6b-0"
})(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) {
var theme = _a.theme,
globalMargins = _a.globalMargins,
rest = __rest(_a, ["theme", "globalMargins"]);
var _b = separateMarginProps(rest),
marginProps = _b[0];
var cleanedGlobalMargins = filterDuplicateKeys(globalMargins.checkboxGroup, marginProps);
return baseStyles(theme, cleanedGlobalMargins, marginProps);
});
var CheckboxGroup = /*#__PURE__*/forwardRef(function (props, ref) {
var propId = props.id,
passProps = __rest(props, ["id"]);
return /*#__PURE__*/React.createElement(SpacingConsumer, null, function (_a) {
var margins = _a.margins;
return /*#__PURE__*/React.createElement(SuomifiThemeConsumer, null, function (_a) {
var suomifiTheme = _a.suomifiTheme;
return /*#__PURE__*/React.createElement(AutoId, {
id: propId
}, function (id) {
return /*#__PURE__*/React.createElement(StyledCheckboxGroup, __assign({
theme: suomifiTheme,
id: id,
globalMargins: margins,
forwardedRef: ref
}, passProps));
});
});
});
});
CheckboxGroup.displayName = 'CheckboxGroup';
var templateObject_1;
export { CheckboxGroup, CheckboxGroupConsumer };
//# sourceMappingURL=CheckboxGroup.js.map