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.

456 lines (386 loc) 14.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var React = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _clsx = _interopRequireDefault(require("clsx")); var _base = require("@mui/base"); var _utils = require("@mui/utils"); var _styled = _interopRequireDefault(require("../styles/styled")); var _useThemeProps = _interopRequireDefault(require("../styles/useThemeProps")); var _Input = _interopRequireDefault(require("../Input")); var _FilledInput = _interopRequireDefault(require("../FilledInput")); var _OutlinedInput = _interopRequireDefault(require("../OutlinedInput")); var _InputLabel = _interopRequireDefault(require("../InputLabel")); var _FormControl = _interopRequireDefault(require("../FormControl")); var _FormHelperText = _interopRequireDefault(require("../FormHelperText")); var _Select = _interopRequireDefault(require("../Select")); var _textFieldClasses = require("./textFieldClasses"); var _jsxRuntime = require("react/jsx-runtime"); const _excluded = ["autoComplete", "autoFocus", "children", "className", "color", "defaultValue", "disabled", "error", "FormHelperTextProps", "fullWidth", "helperText", "id", "InputLabelProps", "inputProps", "InputProps", "inputRef", "label", "maxRows", "minRows", "multiline", "name", "onBlur", "onChange", "onFocus", "placeholder", "required", "rows", "select", "SelectProps", "type", "value", "variant"]; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const variantComponent = { standard: _Input.default, filled: _FilledInput.default, outlined: _OutlinedInput.default }; const useUtilityClasses = ownerState => { const { classes } = ownerState; const slots = { root: ['root'] }; return (0, _base.unstable_composeClasses)(slots, _textFieldClasses.getTextFieldUtilityClass, classes); }; const TextFieldRoot = (0, _styled.default)(_FormControl.default, { name: 'MuiTextField', slot: 'Root', overridesResolver: (props, styles) => styles.root })({}); /** * The `TextField` is a convenience wrapper for the most common cases (80%). * It cannot be all things to all people, otherwise the API would grow out of control. * * ## Advanced Configuration * * It's important to understand that the text field is a simple abstraction * on top of the following components: * * - [FormControl](/api/form-control/) * - [InputLabel](/api/input-label/) * - [FilledInput](/api/filled-input/) * - [OutlinedInput](/api/outlined-input/) * - [Input](/api/input/) * - [FormHelperText](/api/form-helper-text/) * * If you wish to alter the props applied to the `input` element, you can do so as follows: * * ```jsx * const inputProps = { * step: 300, * }; * * return <TextField id="time" type="time" inputProps={inputProps} />; * ``` * * For advanced cases, please look at the source of TextField by clicking on the * "Edit this page" button above. Consider either: * * - using the upper case props for passing values directly to the components * - using the underlying components directly as shown in the demos */ const TextField = /*#__PURE__*/React.forwardRef(function TextField(inProps, ref) { const props = (0, _useThemeProps.default)({ props: inProps, name: 'MuiTextField' }); const { autoComplete, autoFocus = false, children, className, color = 'primary', defaultValue, disabled = false, error = false, FormHelperTextProps, fullWidth = false, helperText, id: idOverride, InputLabelProps, inputProps, InputProps, inputRef, label, maxRows, minRows, multiline = false, name, onBlur, onChange, onFocus, placeholder, required = false, rows, select = false, SelectProps, type, value, variant = 'outlined' } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); const ownerState = (0, _extends2.default)({}, props, { autoFocus, color, disabled, error, fullWidth, multiline, required, select, variant }); const classes = useUtilityClasses(ownerState); if (process.env.NODE_ENV !== 'production') { if (select && !children) { console.error('MUI: `children` must be passed when using the `TextField` component with `select`.'); } } const InputMore = {}; if (variant === 'outlined') { if (InputLabelProps && typeof InputLabelProps.shrink !== 'undefined') { InputMore.notched = InputLabelProps.shrink; } InputMore.label = label; } if (select) { // unset defaults from textbox inputs if (!SelectProps || !SelectProps.native) { InputMore.id = undefined; } InputMore['aria-describedby'] = undefined; } const id = (0, _utils.unstable_useId)(idOverride); const helperTextId = helperText && id ? `${id}-helper-text` : undefined; const inputLabelId = label && id ? `${id}-label` : undefined; const InputComponent = variantComponent[variant]; const InputElement = /*#__PURE__*/(0, _jsxRuntime.jsx)(InputComponent, (0, _extends2.default)({ "aria-describedby": helperTextId, autoComplete: autoComplete, autoFocus: autoFocus, defaultValue: defaultValue, fullWidth: fullWidth, multiline: multiline, name: name, rows: rows, maxRows: maxRows, minRows: minRows, type: type, value: value, id: id, inputRef: inputRef, onBlur: onBlur, onChange: onChange, onFocus: onFocus, placeholder: placeholder, inputProps: inputProps }, InputMore, InputProps)); return /*#__PURE__*/(0, _jsxRuntime.jsxs)(TextFieldRoot, (0, _extends2.default)({ className: (0, _clsx.default)(classes.root, className), disabled: disabled, error: error, fullWidth: fullWidth, ref: ref, required: required, color: color, variant: variant, ownerState: ownerState }, other, { children: [label && /*#__PURE__*/(0, _jsxRuntime.jsx)(_InputLabel.default, (0, _extends2.default)({ htmlFor: id, id: inputLabelId }, InputLabelProps, { children: label })), select ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.default, (0, _extends2.default)({ "aria-describedby": helperTextId, id: id, labelId: inputLabelId, value: value, input: InputElement }, SelectProps, { children: children })) : InputElement, helperText && /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormHelperText.default, (0, _extends2.default)({ id: helperTextId }, FormHelperTextProps, { children: helperText }))] })); }); process.env.NODE_ENV !== "production" ? TextField.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" | // ---------------------------------------------------------------------- /** * This prop helps users to fill forms faster, especially on mobile devices. * The name can be confusing, as it's more like an autofill. * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill). */ autoComplete: _propTypes.default.string, /** * If `true`, the `input` element is focused during the first mount. * @default false */ autoFocus: _propTypes.default.bool, /** * @ignore */ children: _propTypes.default.node, /** * Override or extend the styles applied to the component. */ classes: _propTypes.default.object, /** * @ignore */ className: _propTypes.default.string, /** * The color of the component. It supports those theme colors that make sense for this component. * @default 'primary' */ color: _propTypes.default /* @typescript-to-proptypes-ignore */ .oneOfType([_propTypes.default.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), _propTypes.default.string]), /** * The default value. Use when the component is not controlled. */ defaultValue: _propTypes.default.any, /** * If `true`, the component is disabled. * @default false */ disabled: _propTypes.default.bool, /** * If `true`, the label is displayed in an error state. * @default false */ error: _propTypes.default.bool, /** * Props applied to the [`FormHelperText`](/api/form-helper-text/) element. */ FormHelperTextProps: _propTypes.default.object, /** * If `true`, the input will take up the full width of its container. * @default false */ fullWidth: _propTypes.default.bool, /** * The helper text content. */ helperText: _propTypes.default.node, /** * The id of the `input` element. * Use this prop to make `label` and `helperText` accessible for screen readers. */ id: _propTypes.default.string, /** * Props applied to the [`InputLabel`](/api/input-label/) element. * Pointer events like `onClick` are enabled if and only if `shrink` is `true`. */ InputLabelProps: _propTypes.default.object, /** * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element. */ inputProps: _propTypes.default.object, /** * Props applied to the Input element. * It will be a [`FilledInput`](/api/filled-input/), * [`OutlinedInput`](/api/outlined-input/) or [`Input`](/api/input/) * component depending on the `variant` prop value. */ InputProps: _propTypes.default.object, /** * Pass a ref to the `input` element. */ inputRef: _utils.refType, /** * The label content. */ label: _propTypes.default.node, /** * If `dense` or `normal`, will adjust vertical spacing of this and contained components. * @default 'none' */ margin: _propTypes.default.oneOf(['dense', 'none', 'normal']), /** * Maximum number of rows to display when multiline option is set to true. */ maxRows: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), /** * Minimum number of rows to display when multiline option is set to true. */ minRows: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), /** * If `true`, a `textarea` element is rendered instead of an input. * @default false */ multiline: _propTypes.default.bool, /** * Name attribute of the `input` element. */ name: _propTypes.default.string, /** * @ignore */ onBlur: _propTypes.default.func, /** * Callback fired when the value is changed. * * @param {object} event The event source of the callback. * You can pull out the new value by accessing `event.target.value` (string). */ onChange: _propTypes.default.func, /** * @ignore */ onFocus: _propTypes.default.func, /** * The short hint displayed in the `input` before the user enters a value. */ placeholder: _propTypes.default.string, /** * If `true`, the label is displayed as required and the `input` element is required. * @default false */ required: _propTypes.default.bool, /** * Number of rows to display when multiline option is set to true. */ rows: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), /** * Render a [`Select`](/api/select/) element while passing the Input element to `Select` as `input` parameter. * If this option is set you must pass the options of the select as children. * @default false */ select: _propTypes.default.bool, /** * Props applied to the [`Select`](/api/select/) element. */ SelectProps: _propTypes.default.object, /** * The size of the component. */ size: _propTypes.default /* @typescript-to-proptypes-ignore */ .oneOfType([_propTypes.default.oneOf(['medium', 'small']), _propTypes.default.string]), /** * The system prop that allows defining system overrides as well as additional CSS styles. */ sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]), /** * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types). */ type: _propTypes.default /* @typescript-to-proptypes-ignore */ .string, /** * The value of the `input` element, required for a controlled component. */ value: _propTypes.default.any, /** * The variant to use. * @default 'outlined' */ variant: _propTypes.default.oneOf(['filled', 'outlined', 'standard']) } : void 0; var _default = TextField; exports.default = _default;