text: import _extends from "@babel/runtime/helpers/esm/extends";
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
  const _excluded = ["ToolbarComponent", "value", "onChange", "displayStaticWrapperAs"];
  import * as React from 'react';
  import PropTypes from 'prop-types';
  import { useDatePickerDefaultizedProps } from '../DatePicker/shared';
  import DatePickerToolbar from '../DatePicker/DatePickerToolbar';
  import StaticWrapper from '../internal/pickers/wrappers/StaticWrapper';
  import Picker from '../internal/pickers/Picker/Picker';
  import { useDateValidation } from '../internal/pickers/hooks/useValidation';
  import { parsePickerInputValue } from '../internal/pickers/date-utils';
  import { usePickerState } from '../internal/pickers/hooks/usePickerState';
  import { jsx as _jsx } from "react/jsx-runtime";
  const valueManager = {
    emptyValue: null,
    parseInput: parsePickerInputValue,
    areValuesEqual: (utils, a, b) => utils.isEqual(a, b)
  };
  
  /**
   *
   * Demos:
   *
   * - [Date Picker](https://mui.com/components/date-picker/)
   *
   * API:
   *
   * - [StaticDatePicker API](https://mui.com/api/static-date-picker/)
   */
  const StaticDatePicker = /*#__PURE__*/React.forwardRef(function StaticDatePicker(inProps, ref) {
    // TODO: TDate needs to be instantiated at every usage.
    const props = useDatePickerDefaultizedProps(inProps, 'MuiStaticDatePicker');
    const validationError = useDateValidation(props) !== null;
    const {
      pickerProps,
      inputProps
    } = usePickerState(props, valueManager); // Note that we are passing down all the value without spread.
    // It saves us >1kb gzip and make any prop available automatically on any level down.
  
    const {
      ToolbarComponent = DatePickerToolbar,
      displayStaticWrapperAs = 'mobile'
    } = props,
          other = _objectWithoutPropertiesLoose(props, _excluded);
  
    const DateInputProps = _extends({}, inputProps, other, {
      ref,
      validationError
    });
  
    return /*#__PURE__*/_jsx(StaticWrapper, {
      displayStaticWrapperAs: displayStaticWrapperAs,
      children: /*#__PURE__*/_jsx(Picker, _extends({}, pickerProps, {
        toolbarTitle: props.label || props.toolbarTitle,
        ToolbarComponent: ToolbarComponent,
        DateInputProps: DateInputProps
      }, other))
    });
  });
  process.env.NODE_ENV !== "production" ? StaticDatePicker.propTypes
  /* remove-proptypes */
  = {
    // ----------------------------- Warning --------------------------------
    // | These PropTypes are generated from the TypeScript type definitions |
    // |     To update them edit TypeScript types and run "yarn proptypes"  |
    // ----------------------------------------------------------------------
  
    /**
     * Regular expression to detect "accepted" symbols.
     * @default /\dap/gi
     */
    acceptRegex: PropTypes.instanceOf(RegExp),
  
    /**
     * If `true`, `onChange` is fired on click even if the same date is selected.
     * @default false
     */
    allowSameDateSelection: PropTypes.bool,
  
    /**
     * @ignore
     */
    autoFocus: PropTypes.bool,
  
    /**
     * className applied to the root component.
     */
    className: PropTypes.string,
  
    /**
     * The components used for each slot.
     * Either a string to use a HTML element or a component.
     * @default {}
     */
    components: PropTypes.shape({
      LeftArrowButton: PropTypes.elementType,
      LeftArrowIcon: PropTypes.elementType,
      OpenPickerIcon: PropTypes.elementType,
      RightArrowButton: PropTypes.elementType,
      RightArrowIcon: PropTypes.elementType,
      SwitchViewButton: PropTypes.elementType,
      SwitchViewIcon: PropTypes.elementType
    }),
  
    /**
     * The props used for each slot inside.
     * @default {}
     */
    componentsProps: PropTypes.object,
  
    /**
     * Default calendar month displayed when `value={null}`.
     */
    defaultCalendarMonth: PropTypes.any,
  
    /**
     * If `true` the popup or dialog will immediately close after submitting full date.
     * @default `true` for Desktop, `false` for Mobile (based on the chosen wrapper and `desktopModeMediaQuery` prop).
     */
    disableCloseOnSelect: PropTypes.bool,
  
    /**
     * If `true`, the picker and text field are disabled.
     */
    disabled: PropTypes.bool,
  
    /**
     * @default false
     */
    disableFuture: PropTypes.bool,
  
    /**
     * If `true`, todays date is rendering without highlighting with circle.
     * @default false
     */
    disableHighlightToday: PropTypes.bool,
  
    /**
     * Disable mask on the keyboard, this should be used rarely. Consider passing proper mask for your format.
     * @default false
     */
    disableMaskedInput: PropTypes.bool,
  
    /**
     * Do not render open picker button (renders only text field with validation).
     * @default false
     */
    disableOpenPicker: PropTypes.bool,
  
    /**
     * @default false
     */
    disablePast: PropTypes.bool,
  
    /**
     * Force static wrapper inner components to be rendered in mobile or desktop mode.
     * @default 'mobile'
     */
    displayStaticWrapperAs: PropTypes.oneOf(['desktop', 'mobile']),
  
    /**
     * Get aria-label text for control that opens picker dialog. Aria-label text must include selected date. @DateIOType
     * @default (value, utils) => `Choose date, selected date is ${utils.format(utils.date(value), 'fullDate')}`
     */
    getOpenDialogAriaText: PropTypes.func,
  
    /**
     * Get aria-label text for switching between views button.
     */
    getViewSwitchingButtonText: PropTypes.func,
  
    /**
     * @ignore
     */
    ignoreInvalidInputs: PropTypes.bool,
  
    /**
     * Props to pass to keyboard input adornment.
     */
    InputAdornmentProps: PropTypes.object,
  
    /**
     * Format string.
     */
    inputFormat: PropTypes.string,
  
    /**
     * @ignore
     */
    InputProps: PropTypes.object,
  
    /**
     * Pass a ref to the `input` element.
     */
    inputRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
      current: PropTypes.object
    })]),
  
    /**
     * @ignore
     */
    key: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
  
    /**
     * @ignore
     */
    label: PropTypes.node,
  
    /**
     * Left arrow icon aria-label text.
     */
    leftArrowButtonText: PropTypes.string,
  
    /**
     * If `true` renders `LoadingComponent` in calendar instead of calendar view.
     * Can be used to preload information and show it in calendar.
     * @default false
     */
    loading: PropTypes.bool,
  
    /**
     * Custom mask. Can be used to override generate from format. (e.g. `__/__/____ __:__` or `__/__/____ __:__ _M`).
     */
    mask: PropTypes.string,
  
    /**
     * Max selectable date. @DateIOType
     */
    maxDate: PropTypes.any,
  
    /**
     * Min selectable date. @DateIOType
     */
    minDate: PropTypes.any,
  
    /**
     * Callback fired when date is accepted @DateIOType.
     */
    onAccept: PropTypes.func,
  
    /**
     * Callback fired when the value (the selected date) changes @DateIOType.
     */
    onChange: PropTypes.func.isRequired,
  
    /**
     * Callback fired when the popup requests to be closed.
     * Use in controlled mode (see open).
     */
    onClose: PropTypes.func,
  
    /**
     * Callback that fired when input value or new `value` prop validation returns **new** validation error (or value is valid after error).
     * In case of validation error detected `reason` prop return non-null value and `TextField` must be displayed in `error` state.
     * This can be used to render appropriate form error.
     *
     * [Read the guide](https://next.material-ui-pickers.dev/guides/forms) about form integration and error displaying.
     * @DateIOType
     */
    onError: PropTypes.func,
  
    /**
     * Callback firing on month change. @DateIOType
     */
    onMonthChange: PropTypes.func,
  
    /**
     * Callback fired when the popup requests to be opened.
     * Use in controlled mode (see open).
     */
    onOpen: PropTypes.func,
  
    /**
     * Callback fired on view change.
     */
    onViewChange: PropTypes.func,
  
    /**
     * Callback firing on year change @DateIOType.
     */
    onYearChange: PropTypes.func,
  
    /**
     * Control the popup or dialog open state.
     */
    open: PropTypes.bool,
  
    /**
     * Props to pass to keyboard adornment button.
     */
    OpenPickerButtonProps: PropTypes.object,
  
    /**
     * First view to show.
     */
    openTo: PropTypes.oneOf(['day', 'month', 'year']),
  
    /**
     * Force rendering in particular orientation.
     */
    orientation: PropTypes.oneOf(['landscape', 'portrait']),
  
    /**
     * Make picker read only.
     */
    readOnly: PropTypes.bool,
  
    /**
     * Disable heavy animations.
     * @default typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent)
     */
    reduceAnimations: PropTypes.bool,
  
    /**
     * Custom renderer for day. Check the [PickersDay](https://mui.com/api/pickers-day/) component.
     */
    renderDay: PropTypes.func,
  
    /**
     * The `renderInput` prop allows you to customize the rendered input.
     * The `props` argument of this render prop contains props of [TextField](https://mui.com/api/text-field/#textfield-api) that you need to forward.
     * Pay specific attention to the `ref` and `inputProps` keys.
     * @example ```jsx
     * renderInput={props => <TextField {...props} />}
     * ````
     */
    renderInput: PropTypes.func.isRequired,
  
    /**
     * Component displaying when passed `loading` true.
     * @default () => <span data-mui-test="loading-progress">...</span>
     */
    renderLoading: PropTypes.func,
  
    /**
     * Custom formatter to be passed into Rifm component.
     */
    rifmFormatter: PropTypes.func,
  
    /**
     * Right arrow icon aria-label text.
     */
    rightArrowButtonText: PropTypes.string,
  
    /**
     * Disable specific date. @DateIOType
     */
    shouldDisableDate: PropTypes.func,
  
    /**
     * Disable specific years dynamically.
     * Works like `shouldDisableDate` but for year selection view @DateIOType.
     */
    shouldDisableYear: PropTypes.func,
  
    /**
     * If `true`, days that have `outsideCurrentMonth={true}` are displayed.
     * @default false
     */
    showDaysOutsideCurrentMonth: PropTypes.bool,
  
    /**
     * If `true`, show the toolbar even in desktop mode.
     */
    showToolbar: PropTypes.bool,
  
    /**
     * Component that will replace default toolbar renderer.
     * @default DatePickerToolbar
     */
    ToolbarComponent: PropTypes.elementType,
  
    /**
     * Date format, that is displaying in toolbar.
     */
    toolbarFormat: PropTypes.string,
  
    /**
     * Mobile picker date value placeholder, displaying if `value` === `null`.
     * @default '–'
     */
    toolbarPlaceholder: PropTypes.node,
  
    /**
     * Mobile picker title, displaying in the toolbar.
     * @default 'Select date'
     */
    toolbarTitle: PropTypes.node,
  
    /**
     * The value of the picker.
     */
    value: PropTypes.oneOfType([PropTypes.any, PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]),
  
    /**
     * Array of views to show.
     */
    views: PropTypes.arrayOf(PropTypes.oneOf(['day', 'month', 'year']).isRequired)
  } : void 0;
  export default StaticDatePicker;