You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.7 KiB
52 lines
1.7 KiB
import classNames from 'classnames';
|
|
import * as React from 'react';
|
|
import { useContext } from 'react';
|
|
import warning from 'warning';
|
|
import Col from './Col';
|
|
import FormContext from './FormContext';
|
|
import { useBootstrapPrefix } from './ThemeProvider';
|
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
const defaultProps = {
|
|
column: false,
|
|
visuallyHidden: false
|
|
};
|
|
const FormLabel = /*#__PURE__*/React.forwardRef(({
|
|
// Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
|
|
as: Component = 'label',
|
|
bsPrefix,
|
|
column,
|
|
visuallyHidden,
|
|
className,
|
|
htmlFor,
|
|
...props
|
|
}, ref) => {
|
|
const {
|
|
controlId
|
|
} = useContext(FormContext);
|
|
bsPrefix = useBootstrapPrefix(bsPrefix, 'form-label');
|
|
let columnClass = 'col-form-label';
|
|
if (typeof column === 'string') columnClass = `${columnClass} ${columnClass}-${column}`;
|
|
const classes = classNames(className, bsPrefix, visuallyHidden && 'visually-hidden', column && columnClass);
|
|
process.env.NODE_ENV !== "production" ? warning(controlId == null || !htmlFor, '`controlId` is ignored on `<FormLabel>` when `htmlFor` is specified.') : void 0;
|
|
htmlFor = htmlFor || controlId;
|
|
if (column) return /*#__PURE__*/_jsx(Col, {
|
|
ref: ref,
|
|
as: "label",
|
|
className: classes,
|
|
htmlFor: htmlFor,
|
|
...props
|
|
});
|
|
return (
|
|
/*#__PURE__*/
|
|
// eslint-disable-next-line jsx-a11y/label-has-for, jsx-a11y/label-has-associated-control
|
|
_jsx(Component, {
|
|
ref: ref,
|
|
className: classes,
|
|
htmlFor: htmlFor,
|
|
...props
|
|
})
|
|
);
|
|
});
|
|
FormLabel.displayName = 'FormLabel';
|
|
FormLabel.defaultProps = defaultProps;
|
|
export default FormLabel; |