@base-ui/react
Version:
Base UI is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.
362 lines (358 loc) • 12.4 kB
JavaScript
"use strict";
'use client';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.TemporalAdapterDateFns = void 0;
var _addDays = require("date-fns/addDays");
var _addHours = require("date-fns/addHours");
var _addMinutes = require("date-fns/addMinutes");
var _addMonths = require("date-fns/addMonths");
var _addSeconds = require("date-fns/addSeconds");
var _addMilliseconds = require("date-fns/addMilliseconds");
var _addWeeks = require("date-fns/addWeeks");
var _addYears = require("date-fns/addYears");
var _differenceInDays = require("date-fns/differenceInDays");
var _differenceInHours = require("date-fns/differenceInHours");
var _differenceInMinutes = require("date-fns/differenceInMinutes");
var _differenceInMonths = require("date-fns/differenceInMonths");
var _differenceInWeeks = require("date-fns/differenceInWeeks");
var _differenceInYears = require("date-fns/differenceInYears");
var _endOfDay = require("date-fns/endOfDay");
var _endOfHour = require("date-fns/endOfHour");
var _endOfMinute = require("date-fns/endOfMinute");
var _endOfMonth = require("date-fns/endOfMonth");
var _endOfSecond = require("date-fns/endOfSecond");
var _endOfWeek = require("date-fns/endOfWeek");
var _endOfYear = require("date-fns/endOfYear");
var _format = require("date-fns/format");
var _getDate = require("date-fns/getDate");
var _getDay = require("date-fns/getDay");
var _getDaysInMonth = require("date-fns/getDaysInMonth");
var _getHours = require("date-fns/getHours");
var _getMilliseconds = require("date-fns/getMilliseconds");
var _getMinutes = require("date-fns/getMinutes");
var _getMonth = require("date-fns/getMonth");
var _getSeconds = require("date-fns/getSeconds");
var _getWeek = require("date-fns/getWeek");
var _getYear = require("date-fns/getYear");
var _isAfter = require("date-fns/isAfter");
var _isBefore = require("date-fns/isBefore");
var _isEqual = require("date-fns/isEqual");
var _isSameDay = require("date-fns/isSameDay");
var _isSameHour = require("date-fns/isSameHour");
var _isSameYear = require("date-fns/isSameYear");
var _isSameMonth = require("date-fns/isSameMonth");
var _isValid = require("date-fns/isValid");
var _isWithinInterval = require("date-fns/isWithinInterval");
var _enUS = require("date-fns/locale/en-US");
var _parse = require("date-fns/parse");
var _setDate = require("date-fns/setDate");
var _setHours = require("date-fns/setHours");
var _setMilliseconds = require("date-fns/setMilliseconds");
var _setMinutes = require("date-fns/setMinutes");
var _setMonth = require("date-fns/setMonth");
var _setSeconds = require("date-fns/setSeconds");
var _setYear = require("date-fns/setYear");
var _startOfDay = require("date-fns/startOfDay");
var _startOfHour = require("date-fns/startOfHour");
var _startOfMinute = require("date-fns/startOfMinute");
var _startOfMonth = require("date-fns/startOfMonth");
var _startOfSecond = require("date-fns/startOfSecond");
var _startOfYear = require("date-fns/startOfYear");
var _startOfWeek = require("date-fns/startOfWeek");
var _tz = require("@date-fns/tz");
const FORMATS = {
// Digit formats with leading zeroes
yearPadded: 'yyyy',
monthPadded: 'MM',
dayOfMonthPadded: 'dd',
hours24hPadded: 'HH',
hours12hPadded: 'hh',
minutesPadded: 'mm',
secondsPadded: 'ss',
// Digit formats without leading zeroes
dayOfMonth: 'd',
hours24h: 'H',
hours12h: 'h',
// Letter formats
month3Letters: 'MMM',
monthFullLetter: 'MMMM',
weekday: 'EEEE',
weekday3Letters: 'EEE',
weekday1Letter: 'EEEEE',
meridiem: 'a',
// Full formats
localizedDateWithFullMonthAndWeekDay: 'PPPP',
localizedNumericDate: 'P' // Note: Day and month are padded on enUS unlike Luxon
};
class TemporalAdapterDateFns {
isTimezoneCompatible = true;
lib = 'date-fns';
formats = FORMATS;
escapedCharacters = {
start: "'",
end: "'"
};
constructor({
locale
} = {}) {
this.locale = locale ?? _enUS.enUS;
}
now = timezone => {
if (timezone === 'system' || timezone === 'default') {
return new Date();
}
return _tz.TZDate.tz(timezone);
};
date = (value, timezone) => {
if (value === null) {
return null;
}
const date = new Date(value);
// Date-only strings (e.g. "2026-04-06") are parsed as UTC midnight by the JS spec,
// so we must use UTC getters to extract the intended face-value components.
// Datetime strings (e.g. "2026-04-06T14:30") are parsed as local time,
// so local getters correctly return the face-value components.
const isDateOnly = typeof value === 'string' && !value.includes('T');
if (timezone === 'system' || timezone === 'default') {
if (isDateOnly) {
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
}
return date;
}
// `new TZDate(value, timezone)` returns a date with the same timestamp `new Date(value)` would return,
// whereas we want to create a date that represents the string in the given timezone.
return new _tz.TZDate(isDateOnly ? date.getUTCFullYear() : date.getFullYear(), isDateOnly ? date.getUTCMonth() : date.getMonth(), isDateOnly ? date.getUTCDate() : date.getDate(), isDateOnly ? date.getUTCHours() : date.getHours(), isDateOnly ? date.getUTCMinutes() : date.getMinutes(), isDateOnly ? date.getUTCSeconds() : date.getSeconds(), isDateOnly ? date.getUTCMilliseconds() : date.getMilliseconds(), timezone);
};
parse = (value, format, timezone) => {
const date = (0, _parse.parse)(value, format, new Date(), {
locale: this.locale
});
if (timezone === 'system' || timezone === 'default') {
return date;
}
// `new TZDate(value, timezone)` returns a date with the same timestamp `new Date(value)` would return,
// whereas we want to create that represents the string in the given timezone.
return new _tz.TZDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds(), timezone);
};
getTimezone = value => {
if (value instanceof _tz.TZDate) {
return value.timeZone ?? 'system';
}
return 'system';
};
setTimezone = (value, timezone) => {
const isSystemTimezone = timezone === 'system' || timezone === 'default';
const canChangeTz = typeof value?.withTimeZone === 'function';
if (isSystemTimezone) {
return this.toJsDate(value);
}
if (canChangeTz) {
return value.withTimeZone(timezone);
}
return new _tz.TZDate(value, timezone);
};
toJsDate = value => {
if (value instanceof _tz.TZDate) {
return new Date(value.getTime());
}
return value;
};
getCurrentLocaleCode = () => {
return this.locale.code;
};
isValid = value => {
if (value == null) {
return false;
}
return (0, _isValid.isValid)(value);
};
format = (value, formatKey) => {
return this.formatByString(value, this.formats[formatKey]);
};
formatByString = (value, format) => {
return (0, _format.format)(value, format, {
locale: this.locale
});
};
isEqual = (value, comparing) => {
if (value === null && comparing === null) {
return true;
}
if (value === null || comparing === null) {
return false;
}
return (0, _isEqual.isEqual)(value, comparing);
};
isSameYear = (value, comparing) => {
return (0, _isSameYear.isSameYear)(value, comparing);
};
isSameMonth = (value, comparing) => {
return (0, _isSameMonth.isSameMonth)(value, comparing);
};
isSameDay = (value, comparing) => {
return (0, _isSameDay.isSameDay)(value, comparing);
};
isSameHour = (value, comparing) => {
return (0, _isSameHour.isSameHour)(value, comparing);
};
isAfter = (value, comparing) => {
return (0, _isAfter.isAfter)(value, comparing);
};
isBefore = (value, comparing) => {
return (0, _isBefore.isBefore)(value, comparing);
};
isWithinRange = (value, [start, end]) => {
return (0, _isWithinInterval.isWithinInterval)(value, {
start,
end
});
};
startOfYear = value => {
return (0, _startOfYear.startOfYear)(value);
};
startOfMonth = value => {
return (0, _startOfMonth.startOfMonth)(value);
};
startOfWeek = value => {
return (0, _startOfWeek.startOfWeek)(value, {
locale: this.locale
});
};
startOfDay = value => {
return (0, _startOfDay.startOfDay)(value);
};
startOfHour = value => {
return (0, _startOfHour.startOfHour)(value);
};
startOfMinute = value => {
return (0, _startOfMinute.startOfMinute)(value);
};
startOfSecond = value => {
return (0, _startOfSecond.startOfSecond)(value);
};
endOfYear = value => {
return (0, _endOfYear.endOfYear)(value);
};
endOfMonth = value => {
return (0, _endOfMonth.endOfMonth)(value);
};
endOfWeek = value => {
return (0, _endOfWeek.endOfWeek)(value, {
locale: this.locale
});
};
endOfDay = value => {
return (0, _endOfDay.endOfDay)(value);
};
endOfHour = value => {
return (0, _endOfHour.endOfHour)(value);
};
endOfMinute = value => {
return (0, _endOfMinute.endOfMinute)(value);
};
endOfSecond = value => {
return (0, _endOfSecond.endOfSecond)(value);
};
addYears = (value, amount) => {
return (0, _addYears.addYears)(value, amount);
};
addMonths = (value, amount) => {
return (0, _addMonths.addMonths)(value, amount);
};
addWeeks = (value, amount) => {
return (0, _addWeeks.addWeeks)(value, amount);
};
addDays = (value, amount) => {
return (0, _addDays.addDays)(value, amount);
};
addHours = (value, amount) => {
return (0, _addHours.addHours)(value, amount);
};
addMinutes = (value, amount) => {
return (0, _addMinutes.addMinutes)(value, amount);
};
addSeconds = (value, amount) => {
return (0, _addSeconds.addSeconds)(value, amount);
};
addMilliseconds = (value, amount) => {
return (0, _addMilliseconds.addMilliseconds)(value, amount);
};
getYear = value => {
return (0, _getYear.getYear)(value);
};
getMonth = value => {
return (0, _getMonth.getMonth)(value);
};
getDate = value => {
return (0, _getDate.getDate)(value);
};
getHours = value => {
return (0, _getHours.getHours)(value);
};
getMinutes = value => {
return (0, _getMinutes.getMinutes)(value);
};
getSeconds = value => {
return (0, _getSeconds.getSeconds)(value);
};
getMilliseconds = value => {
return (0, _getMilliseconds.getMilliseconds)(value);
};
getTime = value => {
return value.getTime();
};
setYear = (value, year) => {
return (0, _setYear.setYear)(value, year);
};
setMonth = (value, month) => {
return (0, _setMonth.setMonth)(value, month);
};
setDate = (value, date) => {
return (0, _setDate.setDate)(value, date);
};
setHours = (value, hours) => {
return (0, _setHours.setHours)(value, hours);
};
setMinutes = (value, minutes) => {
return (0, _setMinutes.setMinutes)(value, minutes);
};
setSeconds = (value, seconds) => {
return (0, _setSeconds.setSeconds)(value, seconds);
};
setMilliseconds = (value, milliseconds) => {
return (0, _setMilliseconds.setMilliseconds)(value, milliseconds);
};
differenceInYears = (value, comparing) => {
return (0, _differenceInYears.differenceInYears)(value, comparing);
};
differenceInMonths = (value, comparing) => {
return (0, _differenceInMonths.differenceInMonths)(value, comparing);
};
differenceInWeeks = (value, comparing) => {
return (0, _differenceInWeeks.differenceInWeeks)(value, comparing);
};
differenceInDays = (value, comparing) => {
return (0, _differenceInDays.differenceInDays)(value, comparing);
};
differenceInHours = (value, comparing) => {
return (0, _differenceInHours.differenceInHours)(value, comparing);
};
differenceInMinutes = (value, comparing) => {
return (0, _differenceInMinutes.differenceInMinutes)(value, comparing);
};
getDaysInMonth = value => {
return (0, _getDaysInMonth.getDaysInMonth)(value);
};
getWeekNumber = value => {
return (0, _getWeek.getWeek)(value, {
locale: this.locale
});
};
getDayOfWeek = value => {
const weekStartsOn = this.locale.options?.weekStartsOn ?? 0;
return ((0, _getDay.getDay)(value) + 7 - weekStartsOn) % 7 + 1;
};
}
exports.TemporalAdapterDateFns = TemporalAdapterDateFns;