UNPKG

7.04 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 = exports.StyledSelectSelect = exports.StyledSelectIcon = void 0;
10var React = _interopRequireWildcard(require("react"));
11var _propTypes = _interopRequireDefault(require("prop-types"));
12var _clsx = _interopRequireDefault(require("clsx"));
13var _refType = _interopRequireDefault(require("@mui/utils/refType"));
14var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
15var _capitalize = _interopRequireDefault(require("../utils/capitalize"));
16var _nativeSelectClasses = _interopRequireWildcard(require("./nativeSelectClasses"));
17var _zeroStyled = require("../zero-styled");
18var _rootShouldForwardProp = _interopRequireDefault(require("../styles/rootShouldForwardProp"));
19var _jsxRuntime = require("react/jsx-runtime");
20const useUtilityClasses = ownerState => {
21 const {
22 classes,
23 variant,
24 disabled,
25 multiple,
26 open,
27 error
28 } = ownerState;
29 const slots = {
30 select: ['select', variant, disabled && 'disabled', multiple && 'multiple', error && 'error'],
31 icon: ['icon', `icon${(0, _capitalize.default)(variant)}`, open && 'iconOpen', disabled && 'disabled']
32 };
33 return (0, _composeClasses.default)(slots, _nativeSelectClasses.getNativeSelectUtilityClasses, classes);
34};
35const StyledSelectSelect = exports.StyledSelectSelect = (0, _zeroStyled.styled)('select')(({
36 theme
37}) => ({
38 // Reset
39 MozAppearance: 'none',
40 // Reset
41 WebkitAppearance: 'none',
42 // When interacting quickly, the text can end up selected.
43 // Native select can't be selected either.
44 userSelect: 'none',
45 // Reset
46 borderRadius: 0,
47 cursor: 'pointer',
48 '&:focus': {
49 // Reset Chrome style
50 borderRadius: 0
51 },
52 [`&.${_nativeSelectClasses.default.disabled}`]: {
53 cursor: 'default'
54 },
55 '&[multiple]': {
56 height: 'auto'
57 },
58 '&:not([multiple]) option, &:not([multiple]) optgroup': {
59 backgroundColor: (theme.vars || theme).palette.background.paper
60 },
61 variants: [{
62 props: ({
63 ownerState
64 }) => ownerState.variant !== 'filled' && ownerState.variant !== 'outlined',
65 style: {
66 // Bump specificity to allow extending custom inputs
67 '&&&': {
68 paddingRight: 24,
69 minWidth: 16 // So it doesn't collapse.
70 }
71 }
72 }, {
73 props: {
74 variant: 'filled'
75 },
76 style: {
77 '&&&': {
78 paddingRight: 32
79 }
80 }
81 }, {
82 props: {
83 variant: 'outlined'
84 },
85 style: {
86 borderRadius: (theme.vars || theme).shape.borderRadius,
87 '&:focus': {
88 borderRadius: (theme.vars || theme).shape.borderRadius // Reset the reset for Chrome style
89 },
90 '&&&': {
91 paddingRight: 32
92 }
93 }
94 }]
95}));
96const NativeSelectSelect = (0, _zeroStyled.styled)(StyledSelectSelect, {
97 name: 'MuiNativeSelect',
98 slot: 'Select',
99 shouldForwardProp: _rootShouldForwardProp.default,
100 overridesResolver: (props, styles) => {
101 const {
102 ownerState
103 } = props;
104 return [styles.select, styles[ownerState.variant], ownerState.error && styles.error, {
105 [`&.${_nativeSelectClasses.default.multiple}`]: styles.multiple
106 }];
107 }
108})({});
109const StyledSelectIcon = exports.StyledSelectIcon = (0, _zeroStyled.styled)('svg')(({
110 theme
111}) => ({
112 // We use a position absolute over a flexbox in order to forward the pointer events
113 // to the input and to support wrapping tags..
114 position: 'absolute',
115 right: 0,
116 // Center vertically, height is 1em
117 top: 'calc(50% - .5em)',
118 // Don't block pointer events on the select under the icon.
119 pointerEvents: 'none',
120 color: (theme.vars || theme).palette.action.active,
121 [`&.${_nativeSelectClasses.default.disabled}`]: {
122 color: (theme.vars || theme).palette.action.disabled
123 },
124 variants: [{
125 props: ({
126 ownerState
127 }) => ownerState.open,
128 style: {
129 transform: 'rotate(180deg)'
130 }
131 }, {
132 props: {
133 variant: 'filled'
134 },
135 style: {
136 right: 7
137 }
138 }, {
139 props: {
140 variant: 'outlined'
141 },
142 style: {
143 right: 7
144 }
145 }]
146}));
147const NativeSelectIcon = (0, _zeroStyled.styled)(StyledSelectIcon, {
148 name: 'MuiNativeSelect',
149 slot: 'Icon',
150 overridesResolver: (props, styles) => {
151 const {
152 ownerState
153 } = props;
154 return [styles.icon, ownerState.variant && styles[`icon${(0, _capitalize.default)(ownerState.variant)}`], ownerState.open && styles.iconOpen];
155 }
156})({});
157
158/**
159 * @ignore - internal component.
160 */
161const NativeSelectInput = /*#__PURE__*/React.forwardRef(function NativeSelectInput(props, ref) {
162 const {
163 className,
164 disabled,
165 error,
166 IconComponent,
167 inputRef,
168 variant = 'standard',
169 ...other
170 } = props;
171 const ownerState = {
172 ...props,
173 disabled,
174 variant,
175 error
176 };
177 const classes = useUtilityClasses(ownerState);
178 return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
179 children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(NativeSelectSelect, {
180 ownerState: ownerState,
181 className: (0, _clsx.default)(classes.select, className),
182 disabled: disabled,
183 ref: inputRef || ref,
184 ...other
185 }), props.multiple ? null : /*#__PURE__*/(0, _jsxRuntime.jsx)(NativeSelectIcon, {
186 as: IconComponent,
187 ownerState: ownerState,
188 className: classes.icon
189 })]
190 });
191});
192process.env.NODE_ENV !== "production" ? NativeSelectInput.propTypes = {
193 /**
194 * The option elements to populate the select with.
195 * Can be some `<option>` elements.
196 */
197 children: _propTypes.default.node,
198 /**
199 * Override or extend the styles applied to the component.
200 */
201 classes: _propTypes.default.object,
202 /**
203 * The CSS class name of the select element.
204 */
205 className: _propTypes.default.string,
206 /**
207 * If `true`, the select is disabled.
208 */
209 disabled: _propTypes.default.bool,
210 /**
211 * If `true`, the `select input` will indicate an error.
212 */
213 error: _propTypes.default.bool,
214 /**
215 * The icon that displays the arrow.
216 */
217 IconComponent: _propTypes.default.elementType.isRequired,
218 /**
219 * Use that prop to pass a ref to the native select element.
220 * @deprecated
221 */
222 inputRef: _refType.default,
223 /**
224 * @ignore
225 */
226 multiple: _propTypes.default.bool,
227 /**
228 * Name attribute of the `select` or hidden `input` element.
229 */
230 name: _propTypes.default.string,
231 /**
232 * Callback fired when a menu item is selected.
233 *
234 * @param {object} event The event source of the callback.
235 * You can pull out the new value by accessing `event.target.value` (string).
236 */
237 onChange: _propTypes.default.func,
238 /**
239 * The input value.
240 */
241 value: _propTypes.default.any,
242 /**
243 * The variant to use.
244 */
245 variant: _propTypes.default.oneOf(['standard', 'outlined', 'filled'])
246} : void 0;
247var _default = exports.default = NativeSelectInput;
\No newline at end of file