UNPKG

@mui/material

Version:

Quickly build beautiful React apps. MUI is a simple and customizable component library to build faster, beautiful, and more accessible React applications. Follow your own design system, or start with Material Design.

188 lines (170 loc) 5.54 kB
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; import _extends from "@babel/runtime/helpers/esm/extends"; const _excluded = ["children", "className", "component", "disabled", "error", "filled", "focused", "margin", "required", "variant"]; import * as React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; import { unstable_composeClasses as composeClasses } from '@mui/base'; import formControlState from '../FormControl/formControlState'; import useFormControl from '../FormControl/useFormControl'; import styled from '../styles/styled'; import capitalize from '../utils/capitalize'; import formHelperTextClasses, { getFormHelperTextUtilityClasses } from './formHelperTextClasses'; import useThemeProps from '../styles/useThemeProps'; import { jsx as _jsx } from "react/jsx-runtime"; const useUtilityClasses = ownerState => { const { classes, contained, size, disabled, error, filled, focused, required } = ownerState; const slots = { root: ['root', disabled && 'disabled', error && 'error', size && `size${capitalize(size)}`, contained && 'contained', focused && 'focused', filled && 'filled', required && 'required'] }; return composeClasses(slots, getFormHelperTextUtilityClasses, classes); }; const FormHelperTextRoot = styled('p', { name: 'MuiFormHelperText', slot: 'Root', overridesResolver: (props, styles) => { const { ownerState } = props; return [styles.root, ownerState.size && styles[`size${capitalize(ownerState.size)}`], ownerState.contained && styles.contained, ownerState.filled && styles.filled]; } })(({ theme, ownerState }) => _extends({ color: theme.palette.text.secondary }, theme.typography.caption, { textAlign: 'left', marginTop: 3, marginRight: 0, marginBottom: 0, marginLeft: 0, [`&.${formHelperTextClasses.disabled}`]: { color: theme.palette.text.disabled }, [`&.${formHelperTextClasses.error}`]: { color: theme.palette.error.main } }, ownerState.size === 'small' && { marginTop: 4 }, ownerState.contained && { marginLeft: 14, marginRight: 14 })); const FormHelperText = /*#__PURE__*/React.forwardRef(function FormHelperText(inProps, ref) { const props = useThemeProps({ props: inProps, name: 'MuiFormHelperText' }); const { children, className, component = 'p' } = props, other = _objectWithoutPropertiesLoose(props, _excluded); const muiFormControl = useFormControl(); const fcs = formControlState({ props, muiFormControl, states: ['variant', 'size', 'disabled', 'error', 'filled', 'focused', 'required'] }); const ownerState = _extends({}, props, { component, contained: fcs.variant === 'filled' || fcs.variant === 'outlined', variant: fcs.variant, size: fcs.size, disabled: fcs.disabled, error: fcs.error, filled: fcs.filled, focused: fcs.focused, required: fcs.required }); const classes = useUtilityClasses(ownerState); return /*#__PURE__*/_jsx(FormHelperTextRoot, _extends({ as: component, ownerState: ownerState, className: clsx(classes.root, className), ref: ref }, other, { children: children === ' ' ? /*#__PURE__*/ // notranslate needed while Google Translate will not fix zero-width space issue // eslint-disable-next-line react/no-danger _jsx("span", { className: "notranslate", dangerouslySetInnerHTML: { __html: '​' } }) : children })); }); process.env.NODE_ENV !== "production" ? FormHelperText.propTypes /* remove-proptypes */ = { // ----------------------------- Warning -------------------------------- // | These PropTypes are generated from the TypeScript type definitions | // | To update them edit the d.ts file and run "yarn proptypes" | // ---------------------------------------------------------------------- /** * The content of the component. * * If `' '` is provided, the component reserves one line height for displaying a future message. */ children: PropTypes.node, /** * Override or extend the styles applied to the component. */ classes: PropTypes.object, /** * @ignore */ className: PropTypes.string, /** * The component used for the root node. * Either a string to use a HTML element or a component. */ component: PropTypes.elementType, /** * If `true`, the helper text should be displayed in a disabled state. */ disabled: PropTypes.bool, /** * If `true`, helper text should be displayed in an error state. */ error: PropTypes.bool, /** * If `true`, the helper text should use filled classes key. */ filled: PropTypes.bool, /** * If `true`, the helper text should use focused classes key. */ focused: PropTypes.bool, /** * If `dense`, will adjust vertical spacing. This is normally obtained via context from * FormControl. */ margin: PropTypes.oneOf(['dense']), /** * If `true`, the helper text should use required classes key. */ required: PropTypes.bool, /** * The system prop that allows defining system overrides as well as additional CSS styles. */ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]), /** * The variant to use. */ variant: PropTypes.oneOf(['filled', 'outlined', 'standard']) } : void 0; export default FormHelperText;