UNPKG

@mui/x-date-pickers

Version:

The community edition of the Date and Time Picker components (MUI X).

293 lines 13.5 kB
import * as React from 'react'; import { SxProps } from '@mui/system'; import { Theme } from '@mui/material/styles'; import { PickerChangeImportance, PickerOwnerState, PickersTimezone } from "../../models/index.js"; import { PickersInputLocaleText } from "../../locales/index.js"; import { DateOrTimeViewWithMeridiem, PickerOrientation, PickerValidValue, PickerVariant } from "../models/index.js"; import { PickerFieldPrivateContextValue } from "../hooks/useNullableFieldPrivateContext.js"; import type { PickersShortcutsItemContext } from "../../PickersShortcuts/index.js"; import type { PickersActionBarAction } from "../../PickersActionBar/index.js"; export declare const PickerActionsContext: React.Context<PickerActionsContextValue<any, any, any> | null>; export declare const PickerPrivateContext: React.Context<PickerPrivateContextValue>; /** * Provides the context for the various parts of a Picker component: * - contextValue: the context for the Picker sub-components. * - localizationProvider: the translations passed through the props and through a parent LocalizationProvider. * * @ignore - do not document. */ export declare function PickerProvider<TValue extends PickerValidValue>(props: PickerProviderProps<TValue>): React.JSX.Element; export interface PickerProviderProps<TValue extends PickerValidValue> { contextValue: PickerContextValue<any, any, any>; actionsContextValue: PickerActionsContextValue<any, any, any>; privateContextValue: PickerPrivateContextValue; fieldPrivateContextValue: PickerFieldPrivateContextValue; isValidContextValue: (value: TValue) => boolean; localeText: PickersInputLocaleText | undefined; children: React.ReactNode; } export interface PickerContextValue<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError> extends PickerActionsContextValue<TValue, TView, TError> { /** * The current value of the Picker. */ value: TValue; /** * The timezone to use when rendering the dates. * If a `timezone` prop is provided, it will be used. * If the `value` prop contains a valid date, its timezone will be used. * If no `value` prop is provided, but the `defaultValue` contains a valid date, its timezone will be used. * If no `value` or `defaultValue` is provided, but the `referenceDate` is provided, its timezone will be used. * Otherwise, the timezone will be the default one of your date library. */ timezone: PickersTimezone; /** * Whether the Picker is open. */ open: boolean; /** * Whether the Picker is disabled. */ disabled: boolean; /** * Whether the Picker is read-only. */ readOnly: boolean; /** * Whether the Picker should be focused on mount. * If the Picker has a field and is not open, the field should be focused. * If the Picker does not have a field (static variant) or is not open, the view should be focused. */ autoFocus: boolean; /** * The views that the Picker has to render. * It is equal to the Picker `views` prop—if defined. * Otherwise, a default set of views is provided based on the component you are using: * - Date Picker: ['year', 'day'] * - Time Picker: ['hours', 'minutes'] * - Date Time Picker: ['year', 'day', 'hours', 'minutes'] * - Date Range Picker: ['day'] * - Date Time Range Picker: ['day', 'hours', 'minutes'] */ views: readonly TView[]; /** * The currently rendered view. */ view: TView | null; /** * The first view shown when opening the Picker for the first time. */ initialView: TView | null; /** * The responsive variant of the Picker. * It is equal to "desktop" when using a desktop Picker (like <DesktopDatePicker />). * It is equal to "mobile" when using a mobile Picker (like <MobileDatePicker />). * It is equal to "mobile" or "desktop" when using a responsive Picker (like <DatePicker />) depending on the `desktopModeMediaQuery` prop. * It is equal to "mobile" or "desktop" when using a static Picker (like <StaticDatePicker />) depending on the `displayStaticWrapperAs` prop. * It is always equal to "desktop" if the component you are accessing the context from is not wrapped with a Picker. */ variant: PickerVariant; /** * The orientation of the Picker. * On Time Pickers and Date Time Pickers, it is always equal to "portrait". * On Date Pickers, it is equal to the Picker `orientation` prop if defined, otherwise it is based on the current orientation of the user's screen. * It is always equal to "portrait" if the component you are accessing the context from is not wrapped with a Picker. */ orientation: PickerOrientation; /** * Whether the heavy animations should be disabled. * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13 */ reduceAnimations?: boolean; /** * The ref to attach to the element that triggers the Picker opening. * When using a built-in field component, this property is automatically attached to the right element. */ triggerRef: React.Dispatch<React.SetStateAction<HTMLElement | null>>; /** * The status of the element that triggers the Picker opening. * If it is "hidden", the field should not render the UI to open the Picker. * If it is "disabled", the field should render a disabled UI to open the Picker. * If it is "enabled", the field should render an interactive UI to open the Picker. */ triggerStatus: 'hidden' | 'disabled' | 'enabled'; /** * Whether the Picker has any value picking steps left. */ hasNextStep: boolean; /** * The ref to attach to the popup's outermost element that contains the view, if any. * When using a built-in popup component, this property is automatically attached to the appropriate element. */ popupRef: React.RefObject<any>; /** * The format to use when rendering the value in the field. * It is equal to the Picker `format` prop if defined. * It is generated based on the available views if not defined. * It is always equal to an empty string if the Picker does not have a field (static variant). * It is always equal to an empty string if the component you are accessing the context from is not wrapped with a Picker. */ fieldFormat: string; /** * The name to apply to the <input /> element if the Picker contains one. * If the Picker has a field, it should probably be applied to its input element. * It is equal to the Picker `name` prop if defined (the prop does not exist on the static variant). * It is always equal to undefined if the component you are accessing the context from is not wrapped with a Picker. */ name: string | undefined; /** * The label to render by the field if the Picker contains one. * It is equal to the Picker `label` prop if defined (the prop does not exist on the static variant). * It is always equal to undefined if the component you are accessing the context from is not wrapped with a Picker. */ label: React.ReactNode | undefined; /** * The class name to apply to the root element. * If the Picker has a field, it should be applied to field root element, otherwise to the layout root element. * It is equal to the Picker `className` prop if defined. * It is always equal to undefined if the component you are accessing the context from is not wrapped with a Picker. */ rootClassName: string | undefined; /** * The MUI style prop to apply to the root element. * If the Picker has a field, it should be applied to field root element, otherwise to the layout root element. * It is equal to the Picker `sx` prop if defined. * It is always equal to undefined if the component you are accessing the context from is not wrapped with a Picker. */ rootSx: SxProps<Theme> | undefined; /** * The ref to attach to the root element. * If the Picker has a field, it should be attached to field root element, otherwise to the layout root element. * It is equal to the ref passed to the Picker component if defined. * It is always equal to undefined if the component you are accessing the context from is not wrapped with a Picker. */ rootRef: React.ForwardedRef<HTMLDivElement> | undefined; } export interface PickerActionsContextValue<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError = string | null> { /** * Set the current value of the Picker. * @param {TValue} value The new value of the Picker. * @param {SetValueActionOptions<TError>} options The options to customize the behavior of this update. */ setValue: (value: TValue, options?: SetValueActionOptions<TError>) => void; /** * Set the current open state of the Picker. * It can be a function that will receive the current open state as parameter. * ```ts * setOpen(true); // Opens the Picker. * setOpen(false); // Closes the Picker. * setOpen((prevOpen) => !prevOpen); // Toggles the open state. * ``` * @param {React.SetStateAction<boolean>} action The new open state of the Picker. */ setOpen: React.Dispatch<React.SetStateAction<boolean>>; /** * Set the current view of the Picker. * @template TView * @param {TView} view The new view of the Picker */ setView: (view: TView) => void; /** * Set the current value of the Picker to be empty. * The value will be `null` on a single Picker and `[null, null]` on a range Picker. */ clearValue: () => void; /** * Set the current value of the Picker to be the current date. * The value will be `today` on a non-range Picker and `[today, today]` on a range Picker. * With `today` being the current date, with its time set to `00:00:00` on Date Pickers and its time set to the current time on Time and Date and Time Pickers. */ setValueToToday: () => void; /** * Accept the current value of the Picker. * Will call `onAccept` if defined. * If the Picker is re-opened, this value will be the one used to initialize the views. */ acceptValueChanges: () => void; /** * Cancel the changes made to the current value of the Picker. * The value will be reset to the last accepted value. */ cancelValueChanges: () => void; /** * Go to the next step in the value picking process. * For example, on the Mobile Date Time Picker, if the user is editing the date, it will switch to editing the time. */ goToNextStep: () => void; } export interface SetValueActionOptions<TError = string | null> { /** * The importance of the change when picking a value: * - "accept": fires `onChange`, fires `onAccept` and closes the Picker. * - "set": fires `onChange` but do not fire `onAccept` and does not close the Picker. * @default "accept" */ changeImportance?: PickerChangeImportance; /** * The validation error associated with the current value. * If not defined, the validation will be computed by the Picker. */ validationError?: TError; /** * The shortcut that triggered this change. * It should not be defined if the change does not come from a shortcut. */ shortcut?: PickersShortcutsItemContext; /** * Whether the value should call `onChange` and `onAccept` when the value is not controlled and has never been modified. * If `true`, the `onChange` and `onAccept` callback will only be fired if the value has been modified (and is not equal to the last published value). * If `false`, the `onChange` and `onAccept` callback will be fired when the value has never been modified (`onAccept` only if `changeImportance` is set to "accept"). * @default false */ skipPublicationIfPristine?: boolean; /** * Whether the Picker should close. * @default changeImportance === "accept" */ shouldClose?: boolean; } export interface PickerPrivateContextValue { dismissViews: () => void; /** * The ownerState of the picker. */ ownerState: PickerOwnerState; /** * Whether at least one view has an UI (it has a view renderer associated). */ hasUIView: boolean; /** * Return the mode of the current view. * @returns {boolean} The mode of the current view. */ getCurrentViewMode: () => 'UI' | 'field'; /** * The ref of the root element. * This is the object counterpart of the `usePickerContext().rootRef` property which can be a function. */ rootRefObject: React.RefObject<HTMLDivElement | null>; /** * The id of the label element. */ labelId: string | undefined; /** * The element used as the anchor for the Picker Popper. */ triggerElement: HTMLElement | null; /** * The aria role associated with the view container. * It is equal to "dialog" when the view is rendered inside a `@mui/material/Dialog`. * It is equal to "dialog" when the view is rendered inside a `@mui/material/Popper` and the focus is trapped inside the view. * It is equal to "tooltip" when the view is rendered inside a `@mui/material/Popper` and the focus remains inside the field. * It is always equal to null if the Picker does not have a field (static variant). * It is always equal to null if the component you are accessing the context from is not wrapped with a Picker. */ viewContainerRole: 'dialog' | 'tooltip' | null; /** * The actions to render in the action bar if the user doesn't provide any. */ defaultActionBarActions: PickersActionBarAction[]; /** * The function to call when the Popper is closing animation is finished. */ onPopperExited: (() => void) | undefined; }