import type { MuiPickersAdapter, PickerManager, PickersTimezone, PickerValidDate, PickerValueType } from "../../models/index.js"; import type { GetDefaultReferenceDateProps } from "../utils/getDefaultReferenceDate.js"; import { InferNonNullablePickerValue, PickerRangeValue, PickerValidValue } from "./value.js"; import type { UseFieldInternalProps } from "../hooks/useField/index.js"; export type PickerAnyManager = PickerManager; type PickerManagerProperties = TManager extends PickerManager ? { value: TValue; enableAccessibleFieldDOMStructure: TEnableAccessibleFieldDOMStructure; error: TError; validationProps: TValidationProps; fieldInternalProps: TFieldInternalProps; } : never; export type PickerManagerValue = PickerManagerProperties['value']; export type PickerManagerError = PickerManagerProperties['error']; export type PickerManagerFieldInternalProps = PickerManagerProperties['fieldInternalProps']; export type PickerManagerValidationProps = PickerManagerProperties['validationProps']; export type PickerManagerFieldInternalPropsWithDefaults = UseFieldInternalProps, PickerManagerEnableAccessibleFieldDOMStructure, PickerManagerError> & PickerManagerValidationProps; export type PickerManagerEnableAccessibleFieldDOMStructure = PickerManagerProperties['enableAccessibleFieldDOMStructure']; export interface PickerValueManager { /** * Determines if two values are equal. * @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. * @param {MuiPickersAdapter} adapter The Picker date adapter instance. * @param {TValue} valueLeft The first value to compare. * @param {TValue} valueRight The second value to compare. * @returns {boolean} A boolean indicating if the two values are equal. */ areValuesEqual: (adapter: MuiPickersAdapter, valueLeft: TValue, valueRight: TValue) => boolean; /** * Value to set when clicking the "Clear" button. */ emptyValue: TValue; /** * Method returning the value to set when clicking the "Today" button. * @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. * @param {MuiPickersAdapter} adapter The Picker date adapter instance. * @param {PickersTimezone} timezone The current timezone. * @param {PickerValueType} valueType The type of the value being edited. * @returns {TValue} The value to set when clicking the "Today" button. */ getTodayValue: (adapter: MuiPickersAdapter, timezone: PickersTimezone, valueType: PickerValueType) => TValue; /** * @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. * Method returning the reference value to use when mounting the component. * @param {object} params The params of the method. * @param {PickerValidDate | PickerValidDate[] | undefined} params.referenceDate The referenceDate provided by the user. * @param {TValue} params.value The value provided by the user. * @param {GetDefaultReferenceDateProps} params.props The validation props needed to compute the reference value. * @param {MuiPickersAdapter} params.adapter The Picker date adapter instance. * @param {number} params.granularity The granularity of the selection possible on this component. * @param {PickersTimezone} params.timezone The current timezone. * @param {() => PickerValidDate} params.getTodayDate The reference date to use if no reference date is passed to the component. * @returns {TValue} The reference value to use for non-provided dates. */ getInitialReferenceValue: (params: { referenceDate?: TValue extends PickerRangeValue ? TValue | PickerValidDate : PickerValidDate; value: TValue; props: GetDefaultReferenceDateProps; adapter: MuiPickersAdapter; granularity: number; timezone: PickersTimezone; getTodayDate?: () => PickerValidDate; }) => InferNonNullablePickerValue; /** * Method parsing the input value to replace all invalid dates by `null`. * @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. * @param {MuiPickersAdapter} adapter The Picker date adapter instance. * @param {TValue} value The value to parse. * @returns {TValue} The value without invalid date. */ cleanValue: (adapter: MuiPickersAdapter, value: TValue) => TValue; /** * Generates the new value, given the previous value and the new proposed value. * @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. * @param {MuiPickersAdapter} adapter The Picker date adapter instance. * @param {TValue} lastValidDateValue The last valid value. * @param {TValue} value The proposed value. * @returns {TValue} The new value. */ valueReducer?: (adapter: MuiPickersAdapter, lastValidDateValue: TValue, value: TValue) => TValue; /** * Compare two errors to know if they are equal. * @template TError * @param {TError} error The new error * @param {TError | null} prevError The previous error * @returns {boolean} `true` if the new error is different from the previous one. */ isSameError: (error: TError, prevError: TError | null) => boolean; /** * Checks if the current error is empty or not. * @template TError * @param {TError} error The current error. * @returns {boolean} `true` if the current error is not empty. */ hasError: (error: TError) => boolean; /** * The value identifying no error, used to initialize the error state. */ defaultErrorState: TError; /** * Return the timezone of the date inside a value. * When used on a range Picker, throw an error if both values don't have the same timezone. * @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. @param {MuiPickersAdapter} adapter The Picker date adapter instance. @param {TValue} value The current value. @returns {string | null} The timezone of the current value. */ getTimezone: (adapter: MuiPickersAdapter, value: TValue) => string | null; /** * Change the timezone of the dates inside a value. * @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. @param {MuiPickersAdapter} adapter The Picker date adapter instance. @param {PickersTimezone} timezone The current timezone. @param {TValue} value The value to convert. @returns {TValue} The value with the new dates in the new timezone. */ setTimezone: (adapter: MuiPickersAdapter, timezone: PickersTimezone, value: TValue) => TValue; } export {};