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,6 @@
export { useDateManager } from "./useDateManager.js";
export type { UseDateManagerReturnValue, UseDateManagerParameters, DateManagerFieldInternalProps } from "./useDateManager.js";
export { useTimeManager } from "./useTimeManager.js";
export type { UseTimeManagerReturnValue, UseTimeManagerParameters, TimeManagerFieldInternalProps } from "./useTimeManager.js";
export { useDateTimeManager } from "./useDateTimeManager.js";
export type { UseDateTimeManagerReturnValue, UseDateTimeManagerParameters, DateTimeManagerFieldInternalProps } from "./useDateTimeManager.js";

View file

@ -0,0 +1,3 @@
export { useDateManager } from "./useDateManager.js";
export { useTimeManager } from "./useTimeManager.js";
export { useDateTimeManager } from "./useDateTimeManager.js";

View file

@ -0,0 +1,14 @@
import type { MakeOptional } from '@mui/x-internals/types';
import { PickerManager, DateValidationError } from "../models/index.js";
import { UseFieldInternalProps } from "../internals/hooks/useField/index.js";
import { ExportedValidateDateProps, ValidateDateProps } from "../validation/validateDate.js";
import { PickerValue } from "../internals/models/index.js";
export declare function useDateManager<TEnableAccessibleFieldDOMStructure extends boolean = true>(parameters?: UseDateManagerParameters<TEnableAccessibleFieldDOMStructure>): UseDateManagerReturnValue<TEnableAccessibleFieldDOMStructure>;
type SharedDateAndDateRangeValidationProps = 'disablePast' | 'disableFuture' | 'minDate' | 'maxDate';
export declare function useApplyDefaultValuesToDateValidationProps(props: Pick<ExportedValidateDateProps, SharedDateAndDateRangeValidationProps>): Pick<ValidateDateProps, SharedDateAndDateRangeValidationProps>;
export interface UseDateManagerParameters<TEnableAccessibleFieldDOMStructure extends boolean> {
enableAccessibleFieldDOMStructure?: TEnableAccessibleFieldDOMStructure;
}
export type UseDateManagerReturnValue<TEnableAccessibleFieldDOMStructure extends boolean> = PickerManager<PickerValue, TEnableAccessibleFieldDOMStructure, DateValidationError, ValidateDateProps, DateManagerFieldInternalProps<TEnableAccessibleFieldDOMStructure>>;
export interface DateManagerFieldInternalProps<TEnableAccessibleFieldDOMStructure extends boolean> extends MakeOptional<UseFieldInternalProps<PickerValue, TEnableAccessibleFieldDOMStructure, DateValidationError>, 'format'>, ExportedValidateDateProps {}
export {};

View file

@ -0,0 +1,48 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import { applyDefaultDate } from "../internals/utils/date-utils.js";
import { singleItemFieldValueManager, singleItemValueManager } from "../internals/utils/valueManagers.js";
import { validateDate } from "../validation/index.js";
import { useDefaultDates } from "../internals/hooks/useUtils.js";
import { usePickerAdapter, usePickerTranslations } from "../hooks/index.js";
export function useDateManager(parameters = {}) {
const {
enableAccessibleFieldDOMStructure = true
} = parameters;
return React.useMemo(() => ({
valueType: 'date',
validator: validateDate,
internal_valueManager: singleItemValueManager,
internal_fieldValueManager: singleItemFieldValueManager,
internal_enableAccessibleFieldDOMStructure: enableAccessibleFieldDOMStructure,
internal_useApplyDefaultValuesToFieldInternalProps: useApplyDefaultValuesToDateFieldInternalProps,
internal_useOpenPickerButtonAriaLabel: useOpenPickerButtonAriaLabel
}), [enableAccessibleFieldDOMStructure]);
}
function useOpenPickerButtonAriaLabel(value) {
const adapter = usePickerAdapter();
const translations = usePickerTranslations();
return React.useMemo(() => {
const formattedValue = adapter.isValid(value) ? adapter.format(value, 'fullDate') : null;
return translations.openDatePickerDialogue(formattedValue);
}, [value, translations, adapter]);
}
function useApplyDefaultValuesToDateFieldInternalProps(internalProps) {
const adapter = usePickerAdapter();
const validationProps = useApplyDefaultValuesToDateValidationProps(internalProps);
return React.useMemo(() => _extends({}, internalProps, validationProps, {
format: internalProps.format ?? adapter.formats.keyboardDate
}), [internalProps, validationProps, adapter]);
}
export function useApplyDefaultValuesToDateValidationProps(props) {
const adapter = usePickerAdapter();
const defaultDates = useDefaultDates();
return React.useMemo(() => ({
disablePast: props.disablePast ?? false,
disableFuture: props.disableFuture ?? false,
minDate: applyDefaultDate(adapter, props.minDate, defaultDates.minDate),
maxDate: applyDefaultDate(adapter, props.maxDate, defaultDates.maxDate)
}), [props.minDate, props.maxDate, props.disableFuture, props.disablePast, adapter, defaultDates]);
}

View file

@ -0,0 +1,15 @@
import type { MakeOptional } from '@mui/x-internals/types';
import { PickerManager, DateTimeValidationError } from "../models/index.js";
import { UseFieldInternalProps } from "../internals/hooks/useField/index.js";
import { AmPmProps } from "../internals/models/props/time.js";
import { ExportedValidateDateTimeProps, ValidateDateTimeProps } from "../validation/validateDateTime.js";
import { PickerValue } from "../internals/models/index.js";
export declare function useDateTimeManager<TEnableAccessibleFieldDOMStructure extends boolean = true>(parameters?: UseDateTimeManagerParameters<TEnableAccessibleFieldDOMStructure>): UseDateTimeManagerReturnValue<TEnableAccessibleFieldDOMStructure>;
type SharedDateTimeAndDateTimeRangeValidationProps = 'disablePast' | 'disableFuture' | 'minTime' | 'maxTime' | 'minDate' | 'maxDate';
export declare function useApplyDefaultValuesToDateTimeValidationProps(props: Pick<ExportedValidateDateTimeProps, SharedDateTimeAndDateTimeRangeValidationProps | 'minDateTime' | 'maxDateTime'>): Pick<ValidateDateTimeProps, SharedDateTimeAndDateTimeRangeValidationProps>;
export interface UseDateTimeManagerParameters<TEnableAccessibleFieldDOMStructure extends boolean> {
enableAccessibleFieldDOMStructure?: TEnableAccessibleFieldDOMStructure;
}
export type UseDateTimeManagerReturnValue<TEnableAccessibleFieldDOMStructure extends boolean> = PickerManager<PickerValue, TEnableAccessibleFieldDOMStructure, DateTimeValidationError, ValidateDateTimeProps, DateTimeManagerFieldInternalProps<TEnableAccessibleFieldDOMStructure>>;
export interface DateTimeManagerFieldInternalProps<TEnableAccessibleFieldDOMStructure extends boolean> extends MakeOptional<UseFieldInternalProps<PickerValue, TEnableAccessibleFieldDOMStructure, DateTimeValidationError>, 'format'>, ExportedValidateDateTimeProps, AmPmProps {}
export {};

View file

@ -0,0 +1,53 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import { applyDefaultDate } from "../internals/utils/date-utils.js";
import { singleItemFieldValueManager, singleItemValueManager } from "../internals/utils/valueManagers.js";
import { validateDateTime } from "../validation/index.js";
import { useDefaultDates } from "../internals/hooks/useUtils.js";
import { usePickerAdapter, usePickerTranslations } from "../hooks/index.js";
export function useDateTimeManager(parameters = {}) {
const {
enableAccessibleFieldDOMStructure = true
} = parameters;
return React.useMemo(() => ({
valueType: 'date-time',
validator: validateDateTime,
internal_valueManager: singleItemValueManager,
internal_fieldValueManager: singleItemFieldValueManager,
internal_enableAccessibleFieldDOMStructure: enableAccessibleFieldDOMStructure,
internal_useApplyDefaultValuesToFieldInternalProps: useApplyDefaultValuesToDateTimeFieldInternalProps,
internal_useOpenPickerButtonAriaLabel: useOpenPickerButtonAriaLabel
}), [enableAccessibleFieldDOMStructure]);
}
function useOpenPickerButtonAriaLabel(value) {
const adapter = usePickerAdapter();
const translations = usePickerTranslations();
return React.useMemo(() => {
const formattedValue = adapter.isValid(value) ? adapter.format(value, 'fullDate') : null;
return translations.openDatePickerDialogue(formattedValue);
}, [value, translations, adapter]);
}
function useApplyDefaultValuesToDateTimeFieldInternalProps(internalProps) {
const adapter = usePickerAdapter();
const validationProps = useApplyDefaultValuesToDateTimeValidationProps(internalProps);
const ampm = React.useMemo(() => internalProps.ampm ?? adapter.is12HourCycleInCurrentLocale(), [internalProps.ampm, adapter]);
return React.useMemo(() => _extends({}, internalProps, validationProps, {
format: internalProps.format ?? (ampm ? adapter.formats.keyboardDateTime12h : adapter.formats.keyboardDateTime24h)
}), [internalProps, validationProps, ampm, adapter]);
}
export function useApplyDefaultValuesToDateTimeValidationProps(props) {
const adapter = usePickerAdapter();
const defaultDates = useDefaultDates();
return React.useMemo(() => ({
disablePast: props.disablePast ?? false,
disableFuture: props.disableFuture ?? false,
// TODO: Explore if we can remove it from the public API
disableIgnoringDatePartForTimeValidation: !!props.minDateTime || !!props.maxDateTime || !!props.disableFuture || !!props.disablePast,
minDate: applyDefaultDate(adapter, props.minDateTime ?? props.minDate, defaultDates.minDate),
maxDate: applyDefaultDate(adapter, props.maxDateTime ?? props.maxDate, defaultDates.maxDate),
minTime: props.minDateTime ?? props.minTime,
maxTime: props.maxDateTime ?? props.maxTime
}), [props.minDateTime, props.maxDateTime, props.minTime, props.maxTime, props.minDate, props.maxDate, props.disableFuture, props.disablePast, adapter, defaultDates]);
}

View file

@ -0,0 +1,15 @@
import type { MakeOptional } from '@mui/x-internals/types';
import { PickerManager, TimeValidationError } from "../models/index.js";
import { UseFieldInternalProps } from "../internals/hooks/useField/index.js";
import { AmPmProps } from "../internals/models/props/time.js";
import { ExportedValidateTimeProps, ValidateTimeProps } from "../validation/validateTime.js";
import { PickerValue } from "../internals/models/index.js";
export declare function useTimeManager<TEnableAccessibleFieldDOMStructure extends boolean = true>(parameters?: UseTimeManagerParameters<TEnableAccessibleFieldDOMStructure>): UseTimeManagerReturnValue<TEnableAccessibleFieldDOMStructure>;
type SharedTimeAndTimeRangeValidationProps = 'disablePast' | 'disableFuture';
export declare function useApplyDefaultValuesToTimeValidationProps(props: Pick<ExportedValidateTimeProps, SharedTimeAndTimeRangeValidationProps>): Pick<ValidateTimeProps, SharedTimeAndTimeRangeValidationProps>;
export interface UseTimeManagerParameters<TEnableAccessibleFieldDOMStructure extends boolean> extends AmPmProps {
enableAccessibleFieldDOMStructure?: TEnableAccessibleFieldDOMStructure;
}
export type UseTimeManagerReturnValue<TEnableAccessibleFieldDOMStructure extends boolean> = PickerManager<PickerValue, TEnableAccessibleFieldDOMStructure, TimeValidationError, ValidateTimeProps, TimeManagerFieldInternalProps<TEnableAccessibleFieldDOMStructure>>;
export interface TimeManagerFieldInternalProps<TEnableAccessibleFieldDOMStructure extends boolean> extends MakeOptional<UseFieldInternalProps<PickerValue, TEnableAccessibleFieldDOMStructure, TimeValidationError>, 'format'>, ExportedValidateTimeProps, AmPmProps {}
export {};

View file

@ -0,0 +1,47 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import { singleItemFieldValueManager, singleItemValueManager } from "../internals/utils/valueManagers.js";
import { validateTime } from "../validation/index.js";
import { usePickerAdapter, usePickerTranslations } from "../hooks/index.js";
export function useTimeManager(parameters = {}) {
const {
enableAccessibleFieldDOMStructure = true,
ampm
} = parameters;
return React.useMemo(() => ({
valueType: 'time',
validator: validateTime,
internal_valueManager: singleItemValueManager,
internal_fieldValueManager: singleItemFieldValueManager,
internal_enableAccessibleFieldDOMStructure: enableAccessibleFieldDOMStructure,
internal_useApplyDefaultValuesToFieldInternalProps: useApplyDefaultValuesToTimeFieldInternalProps,
internal_useOpenPickerButtonAriaLabel: createUseOpenPickerButtonAriaLabel(ampm)
}), [ampm, enableAccessibleFieldDOMStructure]);
}
function createUseOpenPickerButtonAriaLabel(ampm) {
return function useOpenPickerButtonAriaLabel(value) {
const adapter = usePickerAdapter();
const translations = usePickerTranslations();
return React.useMemo(() => {
const formatKey = ampm ?? adapter.is12HourCycleInCurrentLocale() ? 'fullTime12h' : 'fullTime24h';
const formattedValue = adapter.isValid(value) ? adapter.format(value, formatKey) : null;
return translations.openTimePickerDialogue(formattedValue);
}, [value, translations, adapter]);
};
}
function useApplyDefaultValuesToTimeFieldInternalProps(internalProps) {
const adapter = usePickerAdapter();
const validationProps = useApplyDefaultValuesToTimeValidationProps(internalProps);
const ampm = React.useMemo(() => internalProps.ampm ?? adapter.is12HourCycleInCurrentLocale(), [internalProps.ampm, adapter]);
return React.useMemo(() => _extends({}, internalProps, validationProps, {
format: internalProps.format ?? (ampm ? adapter.formats.fullTime12h : adapter.formats.fullTime24h)
}), [internalProps, validationProps, ampm, adapter]);
}
export function useApplyDefaultValuesToTimeValidationProps(props) {
return React.useMemo(() => ({
disablePast: props.disablePast ?? false,
disableFuture: props.disableFuture ?? false
}), [props.disablePast, props.disableFuture]);
}