UNPKG

5.44 kBJavaScriptView Raw
1"use strict";
2'use client';
3
4var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6Object.defineProperty(exports, "__esModule", {
7 value: true
8});
9exports.default = void 0;
10var React = _interopRequireWildcard(require("react"));
11var _clsx = _interopRequireDefault(require("clsx"));
12var _propTypes = _interopRequireDefault(require("prop-types"));
13var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
14var _NativeSelectInput = _interopRequireDefault(require("./NativeSelectInput"));
15var _formControlState = _interopRequireDefault(require("../FormControl/formControlState"));
16var _useFormControl = _interopRequireDefault(require("../FormControl/useFormControl"));
17var _ArrowDropDown = _interopRequireDefault(require("../internal/svg-icons/ArrowDropDown"));
18var _Input = _interopRequireDefault(require("../Input"));
19var _DefaultPropsProvider = require("../DefaultPropsProvider");
20var _nativeSelectClasses = require("./nativeSelectClasses");
21var _jsxRuntime = require("react/jsx-runtime");
22const useUtilityClasses = ownerState => {
23 const {
24 classes
25 } = ownerState;
26 const slots = {
27 root: ['root']
28 };
29 return (0, _composeClasses.default)(slots, _nativeSelectClasses.getNativeSelectUtilityClasses, classes);
30};
31const defaultInput = /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.default, {});
32/**
33 * An alternative to `<Select native />` with a much smaller bundle size footprint.
34 */
35const NativeSelect = /*#__PURE__*/React.forwardRef(function NativeSelect(inProps, ref) {
36 const props = (0, _DefaultPropsProvider.useDefaultProps)({
37 name: 'MuiNativeSelect',
38 props: inProps
39 });
40 const {
41 className,
42 children,
43 classes: classesProp = {},
44 IconComponent = _ArrowDropDown.default,
45 input = defaultInput,
46 inputProps,
47 variant,
48 ...other
49 } = props;
50 const muiFormControl = (0, _useFormControl.default)();
51 const fcs = (0, _formControlState.default)({
52 props,
53 muiFormControl,
54 states: ['variant']
55 });
56 const ownerState = {
57 ...props,
58 classes: classesProp
59 };
60 const classes = useUtilityClasses(ownerState);
61 const {
62 root,
63 ...otherClasses
64 } = classesProp;
65 return /*#__PURE__*/(0, _jsxRuntime.jsx)(React.Fragment, {
66 children: /*#__PURE__*/React.cloneElement(input, {
67 // Most of the logic is implemented in `NativeSelectInput`.
68 // The `Select` component is a simple API wrapper to expose something better to play with.
69 inputComponent: _NativeSelectInput.default,
70 inputProps: {
71 children,
72 classes: otherClasses,
73 IconComponent,
74 variant: fcs.variant,
75 type: undefined,
76 // We render a select. We can ignore the type provided by the `Input`.
77 ...inputProps,
78 ...(input ? input.props.inputProps : {})
79 },
80 ref,
81 ...other,
82 className: (0, _clsx.default)(classes.root, input.props.className, className)
83 })
84 });
85});
86process.env.NODE_ENV !== "production" ? NativeSelect.propTypes /* remove-proptypes */ = {
87 // ┌────────────────────────────── Warning ──────────────────────────────┐
88 // │ These PropTypes are generated from the TypeScript type definitions. │
89 // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
90 // └─────────────────────────────────────────────────────────────────────┘
91 /**
92 * The option elements to populate the select with.
93 * Can be some `<option>` elements.
94 */
95 children: _propTypes.default.node,
96 /**
97 * Override or extend the styles applied to the component.
98 * @default {}
99 */
100 classes: _propTypes.default.object,
101 /**
102 * @ignore
103 */
104 className: _propTypes.default.string,
105 /**
106 * The icon that displays the arrow.
107 * @default ArrowDropDownIcon
108 */
109 IconComponent: _propTypes.default.elementType,
110 /**
111 * An `Input` element; does not have to be a material-ui specific `Input`.
112 * @default <Input />
113 */
114 input: _propTypes.default.element,
115 /**
116 * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#attributes) applied to the `select` element.
117 */
118 inputProps: _propTypes.default.object,
119 /**
120 * Callback fired when a menu item is selected.
121 *
122 * @param {React.ChangeEvent<HTMLSelectElement>} event The event source of the callback.
123 * You can pull out the new value by accessing `event.target.value` (string).
124 */
125 onChange: _propTypes.default.func,
126 /**
127 * The system prop that allows defining system overrides as well as additional CSS styles.
128 */
129 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]),
130 /**
131 * The `input` value. The DOM API casts this to a string.
132 */
133 value: _propTypes.default.any,
134 /**
135 * The variant to use.
136 */
137 variant: _propTypes.default.oneOf(['filled', 'outlined', 'standard'])
138} : void 0;
139NativeSelect.muiName = 'Select';
140var _default = exports.default = NativeSelect;
\No newline at end of file