1
0
Fork 0

Added Statistics calculation

Statistics now show calculated values
This commit is contained in:
Techognito 2025-09-04 17:30:00 +02:00
parent fe87374e47
commit fc0f69dacb
2147 changed files with 141321 additions and 39 deletions

View file

@ -0,0 +1,2 @@
import { DateOrTimeViewWithMeridiem, PickerOrientation } from "../../../models/index.js";
export declare function useOrientation(views: readonly DateOrTimeViewWithMeridiem[], customOrientation: PickerOrientation | undefined): PickerOrientation;

View file

@ -0,0 +1,43 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useOrientation = useOrientation;
var React = _interopRequireWildcard(require("react"));
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
var _utils = require("../../../utils/utils");
function getOrientation() {
if (typeof window === 'undefined') {
return 'portrait';
}
if (window.screen && window.screen.orientation && window.screen.orientation.angle) {
return Math.abs(window.screen.orientation.angle) === 90 ? 'landscape' : 'portrait';
}
// Support IOS safari
if (window.orientation) {
return Math.abs(Number(window.orientation)) === 90 ? 'landscape' : 'portrait';
}
return 'portrait';
}
function useOrientation(views, customOrientation) {
const [orientation, setOrientation] = React.useState(getOrientation);
(0, _useEnhancedEffect.default)(() => {
const eventHandler = () => {
setOrientation(getOrientation());
};
window.addEventListener('orientationchange', eventHandler);
return () => {
window.removeEventListener('orientationchange', eventHandler);
};
}, []);
if ((0, _utils.arrayIncludes)(views, ['hours', 'minutes', 'seconds'])) {
// could not display 13:34:44 in landscape mode
return 'portrait';
}
return customOrientation ?? orientation;
}

View file

@ -0,0 +1,21 @@
import * as React from 'react';
import { DateOrTimeViewWithMeridiem, PickerValidValue, PickerValueManager } from "../../../models/index.js";
import { PickerSelectionState, UsePickerProps, UsePickerState } from "../usePicker.types.js";
import { InferError } from "../../../../models/index.js";
import { SetValueActionOptions } from "../../../components/PickerProvider.js";
import { Validator } from "../../../../validation/index.js";
export declare function useValueAndOpenStates<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any>>(parameters: UsePickerDateStateParameters<TValue, TView, TExternalProps>): {
timezone: string;
state: UsePickerState<TValue>;
setValue: (newValue: TValue, options?: SetValueActionOptions<InferError<TExternalProps>>) => void;
setValueFromView: (newValue: TValue, selectionState?: PickerSelectionState) => void;
setOpen: (action: React.SetStateAction<boolean>) => void;
value: TValue;
viewValue: TValue;
};
interface UsePickerDateStateParameters<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any>> {
props: TExternalProps;
valueManager: PickerValueManager<TValue, InferError<TExternalProps>>;
validator: Validator<TValue, InferError<TExternalProps>, TExternalProps>;
}
export {};

View file

@ -0,0 +1,201 @@
"use strict";
'use client';
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useValueAndOpenStates = useValueAndOpenStates;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var React = _interopRequireWildcard(require("react"));
var _warning = require("@mui/x-internals/warning");
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
var _useControlledValue = require("../../useControlledValue");
var _usePickerAdapter = require("../../../../hooks/usePickerAdapter");
var _validation = require("../../../../validation");
function useValueAndOpenStates(parameters) {
const {
props,
valueManager,
validator
} = parameters;
const {
value: valueProp,
defaultValue: defaultValueProp,
onChange,
referenceDate,
timezone: timezoneProp,
onAccept,
closeOnSelect,
open: openProp,
onOpen,
onClose
} = props;
const {
current: defaultValue
} = React.useRef(defaultValueProp);
const {
current: isValueControlled
} = React.useRef(valueProp !== undefined);
const {
current: isOpenControlled
} = React.useRef(openProp !== undefined);
const adapter = (0, _usePickerAdapter.usePickerAdapter)();
if (process.env.NODE_ENV !== 'production') {
if (props.renderInput != null) {
(0, _warning.warnOnce)(['MUI X: The `renderInput` prop has been removed in version 6.0 of the Date and Time Pickers.', 'You can replace it with the `textField` component slot in most cases.', 'For more information, please have a look at the migration guide (https://mui.com/x/migration/migration-pickers-v5/#input-renderer-required-in-v5).']);
}
}
/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */
if (process.env.NODE_ENV !== 'production') {
React.useEffect(() => {
if (isValueControlled !== (valueProp !== undefined)) {
console.error([`MUI X: A component is changing the ${isValueControlled ? '' : 'un'}controlled value of a Picker to be ${isValueControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled value` + 'for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
}
}, [valueProp]);
React.useEffect(() => {
if (!isValueControlled && defaultValue !== defaultValueProp) {
console.error([`MUI X: A component is changing the defaultValue of an uncontrolled Picker after being initialized. ` + `To suppress this warning opt to use a controlled value.`].join('\n'));
}
}, [JSON.stringify(defaultValue)]);
}
/* eslint-enable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */
const {
timezone,
value,
handleValueChange
} = (0, _useControlledValue.useControlledValue)({
name: 'a picker component',
timezone: timezoneProp,
value: valueProp,
defaultValue,
referenceDate,
onChange,
valueManager
});
const [state, setState] = React.useState(() => ({
open: false,
lastExternalValue: value,
clockShallowValue: undefined,
lastCommittedValue: value,
hasBeenModifiedSinceMount: false
}));
const {
getValidationErrorForNewValue
} = (0, _validation.useValidation)({
props,
validator,
timezone,
value,
onError: props.onError
});
const setOpen = (0, _useEventCallback.default)(action => {
const newOpen = typeof action === 'function' ? action(state.open) : action;
if (!isOpenControlled) {
setState(prevState => (0, _extends2.default)({}, prevState, {
open: newOpen
}));
}
if (newOpen && onOpen) {
onOpen();
}
if (!newOpen) {
onClose?.();
}
});
const setValue = (0, _useEventCallback.default)((newValue, options) => {
const {
changeImportance = 'accept',
skipPublicationIfPristine = false,
validationError,
shortcut,
shouldClose = changeImportance === 'accept'
} = options ?? {};
let shouldFireOnChange;
let shouldFireOnAccept;
if (!skipPublicationIfPristine && !isValueControlled && !state.hasBeenModifiedSinceMount) {
// If the value is not controlled and the value has never been modified before,
// Then clicking on any value (including the one equal to `defaultValue`) should call `onChange` and `onAccept`
shouldFireOnChange = true;
shouldFireOnAccept = changeImportance === 'accept';
} else {
shouldFireOnChange = !valueManager.areValuesEqual(adapter, newValue, value);
shouldFireOnAccept = changeImportance === 'accept' && !valueManager.areValuesEqual(adapter, newValue, state.lastCommittedValue);
}
setState(prevState => (0, _extends2.default)({}, prevState, {
// We reset the shallow value whenever we fire onChange.
clockShallowValue: shouldFireOnChange ? undefined : prevState.clockShallowValue,
lastCommittedValue: shouldFireOnAccept ? newValue : prevState.lastCommittedValue,
hasBeenModifiedSinceMount: true
}));
let cachedContext = null;
const getContext = () => {
if (!cachedContext) {
cachedContext = {
validationError: validationError == null ? getValidationErrorForNewValue(newValue) : validationError
};
if (shortcut) {
cachedContext.shortcut = shortcut;
}
}
return cachedContext;
};
if (shouldFireOnChange) {
handleValueChange(newValue, getContext());
}
if (shouldFireOnAccept && onAccept) {
onAccept(newValue, getContext());
}
if (shouldClose) {
setOpen(false);
}
});
// If `prop.value` changes, we update the state to reflect the new value
if (value !== state.lastExternalValue) {
setState(prevState => (0, _extends2.default)({}, prevState, {
lastExternalValue: value,
clockShallowValue: undefined,
hasBeenModifiedSinceMount: true
}));
}
const setValueFromView = (0, _useEventCallback.default)((newValue, selectionState = 'partial') => {
// TODO: Expose a new method (private?) like `setView` that only updates the clock shallow value.
if (selectionState === 'shallow') {
setState(prev => (0, _extends2.default)({}, prev, {
clockShallowValue: newValue,
hasBeenModifiedSinceMount: true
}));
return;
}
setValue(newValue, {
changeImportance: selectionState === 'finish' && closeOnSelect ? 'accept' : 'set'
});
});
// It is required to update inner state in useEffect in order to avoid situation when
// Our component is not mounted yet, but `open` state is set to `true` (for example initially opened)
React.useEffect(() => {
if (isOpenControlled) {
if (openProp === undefined) {
throw new Error('You must not mix controlling and uncontrolled mode for `open` prop');
}
setState(prevState => (0, _extends2.default)({}, prevState, {
open: openProp
}));
}
}, [isOpenControlled, openProp]);
const viewValue = React.useMemo(() => valueManager.cleanValue(adapter, state.clockShallowValue === undefined ? value : state.clockShallowValue), [adapter, valueManager, state.clockShallowValue, value]);
return {
timezone,
state,
setValue,
setValueFromView,
setOpen,
value,
viewValue
};
}

View file

@ -0,0 +1,2 @@
export { usePicker } from "./usePicker.js";
export type { UsePickerProps, UsePickerBaseProps, UsePickerParameters, PickerSelectionState, PickerViewsRendererProps, PickerViewRendererLookup, PickerRendererInterceptorProps, PickerViewRenderer, UsePickerNonStaticProps } from "./usePicker.types.js";

View file

@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "usePicker", {
enumerable: true,
get: function () {
return _usePicker.usePicker;
}
});
var _usePicker = require("./usePicker");

View file

@ -0,0 +1,16 @@
import { UsePickerParameters, UsePickerProps, UsePickerReturnValue } from "./usePicker.types.js";
import { DateOrTimeViewWithMeridiem, PickerValidValue } from "../../models/index.js";
export declare const usePicker: <TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any>>({
ref,
props,
valueManager,
valueType,
variant,
validator,
onPopperExited,
autoFocusView,
rendererInterceptor: RendererInterceptor,
localeText,
viewContainerRole,
getStepNavigation
}: UsePickerParameters<TValue, TView, TExternalProps>) => UsePickerReturnValue<TValue>;

View file

@ -0,0 +1,323 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.usePicker = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
var _usePickerAdapter = require("../../../hooks/usePickerAdapter");
var _useReduceAnimations = require("../useReduceAnimations");
var _timeUtils = require("../../utils/time-utils");
var _useViews = require("../useViews");
var _useOrientation = require("./hooks/useOrientation");
var _useValueAndOpenStates = require("./hooks/useValueAndOpenStates");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["className", "sx"];
const usePicker = ({
ref,
props,
valueManager,
valueType,
variant,
validator,
onPopperExited,
autoFocusView,
rendererInterceptor: RendererInterceptor,
localeText,
viewContainerRole,
getStepNavigation
}) => {
const {
// View props
views,
view: viewProp,
openTo,
onViewChange,
viewRenderers,
reduceAnimations: reduceAnimationsProp,
orientation: orientationProp,
disableOpenPicker,
closeOnSelect,
// Form props
disabled,
readOnly,
// Field props
formatDensity,
enableAccessibleFieldDOMStructure,
selectedSections,
onSelectedSectionsChange,
format,
label,
// Other props
autoFocus,
name
} = props;
const {
className,
sx
} = props,
propsToForwardToView = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
/**
* TODO: Improve how we generate the aria-label and aria-labelledby attributes.
*/
const labelId = (0, _useId.default)();
const adapter = (0, _usePickerAdapter.usePickerAdapter)();
const reduceAnimations = (0, _useReduceAnimations.useReduceAnimations)(reduceAnimationsProp);
const orientation = (0, _useOrientation.useOrientation)(views, orientationProp);
const {
current: initialView
} = React.useRef(openTo ?? null);
/**
* Refs
*/
const [triggerElement, triggerRef] = React.useState(null);
const popupRef = React.useRef(null);
const fieldRef = React.useRef(null);
const rootRefObject = React.useRef(null);
const rootRef = (0, _useForkRef.default)(ref, rootRefObject);
const {
timezone,
state,
setOpen,
setValue,
setValueFromView,
value,
viewValue
} = (0, _useValueAndOpenStates.useValueAndOpenStates)({
props,
valueManager,
validator
});
const {
view,
setView,
defaultView,
focusedView,
setFocusedView,
setValueAndGoToNextView,
goToNextStep,
hasNextStep,
hasSeveralSteps
} = (0, _useViews.useViews)({
view: viewProp,
views,
openTo,
onChange: setValueFromView,
onViewChange,
autoFocus: autoFocusView,
getStepNavigation
});
const clearValue = (0, _useEventCallback.default)(() => setValue(valueManager.emptyValue));
const setValueToToday = (0, _useEventCallback.default)(() => setValue(valueManager.getTodayValue(adapter, timezone, valueType)));
const acceptValueChanges = (0, _useEventCallback.default)(() => setValue(value));
const cancelValueChanges = (0, _useEventCallback.default)(() => setValue(state.lastCommittedValue, {
skipPublicationIfPristine: true
}));
const dismissViews = (0, _useEventCallback.default)(() => {
setValue(value, {
skipPublicationIfPristine: true
});
});
const {
hasUIView,
viewModeLookup,
timeViewsCount
} = React.useMemo(() => views.reduce((acc, viewForReduce) => {
const viewMode = viewRenderers[viewForReduce] == null ? 'field' : 'UI';
acc.viewModeLookup[viewForReduce] = viewMode;
if (viewMode === 'UI') {
acc.hasUIView = true;
if ((0, _timeUtils.isTimeView)(viewForReduce)) {
acc.timeViewsCount += 1;
}
}
return acc;
}, {
hasUIView: false,
viewModeLookup: {},
timeViewsCount: 0
}), [viewRenderers, views]);
const currentViewMode = viewModeLookup[view];
const getCurrentViewMode = (0, _useEventCallback.default)(() => currentViewMode);
const [popperView, setPopperView] = React.useState(currentViewMode === 'UI' ? view : null);
if (popperView !== view && viewModeLookup[view] === 'UI') {
setPopperView(view);
}
(0, _useEnhancedEffect.default)(() => {
// Handle case of Date Time Picker without time renderers
if (currentViewMode === 'field' && state.open) {
setOpen(false);
setTimeout(() => {
fieldRef?.current?.setSelectedSections(view);
// focusing the input before the range selection is done
// calling it outside of timeout results in an inconsistent behavior between Safari And Chrome
fieldRef?.current?.focusField(view);
});
}
}, [view]); // eslint-disable-line react-hooks/exhaustive-deps
(0, _useEnhancedEffect.default)(() => {
if (!state.open) {
return;
}
let newView = view;
// If the current view is a field view, go to the last popper view
if (currentViewMode === 'field' && popperView != null) {
newView = popperView;
}
// If the current view is not the default view and both are UI views
if (newView !== defaultView && viewModeLookup[newView] === 'UI' && viewModeLookup[defaultView] === 'UI') {
newView = defaultView;
}
if (newView !== view) {
setView(newView);
}
setFocusedView(newView, true);
}, [state.open]); // eslint-disable-line react-hooks/exhaustive-deps
const ownerState = React.useMemo(() => ({
isPickerValueEmpty: valueManager.areValuesEqual(adapter, value, valueManager.emptyValue),
isPickerOpen: state.open,
isPickerDisabled: props.disabled ?? false,
isPickerReadOnly: props.readOnly ?? false,
pickerOrientation: orientation,
pickerVariant: variant
}), [adapter, valueManager, value, state.open, orientation, variant, props.disabled, props.readOnly]);
const triggerStatus = React.useMemo(() => {
if (disableOpenPicker || !hasUIView) {
return 'hidden';
}
if (disabled || readOnly) {
return 'disabled';
}
return 'enabled';
}, [disableOpenPicker, hasUIView, disabled, readOnly]);
const wrappedGoToNextStep = (0, _useEventCallback.default)(goToNextStep);
const defaultActionBarActions = React.useMemo(() => {
if (closeOnSelect && !hasSeveralSteps) {
return [];
}
return ['cancel', 'nextOrAccept'];
}, [closeOnSelect, hasSeveralSteps]);
const actionsContextValue = React.useMemo(() => ({
setValue,
setOpen,
clearValue,
setValueToToday,
acceptValueChanges,
cancelValueChanges,
setView,
goToNextStep: wrappedGoToNextStep
}), [setValue, setOpen, clearValue, setValueToToday, acceptValueChanges, cancelValueChanges, setView, wrappedGoToNextStep]);
const contextValue = React.useMemo(() => (0, _extends2.default)({}, actionsContextValue, {
value,
timezone,
open: state.open,
views,
view: popperView,
initialView,
disabled: disabled ?? false,
readOnly: readOnly ?? false,
autoFocus: autoFocus ?? false,
variant,
orientation,
popupRef,
reduceAnimations,
triggerRef,
triggerStatus,
hasNextStep,
fieldFormat: format ?? '',
name,
label,
rootSx: sx,
rootRef,
rootClassName: className
}), [actionsContextValue, value, rootRef, variant, orientation, reduceAnimations, disabled, readOnly, format, className, name, label, sx, triggerStatus, hasNextStep, timezone, state.open, popperView, views, initialView, autoFocus]);
const privateContextValue = React.useMemo(() => ({
dismissViews,
ownerState,
hasUIView,
getCurrentViewMode,
rootRefObject,
labelId,
triggerElement,
viewContainerRole,
defaultActionBarActions,
onPopperExited
}), [dismissViews, ownerState, hasUIView, getCurrentViewMode, labelId, triggerElement, viewContainerRole, defaultActionBarActions, onPopperExited]);
const fieldPrivateContextValue = React.useMemo(() => ({
formatDensity,
enableAccessibleFieldDOMStructure,
selectedSections,
onSelectedSectionsChange,
fieldRef
}), [formatDensity, enableAccessibleFieldDOMStructure, selectedSections, onSelectedSectionsChange, fieldRef]);
const isValidContextValue = testedValue => {
const error = validator({
adapter,
value: testedValue,
timezone,
props
});
return !valueManager.hasError(error);
};
const renderCurrentView = () => {
if (popperView == null) {
return null;
}
const renderer = viewRenderers[popperView];
if (renderer == null) {
return null;
}
const rendererProps = (0, _extends2.default)({}, propsToForwardToView, {
views,
timezone,
value: viewValue,
onChange: setValueAndGoToNextView,
view: popperView,
onViewChange: setView,
showViewSwitcher: timeViewsCount > 1,
timeViewsCount
}, viewContainerRole === 'tooltip' ? {
focusedView: null,
onFocusedViewChange: () => {}
} : {
focusedView,
onFocusedViewChange: setFocusedView
});
if (RendererInterceptor) {
return /*#__PURE__*/(0, _jsxRuntime.jsx)(RendererInterceptor, {
viewRenderers: viewRenderers,
popperView: popperView,
rendererProps: rendererProps
});
}
return renderer(rendererProps);
};
return {
providerProps: {
localeText,
contextValue,
privateContextValue,
actionsContextValue,
fieldPrivateContextValue,
isValidContextValue
},
renderCurrentView,
ownerState
};
};
exports.usePicker = usePicker;

View file

@ -0,0 +1,187 @@
import { SxProps } from '@mui/system';
import { Theme } from '@mui/material/styles';
import { InferError, OnErrorProps, PickerChangeHandlerContext, PickerOwnerState, PickerValidDate, PickerValueType, TimezoneProps } from "../../../models/index.js";
import { DateOrTimeViewWithMeridiem, FormProps, PickerOrientation, PickerRangeValue, PickerValidValue, PickerValueManager, PickerVariant } from "../../models/index.js";
import { Validator } from "../../../validation/index.js";
import { UseViewsOptions } from "../useViews.js";
import { PickerProviderProps } from "../../components/PickerProvider.js";
import { PickersInputLocaleText } from "../../../locales/index.js";
import { PickerFieldPrivateContextValue } from "../useNullableFieldPrivateContext.js";
import { CreateStepNavigationReturnValue } from "../../utils/createStepNavigation.js";
/**
* Props common to all Picker headless implementations.
* Those props are exposed on all the Pickers.
*/
export interface UsePickerBaseProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerProps<TValue, TView, TError, any>> extends OnErrorProps<TValue, TError>, Omit<UseViewsOptions<any, TView>, 'onChange' | 'onFocusedViewChange' | 'focusedView' | 'getStepNavigation'>, TimezoneProps, FormProps {
/**
* The selected value.
* Used when the component is controlled.
*/
value?: TValue;
/**
* The default value.
* Used when the component is not controlled.
*/
defaultValue?: TValue;
/**
* Callback fired when the value changes.
* @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.
* @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.
* @param {TValue} value The new value.
* @param {FieldChangeHandlerContext<TError>} context The context containing the validation result of the current value.
*/
onChange?: (value: TValue, context: PickerChangeHandlerContext<TError>) => void;
/**
* Callback fired when the value is accepted.
* @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.
* @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.
* @param {TValue} value The value that was just accepted.
* @param {FieldChangeHandlerContext<TError>} context The context containing the validation result of the current value.
*/
onAccept?: (value: TValue, context: PickerChangeHandlerContext<TError>) => void;
/**
* If `null`, the section will only have field editing.
* If `undefined`, internally defined view will be used.
*/
viewRenderers: PickerViewRendererLookup<TValue, TView, TExternalProps>;
/**
* The date used to generate the new value when both `value` and `defaultValue` are empty.
* @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.
*/
referenceDate?: TValue extends PickerRangeValue ? TValue | PickerValidDate : PickerValidDate;
/**
* Force rendering in particular orientation.
*/
orientation?: PickerOrientation;
/**
* If `true`, disable heavy animations.
* @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13
*/
reduceAnimations?: boolean;
}
/**
* Props used to handle the value of non-static Pickers.
*/
export interface UsePickerNonStaticProps extends Omit<PickerFieldPrivateContextValue, 'fieldRef'> {
/**
* If `true`, the Picker will close after submitting the full date.
* @default false
*/
closeOnSelect?: boolean;
/**
* Control the popup or dialog open state.
* @default false
*/
open?: boolean;
/**
* Callback fired when the popup requests to be closed.
* Use in controlled mode (see `open`).
*/
onClose?: () => void;
/**
* Callback fired when the popup requests to be opened.
* Use in controlled mode (see `open`).
*/
onOpen?: () => void;
/**
* Format of the date when rendered in the input(s).
* Defaults to localized format based on the used `views`.
*/
format?: string;
/**
* If `true`, the button to open the Picker will not be rendered (it will only render the field).
* @deprecated Use the [field component](https://mui.com/x/react-date-pickers/fields/) instead.
* @default false
*/
disableOpenPicker?: boolean;
/**
* The label content.
*/
label?: React.ReactNode;
/**
* Pass a ref to the `input` element.
*/
inputRef?: React.Ref<HTMLInputElement>;
/**
* Name attribute used by the `input` element in the Field.
*/
name?: string;
}
export interface UsePickerProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerProps<TValue, TView, TError, any>> extends UsePickerBaseProps<TValue, TView, TError, TExternalProps>, UsePickerNonStaticProps {
referenceDate?: TValue extends PickerRangeValue ? TValue | PickerValidDate : PickerValidDate;
className?: string;
sx?: SxProps<Theme>;
}
export interface UsePickerParameters<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any>> {
ref: React.ForwardedRef<HTMLDivElement> | undefined;
localeText: PickersInputLocaleText | undefined;
variant: PickerVariant;
valueManager: PickerValueManager<TValue, InferError<TExternalProps>>;
valueType: PickerValueType;
validator: Validator<TValue, InferError<TExternalProps>, TExternalProps>;
autoFocusView: boolean;
viewContainerRole: 'dialog' | 'tooltip' | null;
/**
* A function that intercepts the regular Picker rendering.
* Can be used to consume the provided `viewRenderers` and render a custom component wrapping them.
* @param {PickerViewRendererLookup<TValue, TView, TExternalProps>} viewRenderers The `viewRenderers` provided to the Picker component.
* @param {TView} popperView The current Picker view.
* @param {any} rendererProps All the props being passed down to the renderer.
* @returns {React.ReactNode} A React node that will be rendered instead of the default renderer.
*/
rendererInterceptor?: React.JSXElementConstructor<PickerRendererInterceptorProps<TValue, TView, TExternalProps>>;
props: TExternalProps;
getStepNavigation: CreateStepNavigationReturnValue;
onPopperExited?: () => void;
}
export interface UsePickerReturnValue<TValue extends PickerValidValue> {
ownerState: PickerOwnerState;
renderCurrentView: () => React.ReactNode;
providerProps: Omit<PickerProviderProps<TValue>, 'children'>;
}
export type PickerSelectionState = 'partial' | 'shallow' | 'finish';
export interface UsePickerState<TValue extends PickerValidValue> {
/**
* Whether the Picker is open.
*/
open: boolean;
/**
* Last value returned by `useControlledValue`.
*/
lastExternalValue: TValue;
/**
* Date currently displayed on the views if we are dragging the cursor in the Clock component.
*/
clockShallowValue: TValue | undefined;
/**
* Last value committed (the last value for which `shouldCommitValue` returned `true`).
* If `onAccept` is defined, it's the value that was passed on the last call to this callback.
*/
lastCommittedValue: TValue;
/**
* If we never modified the value since the mount of the component,
* Then we might want to apply some custom logic.
*
* For example, when the component is not controlled and `defaultValue` is defined.
* Then clicking on "Accept", "Today" or "Clear" should fire `onAccept` with `defaultValue`, but clicking on "Cancel" or dismissing the Picker should not.
*/
hasBeenModifiedSinceMount: boolean;
}
export interface PickerViewsRendererBaseExternalProps extends Omit<UsePickerProps<any, any, any, any>, 'openTo' | 'viewRenderers' | 'onChange'> {}
export type PickerViewsRendererProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps> = Omit<TExternalProps, 'className' | 'sx'> & {
value: TValue;
onChange: (value: TValue, selectionState?: PickerSelectionState) => void;
view: TView;
views: readonly TView[];
focusedView: TView | null;
onFocusedViewChange: (viewToFocus: TView, hasFocus: boolean) => void;
showViewSwitcher: boolean;
timeViewsCount: number;
};
export type PickerViewRenderer<TValue extends PickerValidValue, TExternalProps extends PickerViewsRendererBaseExternalProps> = (props: PickerViewsRendererProps<TValue, any, TExternalProps>) => React.ReactNode;
export type PickerViewRendererLookup<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps> = Record<TView, PickerViewRenderer<TValue, TExternalProps> | null>;
export interface PickerRendererInterceptorProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, TExternalProps>> {
viewRenderers: PickerViewRendererLookup<TValue, TView, TExternalProps>;
popperView: TView;
rendererProps: PickerViewsRendererProps<TValue, TView, TExternalProps>;
}

View file

@ -0,0 +1,5 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});