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.

365 lines (313 loc) 13 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _utils = require("@mui/utils"); var _base = require("@mui/base"); var _NotchedOutline = _interopRequireDefault(require("./NotchedOutline")); var _useFormControl = _interopRequireDefault(require("../FormControl/useFormControl")); var _formControlState = _interopRequireDefault(require("../FormControl/formControlState")); var _styled = _interopRequireWildcard(require("../styles/styled")); var _outlinedInputClasses = _interopRequireWildcard(require("./outlinedInputClasses")); var _InputBase = _interopRequireWildcard(require("../InputBase/InputBase")); var _useThemeProps = _interopRequireDefault(require("../styles/useThemeProps")); var _jsxRuntime = require("react/jsx-runtime"); const _excluded = ["components", "fullWidth", "inputComponent", "label", "multiline", "notched", "type"]; 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 useUtilityClasses = ownerState => { const { classes } = ownerState; const slots = { root: ['root'], notchedOutline: ['notchedOutline'], input: ['input'] }; const composedClasses = (0, _base.unstable_composeClasses)(slots, _outlinedInputClasses.getOutlinedInputUtilityClass, classes); return (0, _extends2.default)({}, classes, composedClasses); }; const OutlinedInputRoot = (0, _styled.default)(_InputBase.InputBaseRoot, { shouldForwardProp: prop => (0, _styled.rootShouldForwardProp)(prop) || prop === 'classes', name: 'MuiOutlinedInput', slot: 'Root', overridesResolver: _InputBase.rootOverridesResolver })(({ theme, ownerState }) => { const borderColor = theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'; return (0, _extends2.default)({ position: 'relative', borderRadius: theme.shape.borderRadius, [`&:hover .${_outlinedInputClasses.default.notchedOutline}`]: { borderColor: theme.palette.text.primary }, // Reset on touch devices, it doesn't add specificity '@media (hover: none)': { [`&:hover .${_outlinedInputClasses.default.notchedOutline}`]: { borderColor } }, [`&.${_outlinedInputClasses.default.focused} .${_outlinedInputClasses.default.notchedOutline}`]: { borderColor: theme.palette[ownerState.color].main, borderWidth: 2 }, [`&.${_outlinedInputClasses.default.error} .${_outlinedInputClasses.default.notchedOutline}`]: { borderColor: theme.palette.error.main }, [`&.${_outlinedInputClasses.default.disabled} .${_outlinedInputClasses.default.notchedOutline}`]: { borderColor: theme.palette.action.disabled } }, ownerState.startAdornment && { paddingLeft: 14 }, ownerState.endAdornment && { paddingRight: 14 }, ownerState.multiline && (0, _extends2.default)({ padding: '16.5px 14px' }, ownerState.size === 'small' && { padding: '8.5px 14px' })); }); const NotchedOutlineRoot = (0, _styled.default)(_NotchedOutline.default, { name: 'MuiOutlinedInput', slot: 'NotchedOutline', overridesResolver: (props, styles) => styles.notchedOutline })(({ theme }) => ({ borderColor: theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)' })); const OutlinedInputInput = (0, _styled.default)(_InputBase.InputBaseComponent, { name: 'MuiOutlinedInput', slot: 'Input', overridesResolver: _InputBase.inputOverridesResolver })(({ theme, ownerState }) => (0, _extends2.default)({ padding: '16.5px 14px', '&:-webkit-autofill': { WebkitBoxShadow: theme.palette.mode === 'light' ? null : '0 0 0 100px #266798 inset', WebkitTextFillColor: theme.palette.mode === 'light' ? null : '#fff', caretColor: theme.palette.mode === 'light' ? null : '#fff', borderRadius: 'inherit' } }, ownerState.size === 'small' && { padding: '8.5px 14px' }, ownerState.multiline && { padding: 0 }, ownerState.startAdornment && { paddingLeft: 0 }, ownerState.endAdornment && { paddingRight: 0 })); const OutlinedInput = /*#__PURE__*/React.forwardRef(function OutlinedInput(inProps, ref) { var _React$Fragment; const props = (0, _useThemeProps.default)({ props: inProps, name: 'MuiOutlinedInput' }); const { components = {}, fullWidth = false, inputComponent = 'input', label, multiline = false, notched, type = 'text' } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); const classes = useUtilityClasses(props); const muiFormControl = (0, _useFormControl.default)(); const fcs = (0, _formControlState.default)({ props, muiFormControl, states: ['required'] }); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InputBase.default, (0, _extends2.default)({ components: (0, _extends2.default)({ Root: OutlinedInputRoot, Input: OutlinedInputInput }, components), renderSuffix: state => /*#__PURE__*/(0, _jsxRuntime.jsx)(NotchedOutlineRoot, { className: classes.notchedOutline, label: label && fcs.required ? _React$Fragment || (_React$Fragment = /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, { children: [label, "\xA0", '*'] })) : label, notched: typeof notched !== 'undefined' ? notched : Boolean(state.startAdornment || state.filled || state.focused) }), fullWidth: fullWidth, inputComponent: inputComponent, multiline: multiline, ref: ref, type: type }, other, { classes: (0, _extends2.default)({}, classes, { notchedOutline: null }) })); }); process.env.NODE_ENV !== "production" ? OutlinedInput.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. */ autoFocus: _propTypes.default.bool, /** * Override or extend the styles applied to the component. */ classes: _propTypes.default.object, /** * The color of the component. It supports those theme colors that make sense for this component. * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component. */ color: _propTypes.default /* @typescript-to-proptypes-ignore */ .oneOfType([_propTypes.default.oneOf(['primary', 'secondary']), _propTypes.default.string]), /** * The components used for each slot inside the InputBase. * Either a string to use a HTML element or a component. * @default {} */ components: _propTypes.default.shape({ Input: _propTypes.default.elementType, Root: _propTypes.default.elementType }), /** * The default value. Use when the component is not controlled. */ defaultValue: _propTypes.default.any, /** * If `true`, the component is disabled. * The prop defaults to the value (`false`) inherited from the parent FormControl component. */ disabled: _propTypes.default.bool, /** * End `InputAdornment` for this component. */ endAdornment: _propTypes.default.node, /** * If `true`, the `input` will indicate an error. * The prop defaults to the value (`false`) inherited from the parent FormControl component. */ error: _propTypes.default.bool, /** * If `true`, the `input` will take up the full width of its container. * @default false */ fullWidth: _propTypes.default.bool, /** * The id of the `input` element. */ id: _propTypes.default.string, /** * The component used for the `input` element. * Either a string to use a HTML element or a component. * @default 'input' */ inputComponent: _propTypes.default.elementType, /** * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element. * @default {} */ inputProps: _propTypes.default.object, /** * Pass a ref to the `input` element. */ inputRef: _utils.refType, /** * The label of the `input`. It is only used for layout. The actual labelling * is handled by `InputLabel`. */ label: _propTypes.default.node, /** * If `dense`, will adjust vertical spacing. This is normally obtained via context from * FormControl. * The prop defaults to the value (`'none'`) inherited from the parent FormControl component. */ margin: _propTypes.default.oneOf(['dense', 'none']), /** * 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. * @default false */ multiline: _propTypes.default.bool, /** * Name attribute of the `input` element. */ name: _propTypes.default.string, /** * If `true`, the outline is notched to accommodate the label. */ notched: _propTypes.default.bool, /** * Callback fired when the value is changed. * * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback. * You can pull out the new value by accessing `event.target.value` (string). */ onChange: _propTypes.default.func, /** * The short hint displayed in the `input` before the user enters a value. */ placeholder: _propTypes.default.string, /** * It prevents the user from changing the value of the field * (not from interacting with the field). */ readOnly: _propTypes.default.bool, /** * If `true`, the `input` element is required. * The prop defaults to the value (`false`) inherited from the parent FormControl component. */ 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]), /** * Start `InputAdornment` for this component. */ startAdornment: _propTypes.default.node, /** * 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). * @default 'text' */ type: _propTypes.default.string, /** * The value of the `input` element, required for a controlled component. */ value: _propTypes.default.any } : void 0; OutlinedInput.muiName = 'Input'; var _default = OutlinedInput; exports.default = _default;