import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; const _excluded = ["props", "getOpenDialogAriaText"], _excluded2 = ["ownerState"], _excluded3 = ["ownerState"]; import * as React from 'react'; import { useSlotProps } from '@mui/base/utils'; import MuiInputAdornment from '@mui/material/InputAdornment'; import IconButton from '@mui/material/IconButton'; import useForkRef from '@mui/utils/useForkRef'; import useId from '@mui/utils/useId'; import { PickersPopper } from '../../components/PickersPopper'; import { useUtils } from '../useUtils'; import { usePicker } from '../usePicker'; import { LocalizationProvider } from '../../../LocalizationProvider'; import { PickersLayout } from '../../../PickersLayout'; import { jsx as _jsx } from "react/jsx-runtime"; import { jsxs as _jsxs } from "react/jsx-runtime"; /** * Hook managing all the single-date desktop pickers: * - DesktopDatePicker * - DesktopDateTimePicker * - DesktopTimePicker */ export const useDesktopPicker = _ref => { var _innerSlotProps$toolb, _innerSlotProps$toolb2, _slots$inputAdornment, _slots$openPickerButt, _slots$layout; let { props, getOpenDialogAriaText } = _ref, pickerParams = _objectWithoutPropertiesLoose(_ref, _excluded); const { slots, slotProps: innerSlotProps, className, sx, format, formatDensity, timezone, name, label, inputRef, readOnly, disabled, autoFocus, localeText, reduceAnimations } = props; const utils = useUtils(); const internalInputRef = React.useRef(null); const containerRef = React.useRef(null); const labelId = useId(); const isToolbarHidden = (_innerSlotProps$toolb = innerSlotProps == null || (_innerSlotProps$toolb2 = innerSlotProps.toolbar) == null ? void 0 : _innerSlotProps$toolb2.hidden) != null ? _innerSlotProps$toolb : false; const { open, actions, hasUIView, layoutProps, renderCurrentView, shouldRestoreFocus, fieldProps: pickerFieldProps } = usePicker(_extends({}, pickerParams, { props, inputRef: internalInputRef, autoFocusView: true, additionalViewProps: {}, wrapperVariant: 'desktop' })); const InputAdornment = (_slots$inputAdornment = slots.inputAdornment) != null ? _slots$inputAdornment : MuiInputAdornment; const _useSlotProps = useSlotProps({ elementType: InputAdornment, externalSlotProps: innerSlotProps == null ? void 0 : innerSlotProps.inputAdornment, additionalProps: { position: 'end' }, ownerState: props }), inputAdornmentProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2); const OpenPickerButton = (_slots$openPickerButt = slots.openPickerButton) != null ? _slots$openPickerButt : IconButton; const _useSlotProps2 = useSlotProps({ elementType: OpenPickerButton, externalSlotProps: innerSlotProps == null ? void 0 : innerSlotProps.openPickerButton, additionalProps: { disabled: disabled || readOnly, onClick: open ? actions.onClose : actions.onOpen, 'aria-label': getOpenDialogAriaText(pickerFieldProps.value, utils), edge: inputAdornmentProps.position }, ownerState: props }), openPickerButtonProps = _objectWithoutPropertiesLoose(_useSlotProps2, _excluded3); const OpenPickerIcon = slots.openPickerIcon; const Field = slots.field; const fieldProps = useSlotProps({ elementType: Field, externalSlotProps: innerSlotProps == null ? void 0 : innerSlotProps.field, additionalProps: _extends({}, pickerFieldProps, isToolbarHidden && { id: labelId }, { readOnly, disabled, className, sx, format, formatDensity, timezone, label, name, autoFocus: autoFocus && !props.open, focused: open ? true : undefined }), ownerState: props }); // TODO: Move to `useSlotProps` when https://github.com/mui/material-ui/pull/35088 will be merged if (hasUIView) { fieldProps.InputProps = _extends({}, fieldProps.InputProps, { ref: containerRef }, !props.disableOpenPicker && { [`${inputAdornmentProps.position}Adornment`]: /*#__PURE__*/_jsx(InputAdornment, _extends({}, inputAdornmentProps, { children: /*#__PURE__*/_jsx(OpenPickerButton, _extends({}, openPickerButtonProps, { children: /*#__PURE__*/_jsx(OpenPickerIcon, _extends({}, innerSlotProps == null ? void 0 : innerSlotProps.openPickerIcon)) })) })) }); } const slotsForField = _extends({ textField: slots.textField, clearIcon: slots.clearIcon, clearButton: slots.clearButton }, fieldProps.slots); const Layout = (_slots$layout = slots.layout) != null ? _slots$layout : PickersLayout; const handleInputRef = useForkRef(internalInputRef, fieldProps.inputRef, inputRef); let labelledById = labelId; if (isToolbarHidden) { if (label) { labelledById = `${labelId}-label`; } else { labelledById = undefined; } } const slotProps = _extends({}, innerSlotProps, { toolbar: _extends({}, innerSlotProps == null ? void 0 : innerSlotProps.toolbar, { titleId: labelId }), popper: _extends({ 'aria-labelledby': labelledById }, innerSlotProps == null ? void 0 : innerSlotProps.popper) }); const renderPicker = () => /*#__PURE__*/_jsxs(LocalizationProvider, { localeText: localeText, children: [/*#__PURE__*/_jsx(Field, _extends({}, fieldProps, { slots: slotsForField, slotProps: slotProps, inputRef: handleInputRef })), /*#__PURE__*/_jsx(PickersPopper, _extends({ role: "dialog", placement: "bottom-start", anchorEl: containerRef.current }, actions, { open: open, slots: slots, slotProps: slotProps, shouldRestoreFocus: shouldRestoreFocus, reduceAnimations: reduceAnimations, children: /*#__PURE__*/_jsx(Layout, _extends({}, layoutProps, slotProps == null ? void 0 : slotProps.layout, { slots: slots, slotProps: slotProps, children: renderCurrentView() })) }))] }); return { renderPicker }; };