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,13 @@
import { DateOrTimeViewWithMeridiem } from "../models/common.js";
export declare function createNonRangePickerStepNavigation(parameters: CreateNonRangePickerStepNavigationParameters): import("./createStepNavigation.js").CreateStepNavigationReturnValue;
export interface PickerStep {
/**
* The views that are handled inside this step.
* If null, all views are handled by this step.
*/
views: readonly DateOrTimeViewWithMeridiem[] | null;
}
interface CreateNonRangePickerStepNavigationParameters {
steps: PickerStep[] | null;
}
export {};

View file

@ -0,0 +1,30 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createNonRangePickerStepNavigation = createNonRangePickerStepNavigation;
var _createStepNavigation = require("./createStepNavigation");
function createNonRangePickerStepNavigation(parameters) {
const {
steps
} = parameters;
return (0, _createStepNavigation.createStepNavigation)({
steps,
isViewMatchingStep: (view, step) => {
return step.views == null || step.views.includes(view);
},
onStepChange: ({
step,
defaultView,
setView,
view,
views
}) => {
const targetView = step.views == null ? defaultView : step.views.find(viewBis => views.includes(viewBis));
if (targetView !== view) {
setView(targetView);
}
}
});
}

View file

@ -0,0 +1,49 @@
import { DateOrTimeViewWithMeridiem } from "../models/index.js";
export declare const DEFAULT_STEP_NAVIGATION: {
hasNextStep: boolean;
hasSeveralSteps: boolean;
goToNextStep: () => void;
areViewsInSameStep: () => boolean;
};
/**
* Create an object that determines whether there is a next step and allows to go to the next step.
* @param {CreateStepNavigationParameters<TStep>} parameters The parameters of the createStepNavigation function
* @returns {CreateStepNavigationReturnValue} The return value of the createStepNavigation function
*/
export declare function createStepNavigation<TStep extends {}>(parameters: CreateStepNavigationParameters<TStep>): CreateStepNavigationReturnValue;
interface CreateStepNavigationParameters<TStep extends {}> {
steps: TStep[] | null;
isViewMatchingStep: (view: DateOrTimeViewWithMeridiem, step: TStep) => boolean;
onStepChange: (parameters: UseRangePickerStepNavigationOnStepChangeParameters<TStep>) => void;
}
export type CreateStepNavigationReturnValue = (parameters: CreateStepNavigationReturnValueParameters) => {
/**
* Whether there is a next step.
*/
hasNextStep: boolean;
/**
* Whether there are several steps.
*/
hasSeveralSteps: boolean;
/**
* Go to the next step if any.
*/
goToNextStep: () => void;
/**
* Whether the two views are in the same step.
* @param {DateOrTimeViewWithMeridiem} viewA The first view to compare.
* @param {DateOrTimeViewWithMeridiem} viewB The second view to compare.
* @returns {boolean} Whether the two views are in the same step.
*/
areViewsInSameStep: (viewA: DateOrTimeViewWithMeridiem, viewB: DateOrTimeViewWithMeridiem) => boolean;
};
export interface CreateStepNavigationReturnValueParameters {
defaultView: DateOrTimeViewWithMeridiem;
view: DateOrTimeViewWithMeridiem;
views: readonly DateOrTimeViewWithMeridiem[];
setView: (view: any) => void;
}
interface UseRangePickerStepNavigationOnStepChangeParameters<TStep extends {}> extends CreateStepNavigationReturnValueParameters {
step: TStep;
}
export {};

View file

@ -0,0 +1,52 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DEFAULT_STEP_NAVIGATION = void 0;
exports.createStepNavigation = createStepNavigation;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
const DEFAULT_STEP_NAVIGATION = exports.DEFAULT_STEP_NAVIGATION = {
hasNextStep: false,
hasSeveralSteps: false,
goToNextStep: () => {},
areViewsInSameStep: () => true
};
/**
* Create an object that determines whether there is a next step and allows to go to the next step.
* @param {CreateStepNavigationParameters<TStep>} parameters The parameters of the createStepNavigation function
* @returns {CreateStepNavigationReturnValue} The return value of the createStepNavigation function
*/
function createStepNavigation(parameters) {
const {
steps,
isViewMatchingStep,
onStepChange
} = parameters;
return parametersBis => {
if (steps == null) {
return DEFAULT_STEP_NAVIGATION;
}
const currentStepIndex = steps.findIndex(step => isViewMatchingStep(parametersBis.view, step));
const nextStep = currentStepIndex === -1 || currentStepIndex === steps.length - 1 ? null : steps[currentStepIndex + 1];
return {
hasNextStep: nextStep != null,
hasSeveralSteps: steps.length > 1,
goToNextStep: () => {
if (nextStep == null) {
return;
}
onStepChange((0, _extends2.default)({}, parametersBis, {
step: nextStep
}));
},
areViewsInSameStep: (viewA, viewB) => {
const stepA = steps.find(step => isViewMatchingStep(viewA, step));
const stepB = steps.find(step => isViewMatchingStep(viewB, step));
return stepA === stepB;
}
};
};
}

View file

@ -0,0 +1,26 @@
import { DefaultizedProps } from '@mui/x-internals/types';
import { DateOrTimeView, MuiPickersAdapter } from "../../models/index.js";
import { DateOrTimeViewWithMeridiem } from "../models/index.js";
import { DigitalTimePickerProps } from "../models/props/time.js";
export declare const resolveDateTimeFormat: (adapter: MuiPickersAdapter, {
views,
format,
...other
}: {
format?: string;
views: readonly DateOrTimeViewWithMeridiem[];
ampm: boolean;
}, ignoreDateResolving?: boolean) => string;
interface DefaultizedTimeViewsProps<TView = DateOrTimeView> extends DefaultizedProps<DigitalTimePickerProps, 'ampm'> {
views: readonly TView[];
}
interface DefaultizedTimeViewsResponse<TView = DateOrTimeViewWithMeridiem> extends Required<Pick<DefaultizedTimeViewsProps<TView>, 'thresholdToRenderTimeInASingleColumn' | 'timeSteps' | 'views'>> {
shouldRenderTimeInASingleColumn: boolean;
}
export declare function resolveTimeViewsResponse<InTView extends DateOrTimeView = DateOrTimeView, OutTView extends DateOrTimeViewWithMeridiem = DateOrTimeViewWithMeridiem>({
thresholdToRenderTimeInASingleColumn: inThreshold,
ampm,
timeSteps: inTimeSteps,
views
}: DefaultizedTimeViewsProps<InTView>): DefaultizedTimeViewsResponse<OutTView>;
export {};

View file

@ -0,0 +1,77 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.resolveDateTimeFormat = void 0;
exports.resolveTimeViewsResponse = resolveTimeViewsResponse;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var _timeUtils = require("./time-utils");
var _dateUtils = require("./date-utils");
const _excluded = ["views", "format"];
const resolveDateTimeFormat = (adapter, _ref, ignoreDateResolving) => {
let {
views,
format
} = _ref,
other = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
if (format) {
return format;
}
const dateViews = [];
const timeViews = [];
views.forEach(view => {
if ((0, _timeUtils.isTimeView)(view)) {
timeViews.push(view);
} else if ((0, _dateUtils.isDatePickerView)(view)) {
dateViews.push(view);
}
});
if (timeViews.length === 0) {
return (0, _dateUtils.resolveDateFormat)(adapter, (0, _extends2.default)({
views: dateViews
}, other), false);
}
if (dateViews.length === 0) {
return (0, _timeUtils.resolveTimeFormat)(adapter, (0, _extends2.default)({
views: timeViews
}, other));
}
const timeFormat = (0, _timeUtils.resolveTimeFormat)(adapter, (0, _extends2.default)({
views: timeViews
}, other));
const dateFormat = ignoreDateResolving ? adapter.formats.keyboardDate : (0, _dateUtils.resolveDateFormat)(adapter, (0, _extends2.default)({
views: dateViews
}, other), false);
return `${dateFormat} ${timeFormat}`;
};
exports.resolveDateTimeFormat = resolveDateTimeFormat;
const resolveViews = (ampm, views, shouldUseSingleColumn) => {
if (shouldUseSingleColumn) {
return views.filter(view => !(0, _timeUtils.isInternalTimeView)(view) || view === 'hours');
}
return ampm ? [...views, 'meridiem'] : views;
};
const resolveShouldRenderTimeInASingleColumn = (timeSteps, threshold) => 24 * 60 / ((timeSteps.hours ?? 1) * (timeSteps.minutes ?? 5)) <= threshold;
function resolveTimeViewsResponse({
thresholdToRenderTimeInASingleColumn: inThreshold,
ampm,
timeSteps: inTimeSteps,
views
}) {
const thresholdToRenderTimeInASingleColumn = inThreshold ?? 24;
const timeSteps = (0, _extends2.default)({
hours: 1,
minutes: 5,
seconds: 5
}, inTimeSteps);
const shouldRenderTimeInASingleColumn = resolveShouldRenderTimeInASingleColumn(timeSteps, thresholdToRenderTimeInASingleColumn);
return {
thresholdToRenderTimeInASingleColumn,
timeSteps,
shouldRenderTimeInASingleColumn,
views: resolveViews(ampm, views, shouldRenderTimeInASingleColumn)
};
}

View file

@ -0,0 +1,40 @@
import { DateView, MuiPickersAdapter, PickersTimezone, PickerValidDate, PickerValueType } from "../../models/index.js";
import { DateOrTimeViewWithMeridiem } from "../models/index.js";
export declare const mergeDateAndTime: (adapter: MuiPickersAdapter, dateParam: PickerValidDate, timeParam: PickerValidDate) => PickerValidDate;
interface FindClosestDateParams {
date: PickerValidDate;
disableFuture?: boolean;
disablePast?: boolean;
maxDate: PickerValidDate;
minDate: PickerValidDate;
isDateDisabled: (date: PickerValidDate) => boolean;
adapter: MuiPickersAdapter;
timezone: PickersTimezone;
}
export declare const findClosestEnabledDate: ({
date,
disableFuture,
disablePast,
maxDate,
minDate,
isDateDisabled,
adapter,
timezone
}: FindClosestDateParams) => PickerValidDate | null;
export declare const replaceInvalidDateByNull: (adapter: MuiPickersAdapter, value: PickerValidDate | null) => PickerValidDate | null;
export declare const applyDefaultDate: (adapter: MuiPickersAdapter, value: PickerValidDate | null | undefined, defaultValue: PickerValidDate) => PickerValidDate;
export declare const areDatesEqual: (adapter: MuiPickersAdapter, a: PickerValidDate | null, b: PickerValidDate | null) => boolean;
export declare const getMonthsInYear: (adapter: MuiPickersAdapter, year: PickerValidDate) => PickerValidDate[];
export declare const getTodayDate: (adapter: MuiPickersAdapter, timezone: PickersTimezone, valueType?: PickerValueType) => PickerValidDate;
export declare const formatMeridiem: (adapter: MuiPickersAdapter, meridiem: "am" | "pm") => string;
export declare const DATE_VIEWS: readonly ["year", "month", "day"];
export declare const isDatePickerView: (view: DateOrTimeViewWithMeridiem) => view is DateView;
export declare const resolveDateFormat: (adapter: MuiPickersAdapter, {
format,
views
}: {
format?: string;
views: readonly DateView[];
}, isInToolbar: boolean) => string;
export declare const getWeekdays: (adapter: MuiPickersAdapter, date: PickerValidDate) => PickerValidDate[];
export {};

View file

@ -0,0 +1,141 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.resolveDateFormat = exports.replaceInvalidDateByNull = exports.mergeDateAndTime = exports.isDatePickerView = exports.getWeekdays = exports.getTodayDate = exports.getMonthsInYear = exports.formatMeridiem = exports.findClosestEnabledDate = exports.areDatesEqual = exports.applyDefaultDate = exports.DATE_VIEWS = void 0;
var _views = require("./views");
const mergeDateAndTime = (adapter, dateParam, timeParam) => {
let mergedDate = dateParam;
mergedDate = adapter.setHours(mergedDate, adapter.getHours(timeParam));
mergedDate = adapter.setMinutes(mergedDate, adapter.getMinutes(timeParam));
mergedDate = adapter.setSeconds(mergedDate, adapter.getSeconds(timeParam));
mergedDate = adapter.setMilliseconds(mergedDate, adapter.getMilliseconds(timeParam));
return mergedDate;
};
exports.mergeDateAndTime = mergeDateAndTime;
const findClosestEnabledDate = ({
date,
disableFuture,
disablePast,
maxDate,
minDate,
isDateDisabled,
adapter,
timezone
}) => {
const today = mergeDateAndTime(adapter, adapter.date(undefined, timezone), date);
if (disablePast && adapter.isBefore(minDate, today)) {
minDate = today;
}
if (disableFuture && adapter.isAfter(maxDate, today)) {
maxDate = today;
}
let forward = date;
let backward = date;
if (adapter.isBefore(date, minDate)) {
forward = minDate;
backward = null;
}
if (adapter.isAfter(date, maxDate)) {
if (backward) {
backward = maxDate;
}
forward = null;
}
while (forward || backward) {
if (forward && adapter.isAfter(forward, maxDate)) {
forward = null;
}
if (backward && adapter.isBefore(backward, minDate)) {
backward = null;
}
if (forward) {
if (!isDateDisabled(forward)) {
return forward;
}
forward = adapter.addDays(forward, 1);
}
if (backward) {
if (!isDateDisabled(backward)) {
return backward;
}
backward = adapter.addDays(backward, -1);
}
}
return null;
};
exports.findClosestEnabledDate = findClosestEnabledDate;
const replaceInvalidDateByNull = (adapter, value) => !adapter.isValid(value) ? null : value;
exports.replaceInvalidDateByNull = replaceInvalidDateByNull;
const applyDefaultDate = (adapter, value, defaultValue) => {
if (value == null || !adapter.isValid(value)) {
return defaultValue;
}
return value;
};
exports.applyDefaultDate = applyDefaultDate;
const areDatesEqual = (adapter, a, b) => {
if (!adapter.isValid(a) && a != null && !adapter.isValid(b) && b != null) {
return true;
}
return adapter.isEqual(a, b);
};
exports.areDatesEqual = areDatesEqual;
const getMonthsInYear = (adapter, year) => {
const firstMonth = adapter.startOfYear(year);
const months = [firstMonth];
while (months.length < 12) {
const prevMonth = months[months.length - 1];
months.push(adapter.addMonths(prevMonth, 1));
}
return months;
};
exports.getMonthsInYear = getMonthsInYear;
const getTodayDate = (adapter, timezone, valueType) => valueType === 'date' ? adapter.startOfDay(adapter.date(undefined, timezone)) : adapter.date(undefined, timezone);
exports.getTodayDate = getTodayDate;
const formatMeridiem = (adapter, meridiem) => {
const date = adapter.setHours(adapter.date(), meridiem === 'am' ? 2 : 14);
return adapter.format(date, 'meridiem');
};
exports.formatMeridiem = formatMeridiem;
const DATE_VIEWS = exports.DATE_VIEWS = ['year', 'month', 'day'];
const isDatePickerView = view => DATE_VIEWS.includes(view);
exports.isDatePickerView = isDatePickerView;
const resolveDateFormat = (adapter, {
format,
views
}, isInToolbar) => {
if (format != null) {
return format;
}
const formats = adapter.formats;
if ((0, _views.areViewsEqual)(views, ['year'])) {
return formats.year;
}
if ((0, _views.areViewsEqual)(views, ['month'])) {
return formats.month;
}
if ((0, _views.areViewsEqual)(views, ['day'])) {
return formats.dayOfMonth;
}
if ((0, _views.areViewsEqual)(views, ['month', 'year'])) {
return `${formats.month} ${formats.year}`;
}
if ((0, _views.areViewsEqual)(views, ['day', 'month'])) {
return `${formats.month} ${formats.dayOfMonth}`;
}
if (isInToolbar) {
// Little localization hack (Google is doing the same for android native pickers):
// For english localization it is convenient to include weekday into the date "Mon, Jun 1".
// For other locales using strings like "June 1", without weekday.
return /en/.test(adapter.getCurrentLocaleCode()) ? formats.normalDateWithWeekday : formats.normalDate;
}
return formats.keyboardDate;
};
exports.resolveDateFormat = resolveDateFormat;
const getWeekdays = (adapter, date) => {
const start = adapter.startOfWeek(date);
return [0, 1, 2, 3, 4, 5, 6].map(diff => adapter.addDays(start, diff));
};
exports.getWeekdays = getWeekdays;

View file

@ -0,0 +1,31 @@
import { FieldSection, MuiPickersAdapter, PickersTimezone, PickerValidDate } from "../../models/index.js";
export interface GetDefaultReferenceDateProps {
maxDate?: PickerValidDate;
minDate?: PickerValidDate;
minTime?: PickerValidDate;
maxTime?: PickerValidDate;
disableIgnoringDatePartForTimeValidation?: boolean;
}
export declare const SECTION_TYPE_GRANULARITY: {
year: number;
month: number;
day: number;
hours: number;
minutes: number;
seconds: number;
milliseconds: number;
};
export declare const getSectionTypeGranularity: (sections: FieldSection[]) => number;
export declare const getDefaultReferenceDate: ({
props,
adapter,
granularity,
timezone,
getTodayDate: inGetTodayDate
}: {
props: GetDefaultReferenceDateProps;
adapter: MuiPickersAdapter;
granularity: number;
timezone: PickersTimezone;
getTodayDate?: () => PickerValidDate;
}) => PickerValidDate;

View file

@ -0,0 +1,67 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getSectionTypeGranularity = exports.getDefaultReferenceDate = exports.SECTION_TYPE_GRANULARITY = void 0;
var _timeUtils = require("./time-utils");
var _dateUtils = require("./date-utils");
const SECTION_TYPE_GRANULARITY = exports.SECTION_TYPE_GRANULARITY = {
year: 1,
month: 2,
day: 3,
hours: 4,
minutes: 5,
seconds: 6,
milliseconds: 7
};
const getSectionTypeGranularity = sections => Math.max(...sections.map(section => SECTION_TYPE_GRANULARITY[section.type] ?? 1));
exports.getSectionTypeGranularity = getSectionTypeGranularity;
const roundDate = (adapter, granularity, date) => {
if (granularity === SECTION_TYPE_GRANULARITY.year) {
return adapter.startOfYear(date);
}
if (granularity === SECTION_TYPE_GRANULARITY.month) {
return adapter.startOfMonth(date);
}
if (granularity === SECTION_TYPE_GRANULARITY.day) {
return adapter.startOfDay(date);
}
// We don't have startOfHour / startOfMinute / startOfSecond
let roundedDate = date;
if (granularity < SECTION_TYPE_GRANULARITY.minutes) {
roundedDate = adapter.setMinutes(roundedDate, 0);
}
if (granularity < SECTION_TYPE_GRANULARITY.seconds) {
roundedDate = adapter.setSeconds(roundedDate, 0);
}
if (granularity < SECTION_TYPE_GRANULARITY.milliseconds) {
roundedDate = adapter.setMilliseconds(roundedDate, 0);
}
return roundedDate;
};
const getDefaultReferenceDate = ({
props,
adapter,
granularity,
timezone,
getTodayDate: inGetTodayDate
}) => {
let referenceDate = inGetTodayDate ? inGetTodayDate() : roundDate(adapter, granularity, (0, _dateUtils.getTodayDate)(adapter, timezone));
if (props.minDate != null && adapter.isAfterDay(props.minDate, referenceDate)) {
referenceDate = roundDate(adapter, granularity, props.minDate);
}
if (props.maxDate != null && adapter.isBeforeDay(props.maxDate, referenceDate)) {
referenceDate = roundDate(adapter, granularity, props.maxDate);
}
const isAfter = (0, _timeUtils.createIsAfterIgnoreDatePart)(props.disableIgnoringDatePartForTimeValidation ?? false, adapter);
if (props.minTime != null && isAfter(props.minTime, referenceDate)) {
referenceDate = roundDate(adapter, granularity, props.disableIgnoringDatePartForTimeValidation ? props.minTime : (0, _dateUtils.mergeDateAndTime)(adapter, referenceDate, props.minTime));
}
if (props.maxTime != null && isAfter(referenceDate, props.maxTime)) {
referenceDate = roundDate(adapter, granularity, props.disableIgnoringDatePartForTimeValidation ? props.maxTime : (0, _dateUtils.mergeDateAndTime)(adapter, referenceDate, props.maxTime));
}
return referenceDate;
};
exports.getDefaultReferenceDate = getDefaultReferenceDate;

View file

@ -0,0 +1,21 @@
import { MuiPickersAdapter, PickerValidDate } from "../../models/index.js";
import { DateOrTimeViewWithMeridiem, TimeViewWithMeridiem } from "../models/index.js";
export declare const EXPORTED_TIME_VIEWS: readonly ["hours", "minutes", "seconds"];
export declare const TIME_VIEWS: readonly ["hours", "minutes", "seconds", "meridiem"];
export declare const isTimeView: (view: DateOrTimeViewWithMeridiem) => boolean;
export declare const isInternalTimeView: (view: DateOrTimeViewWithMeridiem) => view is TimeViewWithMeridiem;
export type Meridiem = 'am' | 'pm';
export declare const getMeridiem: (date: PickerValidDate | null, adapter: MuiPickersAdapter) => Meridiem | null;
export declare const convertValueToMeridiem: (value: number, meridiem: Meridiem | null, ampm: boolean) => number;
export declare const convertToMeridiem: (time: PickerValidDate, meridiem: Meridiem, ampm: boolean, adapter: MuiPickersAdapter) => PickerValidDate;
export declare const getSecondsInDay: (date: PickerValidDate, adapter: MuiPickersAdapter) => number;
export declare const createIsAfterIgnoreDatePart: (disableIgnoringDatePartForTimeValidation: boolean, adapter: MuiPickersAdapter) => (dateLeft: PickerValidDate, dateRight: PickerValidDate) => boolean;
export declare const resolveTimeFormat: (adapter: MuiPickersAdapter, {
format,
views,
ampm
}: {
format?: string;
views: readonly TimeViewWithMeridiem[];
ampm: boolean;
}) => string;

View file

@ -0,0 +1,73 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.resolveTimeFormat = exports.isTimeView = exports.isInternalTimeView = exports.getSecondsInDay = exports.getMeridiem = exports.createIsAfterIgnoreDatePart = exports.convertValueToMeridiem = exports.convertToMeridiem = exports.TIME_VIEWS = exports.EXPORTED_TIME_VIEWS = void 0;
var _views = require("./views");
const EXPORTED_TIME_VIEWS = exports.EXPORTED_TIME_VIEWS = ['hours', 'minutes', 'seconds'];
const TIME_VIEWS = exports.TIME_VIEWS = ['hours', 'minutes', 'seconds', 'meridiem'];
const isTimeView = view => EXPORTED_TIME_VIEWS.includes(view);
exports.isTimeView = isTimeView;
const isInternalTimeView = view => TIME_VIEWS.includes(view);
exports.isInternalTimeView = isInternalTimeView;
const getMeridiem = (date, adapter) => {
if (!date) {
return null;
}
return adapter.getHours(date) >= 12 ? 'pm' : 'am';
};
exports.getMeridiem = getMeridiem;
const convertValueToMeridiem = (value, meridiem, ampm) => {
if (ampm) {
const currentMeridiem = value >= 12 ? 'pm' : 'am';
if (currentMeridiem !== meridiem) {
return meridiem === 'am' ? value - 12 : value + 12;
}
}
return value;
};
exports.convertValueToMeridiem = convertValueToMeridiem;
const convertToMeridiem = (time, meridiem, ampm, adapter) => {
const newHoursAmount = convertValueToMeridiem(adapter.getHours(time), meridiem, ampm);
return adapter.setHours(time, newHoursAmount);
};
exports.convertToMeridiem = convertToMeridiem;
const getSecondsInDay = (date, adapter) => {
return adapter.getHours(date) * 3600 + adapter.getMinutes(date) * 60 + adapter.getSeconds(date);
};
exports.getSecondsInDay = getSecondsInDay;
const createIsAfterIgnoreDatePart = (disableIgnoringDatePartForTimeValidation, adapter) => (dateLeft, dateRight) => {
if (disableIgnoringDatePartForTimeValidation) {
return adapter.isAfter(dateLeft, dateRight);
}
return getSecondsInDay(dateLeft, adapter) > getSecondsInDay(dateRight, adapter);
};
exports.createIsAfterIgnoreDatePart = createIsAfterIgnoreDatePart;
const resolveTimeFormat = (adapter, {
format,
views,
ampm
}) => {
if (format != null) {
return format;
}
const formats = adapter.formats;
if ((0, _views.areViewsEqual)(views, ['hours'])) {
return ampm ? `${formats.hours12h} ${formats.meridiem}` : formats.hours24h;
}
if ((0, _views.areViewsEqual)(views, ['minutes'])) {
return formats.minutes;
}
if ((0, _views.areViewsEqual)(views, ['seconds'])) {
return formats.seconds;
}
if ((0, _views.areViewsEqual)(views, ['minutes', 'seconds'])) {
return `${formats.minutes}:${formats.seconds}`;
}
if ((0, _views.areViewsEqual)(views, ['hours', 'minutes', 'seconds'])) {
return ampm ? `${formats.hours12h}:${formats.minutes}:${formats.seconds} ${formats.meridiem}` : `${formats.hours24h}:${formats.minutes}:${formats.seconds}`;
}
return ampm ? `${formats.hours12h}:${formats.minutes} ${formats.meridiem}` : `${formats.hours24h}:${formats.minutes}`;
};
exports.resolveTimeFormat = resolveTimeFormat;

View file

@ -0,0 +1,22 @@
import { Theme } from '@mui/material/styles';
import { SxProps, SystemStyleObject } from '@mui/system';
import * as React from 'react';
export declare function arrayIncludes<T>(array: T[] | readonly T[], itemOrItems: T | T[]): boolean;
export declare const onSpaceOrEnter: (innerFn: (ev: React.MouseEvent<any> | React.KeyboardEvent<any>) => void, externalEvent?: (event: React.KeyboardEvent<any>) => void) => (event: React.KeyboardEvent) => void;
export declare const executeInTheNextEventLoopTick: (fn: () => void) => void;
/**
* Gets the currently active element within a given node's document.
* This function traverses shadow DOM if necessary.
* @param node - The node from which to get the active element.
* @returns The currently active element, or null if none is found.
*/
export declare const getActiveElement: (node: Node | null | undefined) => Element | null;
/**
* Gets the index of the focused list item in a given ul list element.
*
* @param {HTMLUListElement} listElement - The list element to search within.
* @returns {number} The index of the focused list item, or -1 if none is focused.
*/
export declare const getFocusedListItemIndex: (listElement: HTMLUListElement) => number;
export declare const DEFAULT_DESKTOP_MODE_MEDIA_QUERY = "@media (pointer: fine)";
export declare function mergeSx(...sxProps: (SxProps<Theme> | undefined)[]): ReadonlyArray<boolean | SystemStyleObject<Theme> | ((theme: Theme) => SystemStyleObject<Theme>)>;

View file

@ -0,0 +1,82 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DEFAULT_DESKTOP_MODE_MEDIA_QUERY = void 0;
exports.arrayIncludes = arrayIncludes;
exports.getFocusedListItemIndex = exports.getActiveElement = exports.executeInTheNextEventLoopTick = void 0;
exports.mergeSx = mergeSx;
exports.onSpaceOrEnter = void 0;
var _ownerDocument = _interopRequireDefault(require("@mui/utils/ownerDocument"));
/* Use it instead of .includes method for IE support */
function arrayIncludes(array, itemOrItems) {
if (Array.isArray(itemOrItems)) {
return itemOrItems.every(item => array.indexOf(item) !== -1);
}
return array.indexOf(itemOrItems) !== -1;
}
const onSpaceOrEnter = (innerFn, externalEvent) => event => {
if (event.key === 'Enter' || event.key === ' ') {
innerFn(event);
// prevent any side effects
event.preventDefault();
event.stopPropagation();
}
if (externalEvent) {
externalEvent(event);
}
};
exports.onSpaceOrEnter = onSpaceOrEnter;
const executeInTheNextEventLoopTick = fn => {
setTimeout(fn, 0);
};
// https://www.abeautifulsite.net/posts/finding-the-active-element-in-a-shadow-root/
exports.executeInTheNextEventLoopTick = executeInTheNextEventLoopTick;
const getActiveElementInternal = (root = document) => {
const activeEl = root.activeElement;
if (!activeEl) {
return null;
}
if (activeEl.shadowRoot) {
return getActiveElementInternal(activeEl.shadowRoot);
}
return activeEl;
};
/**
* Gets the currently active element within a given node's document.
* This function traverses shadow DOM if necessary.
* @param node - The node from which to get the active element.
* @returns The currently active element, or null if none is found.
*/
const getActiveElement = node => {
return getActiveElementInternal((0, _ownerDocument.default)(node));
};
/**
* Gets the index of the focused list item in a given ul list element.
*
* @param {HTMLUListElement} listElement - The list element to search within.
* @returns {number} The index of the focused list item, or -1 if none is focused.
*/
exports.getActiveElement = getActiveElement;
const getFocusedListItemIndex = listElement => {
const children = Array.from(listElement.children);
return children.indexOf(getActiveElement(listElement));
};
exports.getFocusedListItemIndex = getFocusedListItemIndex;
const DEFAULT_DESKTOP_MODE_MEDIA_QUERY = exports.DEFAULT_DESKTOP_MODE_MEDIA_QUERY = '@media (pointer: fine)';
function mergeSx(...sxProps) {
return sxProps.reduce((acc, sxProp) => {
if (Array.isArray(sxProp)) {
acc.push(...sxProp);
} else if (sxProp != null) {
acc.push(sxProp);
}
return acc;
}, []);
}

View file

@ -0,0 +1,7 @@
import type { PickerValueManager } from "../models/index.js";
import { DateValidationError, TimeValidationError, DateTimeValidationError } from "../../models/index.js";
import type { FieldValueManager } from "../hooks/useField/index.js";
import { PickerValue } from "../models/index.js";
export type SingleItemPickerValueManager<TError extends DateValidationError | TimeValidationError | DateTimeValidationError = any> = PickerValueManager<PickerValue, TError>;
export declare const singleItemValueManager: SingleItemPickerValueManager;
export declare const singleItemFieldValueManager: FieldValueManager<PickerValue>;

View file

@ -0,0 +1,51 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.singleItemValueManager = exports.singleItemFieldValueManager = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var _dateUtils = require("./date-utils");
var _getDefaultReferenceDate = require("./getDefaultReferenceDate");
var _useField = require("../hooks/useField/useField.utils");
const _excluded = ["value", "referenceDate"];
const singleItemValueManager = exports.singleItemValueManager = {
emptyValue: null,
getTodayValue: _dateUtils.getTodayDate,
getInitialReferenceValue: _ref => {
let {
value,
referenceDate
} = _ref,
params = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
if (params.adapter.isValid(value)) {
return value;
}
if (referenceDate != null) {
return referenceDate;
}
return (0, _getDefaultReferenceDate.getDefaultReferenceDate)(params);
},
cleanValue: _dateUtils.replaceInvalidDateByNull,
areValuesEqual: _dateUtils.areDatesEqual,
isSameError: (a, b) => a === b,
hasError: error => error != null,
defaultErrorState: null,
getTimezone: (adapter, value) => adapter.isValid(value) ? adapter.getTimezone(value) : null,
setTimezone: (adapter, timezone, value) => value == null ? null : adapter.setTimezone(value, timezone)
};
const singleItemFieldValueManager = exports.singleItemFieldValueManager = {
updateReferenceValue: (adapter, value, prevReferenceValue) => adapter.isValid(value) ? value : prevReferenceValue,
getSectionsFromValue: (date, getSectionsFromDate) => getSectionsFromDate(date),
getV7HiddenInputValueFromSections: _useField.createDateStrForV7HiddenInputFromSections,
getV6InputValueFromSections: _useField.createDateStrForV6InputFromSections,
parseValueStr: (valueStr, referenceValue, parseDate) => parseDate(valueStr.trim(), referenceValue),
getDateFromSection: value => value,
getDateSectionsFromValue: sections => sections,
updateDateInValue: (value, activeSection, activeDate) => activeDate,
clearDateSections: sections => sections.map(section => (0, _extends2.default)({}, section, {
value: ''
}))
};

View file

@ -0,0 +1,16 @@
import { DateOrTimeViewWithMeridiem } from "../models/index.js";
export declare const areViewsEqual: <TView extends DateOrTimeViewWithMeridiem>(views: ReadonlyArray<DateOrTimeViewWithMeridiem>, expectedViews: TView[]) => views is ReadonlyArray<TView>;
export declare const applyDefaultViewProps: <TView extends DateOrTimeViewWithMeridiem>({
openTo,
defaultOpenTo,
views,
defaultViews
}: {
openTo: TView | undefined;
defaultOpenTo: TView;
views: readonly TView[] | undefined;
defaultViews: readonly TView[];
}) => {
views: readonly TView[];
openTo: TView;
};

View file

@ -0,0 +1,36 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.areViewsEqual = exports.applyDefaultViewProps = void 0;
const areViewsEqual = (views, expectedViews) => {
if (views.length !== expectedViews.length) {
return false;
}
return expectedViews.every(expectedView => views.includes(expectedView));
};
exports.areViewsEqual = areViewsEqual;
const applyDefaultViewProps = ({
openTo,
defaultOpenTo,
views,
defaultViews
}) => {
const viewsWithDefault = views ?? defaultViews;
let openToWithDefault;
if (openTo != null) {
openToWithDefault = openTo;
} else if (viewsWithDefault.includes(defaultOpenTo)) {
openToWithDefault = defaultOpenTo;
} else if (viewsWithDefault.length > 0) {
openToWithDefault = viewsWithDefault[0];
} else {
throw new Error('MUI X: The `views` prop must contain at least one view.');
}
return {
views: viewsWithDefault,
openTo: openToWithDefault
};
};
exports.applyDefaultViewProps = applyDefaultViewProps;