Files
appco_dist/.output/server/chunks/build/BaseDatePicker-CBTFfZPt.mjs
T
2025-07-24 21:13:13 +03:30

11660 lines
358 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { createVNode, defineComponent, computed, unref, mergeProps, ref, Fragment, toRef, watch, watchEffect, shallowRef, provide, useAttrs, getCurrentScope, onScopeDispose, inject, getCurrentInstance, onMounted, nextTick, createTextVNode, useSSRContext } from 'vue';
import { ssrRenderComponent } from 'vue/server-renderer';
import { bC as D, bD as Y, bE as W, bF as MS, bG as Q, bH as M, bI as FORMAT_DEFAULT, b8 as Icon, av as dayjs, a as useConfigStore, C as useConfigInject, bt as useCompactItemContext, D as genComponentStyleHook, bi as useLocaleReceiver, bJ as locale$1$1, E as omit, aC as CloseCircleFilled, F as classNames, Z as merge, a6 as genCompactItemStyle, bo as useState$1, a1 as Button, V as functionType, W as stringType, X as booleanType, K as objectType, aA as someType, G as arrayType, N as resetComponent, O as textEllipsis, bK as warningOnce, Q as KeyCode, ac as cloneElement, bL as noteOnce } from './server.mjs';
import _extends from '@babel/runtime/helpers/esm/extends';
import moment from 'moment-jalaali';
import jalaliday from 'dayjalali';
import _objectSpread$3 from '@babel/runtime/helpers/esm/objectSpread2';
import { T as Tag } from './index-BLBX3jXD.mjs';
import { r as roundedArrow, T as Trigger, h as isVisible } from './index-Dxyzjwb5.mjs';
import { w as wrapperRaf } from './raf-ruCY1ktO.mjs';
import { u as useMergedState } from './useMergedState-BZEfJ8Fl.mjs';
import { i as initMoveMotion, u as useMemo } from './move-BSi4LOZX.mjs';
import { s as shallowequal } from './shallowequal-DbdDzF9p.mjs';
import { u as useInjectFormItemContext, F as FormItemInputContext } from './FormItemContext-CDDW52IT.mjs';
import { a as getStatusClassNames, g as getMergedStatus } from './statusUtils-C3ZNzkeD.mjs';
import { TinyColor } from '@ctrl/tinycolor';
import { i as initInputToken, g as genBasicInputStyle, c as genActiveStyle, e as genHoverStyle } from './index-C1mihc8c.mjs';
import { i as initSlideMotion, a as slideUpOut, s as slideDownOut, c as slideUpIn, b as slideDownIn } from './slide-Bfj4jnqX.mjs';
var hookCallback;
function hooks() {
return hookCallback.apply(null, arguments);
}
// This is done to register the method called with moment()
// without creating circular dependencies.
function setHookCallback(callback) {
hookCallback = callback;
}
function isArray(input) {
return (
input instanceof Array ||
Object.prototype.toString.call(input) === '[object Array]'
);
}
function isObject(input) {
// IE8 will treat undefined and null as object if it wasn't for
// input != null
return (
input != null &&
Object.prototype.toString.call(input) === '[object Object]'
);
}
function hasOwnProp(a, b) {
return Object.prototype.hasOwnProperty.call(a, b);
}
function isObjectEmpty(obj) {
if (Object.getOwnPropertyNames) {
return Object.getOwnPropertyNames(obj).length === 0;
} else {
var k;
for (k in obj) {
if (hasOwnProp(obj, k)) {
return false;
}
}
return true;
}
}
function isUndefined(input) {
return input === void 0;
}
function isNumber(input) {
return (
typeof input === 'number' ||
Object.prototype.toString.call(input) === '[object Number]'
);
}
function isDate(input) {
return (
input instanceof Date ||
Object.prototype.toString.call(input) === '[object Date]'
);
}
function map(arr, fn) {
var res = [],
i,
arrLen = arr.length;
for (i = 0; i < arrLen; ++i) {
res.push(fn(arr[i], i));
}
return res;
}
function extend(a, b) {
for (var i in b) {
if (hasOwnProp(b, i)) {
a[i] = b[i];
}
}
if (hasOwnProp(b, 'toString')) {
a.toString = b.toString;
}
if (hasOwnProp(b, 'valueOf')) {
a.valueOf = b.valueOf;
}
return a;
}
function createUTC(input, format, locale, strict) {
return createLocalOrUTC(input, format, locale, strict, true).utc();
}
function defaultParsingFlags() {
// We need to deep clone this object.
return {
empty: false,
unusedTokens: [],
unusedInput: [],
overflow: -2,
charsLeftOver: 0,
nullInput: false,
invalidEra: null,
invalidMonth: null,
invalidFormat: false,
userInvalidated: false,
iso: false,
parsedDateParts: [],
era: null,
meridiem: null,
rfc2822: false,
weekdayMismatch: false,
};
}
function getParsingFlags(m) {
if (m._pf == null) {
m._pf = defaultParsingFlags();
}
return m._pf;
}
var some;
if (Array.prototype.some) {
some = Array.prototype.some;
} else {
some = function (fun) {
var t = Object(this),
len = t.length >>> 0,
i;
for (i = 0; i < len; i++) {
if (i in t && fun.call(this, t[i], i, t)) {
return true;
}
}
return false;
};
}
function isValid$1(m) {
var flags = null,
parsedParts = false,
isNowValid = m._d && !isNaN(m._d.getTime());
if (isNowValid) {
flags = getParsingFlags(m);
parsedParts = some.call(flags.parsedDateParts, function (i) {
return i != null;
});
isNowValid =
flags.overflow < 0 &&
!flags.empty &&
!flags.invalidEra &&
!flags.invalidMonth &&
!flags.invalidWeekday &&
!flags.weekdayMismatch &&
!flags.nullInput &&
!flags.invalidFormat &&
!flags.userInvalidated &&
(!flags.meridiem || (flags.meridiem && parsedParts));
if (m._strict) {
isNowValid =
isNowValid &&
flags.charsLeftOver === 0 &&
flags.unusedTokens.length === 0 &&
flags.bigHour === undefined;
}
}
if (Object.isFrozen == null || !Object.isFrozen(m)) {
m._isValid = isNowValid;
} else {
return isNowValid;
}
return m._isValid;
}
function createInvalid$1(flags) {
var m = createUTC(NaN);
if (flags != null) {
extend(getParsingFlags(m), flags);
} else {
getParsingFlags(m).userInvalidated = true;
}
return m;
}
// Plugins that add properties should also add the key here (null value),
// so we can properly clone ourselves.
var momentProperties = (hooks.momentProperties = []),
updateInProgress = false;
function copyConfig(to, from) {
var i,
prop,
val,
momentPropertiesLen = momentProperties.length;
if (!isUndefined(from._isAMomentObject)) {
to._isAMomentObject = from._isAMomentObject;
}
if (!isUndefined(from._i)) {
to._i = from._i;
}
if (!isUndefined(from._f)) {
to._f = from._f;
}
if (!isUndefined(from._l)) {
to._l = from._l;
}
if (!isUndefined(from._strict)) {
to._strict = from._strict;
}
if (!isUndefined(from._tzm)) {
to._tzm = from._tzm;
}
if (!isUndefined(from._isUTC)) {
to._isUTC = from._isUTC;
}
if (!isUndefined(from._offset)) {
to._offset = from._offset;
}
if (!isUndefined(from._pf)) {
to._pf = getParsingFlags(from);
}
if (!isUndefined(from._locale)) {
to._locale = from._locale;
}
if (momentPropertiesLen > 0) {
for (i = 0; i < momentPropertiesLen; i++) {
prop = momentProperties[i];
val = from[prop];
if (!isUndefined(val)) {
to[prop] = val;
}
}
}
return to;
}
// Moment prototype object
function Moment(config) {
copyConfig(this, config);
this._d = new Date(config._d != null ? config._d.getTime() : NaN);
if (!this.isValid()) {
this._d = new Date(NaN);
}
// Prevent infinite loop in case updateOffset creates new moment
// objects.
if (updateInProgress === false) {
updateInProgress = true;
hooks.updateOffset(this);
updateInProgress = false;
}
}
function isMoment(obj) {
return (
obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
);
}
function warn(msg) {
if (
hooks.suppressDeprecationWarnings === false &&
typeof console !== 'undefined' &&
console.warn
) {
console.warn('Deprecation warning: ' + msg);
}
}
function deprecate(msg, fn) {
var firstTime = true;
return extend(function () {
if (hooks.deprecationHandler != null) {
hooks.deprecationHandler(null, msg);
}
if (firstTime) {
var args = [],
arg,
i,
key,
argLen = arguments.length;
for (i = 0; i < argLen; i++) {
arg = '';
if (typeof arguments[i] === 'object') {
arg += '\n[' + i + '] ';
for (key in arguments[0]) {
if (hasOwnProp(arguments[0], key)) {
arg += key + ': ' + arguments[0][key] + ', ';
}
}
arg = arg.slice(0, -2); // Remove trailing comma and space
} else {
arg = arguments[i];
}
args.push(arg);
}
warn(
msg +
'\nArguments: ' +
Array.prototype.slice.call(args).join('') +
'\n' +
new Error().stack
);
firstTime = false;
}
return fn.apply(this, arguments);
}, fn);
}
var deprecations = {};
function deprecateSimple(name, msg) {
if (hooks.deprecationHandler != null) {
hooks.deprecationHandler(name, msg);
}
if (!deprecations[name]) {
warn(msg);
deprecations[name] = true;
}
}
hooks.suppressDeprecationWarnings = false;
hooks.deprecationHandler = null;
function isFunction(input) {
return (
(typeof Function !== 'undefined' && input instanceof Function) ||
Object.prototype.toString.call(input) === '[object Function]'
);
}
function mergeConfigs(parentConfig, childConfig) {
var res = extend({}, parentConfig),
prop;
for (prop in childConfig) {
if (hasOwnProp(childConfig, prop)) {
if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
res[prop] = {};
extend(res[prop], parentConfig[prop]);
extend(res[prop], childConfig[prop]);
} else if (childConfig[prop] != null) {
res[prop] = childConfig[prop];
} else {
delete res[prop];
}
}
}
for (prop in parentConfig) {
if (
hasOwnProp(parentConfig, prop) &&
!hasOwnProp(childConfig, prop) &&
isObject(parentConfig[prop])
) {
// make sure changes to properties don't modify parent config
res[prop] = extend({}, res[prop]);
}
}
return res;
}
function Locale(config) {
if (config != null) {
this.set(config);
}
}
var keys;
if (Object.keys) {
keys = Object.keys;
} else {
keys = function (obj) {
var i,
res = [];
for (i in obj) {
if (hasOwnProp(obj, i)) {
res.push(i);
}
}
return res;
};
}
var defaultCalendar = {
sameDay: '[Today at] LT',
nextDay: '[Tomorrow at] LT',
nextWeek: 'dddd [at] LT',
lastDay: '[Yesterday at] LT',
lastWeek: '[Last] dddd [at] LT',
sameElse: 'L',
};
function zeroFill(number, targetLength, forceSign) {
var absNumber = '' + Math.abs(number),
zerosToFill = targetLength - absNumber.length,
sign = number >= 0;
return (
(sign ? (forceSign ? '+' : '') : '-') +
Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
absNumber
);
}
var formattingTokens$1 =
/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
formatFunctions = {},
formatTokenFunctions = {};
// token: 'M'
// padded: ['MM', 2]
// ordinal: 'Mo'
// callback: function () { this.month() + 1 }
function addFormatToken(token, padded, ordinal, callback) {
var func = callback;
if (typeof callback === 'string') {
func = function () {
return this[callback]();
};
}
if (token) {
formatTokenFunctions[token] = func;
}
if (padded) {
formatTokenFunctions[padded[0]] = function () {
return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
};
}
if (ordinal) {
formatTokenFunctions[ordinal] = function () {
return this.localeData().ordinal(
func.apply(this, arguments),
token
);
};
}
}
function removeFormattingTokens(input) {
if (input.match(/\[[\s\S]/)) {
return input.replace(/^\[|\]$/g, '');
}
return input.replace(/\\/g, '');
}
function makeFormatFunction(format) {
var array = format.match(formattingTokens$1),
i,
length;
for (i = 0, length = array.length; i < length; i++) {
if (formatTokenFunctions[array[i]]) {
array[i] = formatTokenFunctions[array[i]];
} else {
array[i] = removeFormattingTokens(array[i]);
}
}
return function (mom) {
var output = '',
i;
for (i = 0; i < length; i++) {
output += isFunction(array[i])
? array[i].call(mom, format)
: array[i];
}
return output;
};
}
// format date using native date object
function formatMoment(m, format) {
if (!m.isValid()) {
return m.localeData().invalidDate();
}
format = expandFormat(format, m.localeData());
formatFunctions[format] =
formatFunctions[format] || makeFormatFunction(format);
return formatFunctions[format](m);
}
function expandFormat(format, locale) {
var i = 5;
function replaceLongDateFormatTokens(input) {
return locale.longDateFormat(input) || input;
}
localFormattingTokens.lastIndex = 0;
while (i >= 0 && localFormattingTokens.test(format)) {
format = format.replace(
localFormattingTokens,
replaceLongDateFormatTokens
);
localFormattingTokens.lastIndex = 0;
i -= 1;
}
return format;
}
var defaultLongDateFormat = {
LTS: 'h:mm:ss A',
LT: 'h:mm A',
L: 'MM/DD/YYYY',
LL: 'MMMM D, YYYY',
LLL: 'MMMM D, YYYY h:mm A',
LLLL: 'dddd, MMMM D, YYYY h:mm A',
};
var defaultInvalidDate = 'Invalid date';
var defaultOrdinal = '%d',
defaultDayOfMonthOrdinalParse = /\d{1,2}/;
var defaultRelativeTime = {
future: 'in %s',
past: '%s ago',
s: 'a few seconds',
ss: '%d seconds',
m: 'a minute',
mm: '%d minutes',
h: 'an hour',
hh: '%d hours',
d: 'a day',
dd: '%d days',
w: 'a week',
ww: '%d weeks',
M: 'a month',
MM: '%d months',
y: 'a year',
yy: '%d years',
};
var aliases = {
D: 'date',
dates: 'date',
date: 'date',
d: 'day',
days: 'day',
day: 'day',
e: 'weekday',
weekdays: 'weekday',
weekday: 'weekday',
E: 'isoWeekday',
isoweekdays: 'isoWeekday',
isoweekday: 'isoWeekday',
DDD: 'dayOfYear',
dayofyears: 'dayOfYear',
dayofyear: 'dayOfYear',
h: 'hour',
hours: 'hour',
hour: 'hour',
ms: 'millisecond',
milliseconds: 'millisecond',
millisecond: 'millisecond',
m: 'minute',
minutes: 'minute',
minute: 'minute',
M: 'month',
months: 'month',
month: 'month',
Q: 'quarter',
quarters: 'quarter',
quarter: 'quarter',
s: 'second',
seconds: 'second',
second: 'second',
gg: 'weekYear',
weekyears: 'weekYear',
weekyear: 'weekYear',
GG: 'isoWeekYear',
isoweekyears: 'isoWeekYear',
isoweekyear: 'isoWeekYear',
w: 'week',
weeks: 'week',
week: 'week',
W: 'isoWeek',
isoweeks: 'isoWeek',
isoweek: 'isoWeek',
y: 'year',
years: 'year',
year: 'year',
};
function normalizeUnits(units) {
return typeof units === 'string'
? aliases[units] || aliases[units.toLowerCase()]
: undefined;
}
function normalizeObjectUnits(inputObject) {
var normalizedInput = {},
normalizedProp,
prop;
for (prop in inputObject) {
if (hasOwnProp(inputObject, prop)) {
normalizedProp = normalizeUnits(prop);
if (normalizedProp) {
normalizedInput[normalizedProp] = inputObject[prop];
}
}
}
return normalizedInput;
}
var priorities = {
date: 9,
day: 11,
weekday: 11,
isoWeekday: 11,
dayOfYear: 4,
hour: 13,
millisecond: 16,
minute: 14,
month: 8,
quarter: 7,
second: 15,
weekYear: 1,
isoWeekYear: 1,
week: 5,
isoWeek: 5,
year: 1,
};
function getPrioritizedUnits(unitsObj) {
var units = [],
u;
for (u in unitsObj) {
if (hasOwnProp(unitsObj, u)) {
units.push({ unit: u, priority: priorities[u] });
}
}
units.sort(function (a, b) {
return a.priority - b.priority;
});
return units;
}
var match1$1 = /\d/, // 0 - 9
match2$1 = /\d\d/, // 00 - 99
match3$1 = /\d{3}/, // 000 - 999
match4$1 = /\d{4}/, // 0000 - 9999
match6 = /[+-]?\d{6}/, // -999999 - 999999
match1to2$1 = /\d\d?/, // 0 - 99
match3to4 = /\d\d\d\d?/, // 999 - 9999
match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999
match1to3 = /\d{1,3}/, // 0 - 999
match1to4 = /\d{1,4}/, // 0 - 9999
match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
matchUnsigned = /\d+/, // 0 - inf
matchSigned$1 = /[+-]?\d+/, // -inf - inf
matchOffset$1 = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
match1to2NoLeadingZero = /^[1-9]\d?/, // 1-99
match1to2HasZero = /^([1-9]\d|\d)/, // 0-99
regexes;
regexes = {};
function addRegexToken(token, regex, strictRegex) {
regexes[token] = isFunction(regex)
? regex
: function (isStrict, localeData) {
return isStrict && strictRegex ? strictRegex : regex;
};
}
function getParseRegexForToken(token, config) {
if (!hasOwnProp(regexes, token)) {
return new RegExp(unescapeFormat(token));
}
return regexes[token](config._strict, config._locale);
}
// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
function unescapeFormat(s) {
return regexEscape(
s
.replace('\\', '')
.replace(
/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,
function (matched, p1, p2, p3, p4) {
return p1 || p2 || p3 || p4;
}
)
);
}
function regexEscape(s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
function absFloor(number) {
if (number < 0) {
// -0 -> 0
return Math.ceil(number) || 0;
} else {
return Math.floor(number);
}
}
function toInt(argumentForCoercion) {
var coercedNumber = +argumentForCoercion,
value = 0;
if (coercedNumber !== 0 && isFinite(coercedNumber)) {
value = absFloor(coercedNumber);
}
return value;
}
var tokens = {};
function addParseToken(token, callback) {
var i,
func = callback,
tokenLen;
if (typeof token === 'string') {
token = [token];
}
if (isNumber(callback)) {
func = function (input, array) {
array[callback] = toInt(input);
};
}
tokenLen = token.length;
for (i = 0; i < tokenLen; i++) {
tokens[token[i]] = func;
}
}
function addWeekParseToken(token, callback) {
addParseToken(token, function (input, array, config, token) {
config._w = config._w || {};
callback(input, config._w, config, token);
});
}
function addTimeToArrayFromToken(token, input, config) {
if (input != null && hasOwnProp(tokens, token)) {
tokens[token](input, config._a, config, token);
}
}
function isLeapYear(year) {
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
}
var YEAR = 0,
MONTH = 1,
DATE = 2,
HOUR = 3,
MINUTE = 4,
SECOND = 5,
MILLISECOND = 6,
WEEK = 7,
WEEKDAY = 8;
// FORMATTING
addFormatToken('Y', 0, 0, function () {
var y = this.year();
return y <= 9999 ? zeroFill(y, 4) : '+' + y;
});
addFormatToken(0, ['YY', 2], 0, function () {
return this.year() % 100;
});
addFormatToken(0, ['YYYY', 4], 0, 'year');
addFormatToken(0, ['YYYYY', 5], 0, 'year');
addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
// PARSING
addRegexToken('Y', matchSigned$1);
addRegexToken('YY', match1to2$1, match2$1);
addRegexToken('YYYY', match1to4, match4$1);
addRegexToken('YYYYY', match1to6, match6);
addRegexToken('YYYYYY', match1to6, match6);
addParseToken(['YYYYY', 'YYYYYY'], YEAR);
addParseToken('YYYY', function (input, array) {
array[YEAR] =
input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
});
addParseToken('YY', function (input, array) {
array[YEAR] = hooks.parseTwoDigitYear(input);
});
addParseToken('Y', function (input, array) {
array[YEAR] = parseInt(input, 10);
});
// HELPERS
function daysInYear(year) {
return isLeapYear(year) ? 366 : 365;
}
// HOOKS
hooks.parseTwoDigitYear = function (input) {
return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
};
// MOMENTS
var getSetYear = makeGetSet('FullYear', true);
function getIsLeapYear() {
return isLeapYear(this.year());
}
function makeGetSet(unit, keepTime) {
return function (value) {
if (value != null) {
set(this, unit, value);
hooks.updateOffset(this, keepTime);
return this;
} else {
return get$1(this, unit);
}
};
}
function get$1(mom, unit) {
if (!mom.isValid()) {
return NaN;
}
var d = mom._d,
isUTC = mom._isUTC;
switch (unit) {
case 'Milliseconds':
return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();
case 'Seconds':
return isUTC ? d.getUTCSeconds() : d.getSeconds();
case 'Minutes':
return isUTC ? d.getUTCMinutes() : d.getMinutes();
case 'Hours':
return isUTC ? d.getUTCHours() : d.getHours();
case 'Date':
return isUTC ? d.getUTCDate() : d.getDate();
case 'Day':
return isUTC ? d.getUTCDay() : d.getDay();
case 'Month':
return isUTC ? d.getUTCMonth() : d.getMonth();
case 'FullYear':
return isUTC ? d.getUTCFullYear() : d.getFullYear();
default:
return NaN; // Just in case
}
}
function set(mom, unit, value) {
var d, isUTC, year, month, date;
if (!mom.isValid() || isNaN(value)) {
return;
}
d = mom._d;
isUTC = mom._isUTC;
switch (unit) {
case 'Milliseconds':
return void (isUTC
? d.setUTCMilliseconds(value)
: d.setMilliseconds(value));
case 'Seconds':
return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));
case 'Minutes':
return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));
case 'Hours':
return void (isUTC ? d.setUTCHours(value) : d.setHours(value));
case 'Date':
return void (isUTC ? d.setUTCDate(value) : d.setDate(value));
// case 'Day': // Not real
// return void (isUTC ? d.setUTCDay(value) : d.setDay(value));
// case 'Month': // Not used because we need to pass two variables
// return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));
case 'FullYear':
break; // See below ...
default:
return; // Just in case
}
year = value;
month = mom.month();
date = mom.date();
date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;
void (isUTC
? d.setUTCFullYear(year, month, date)
: d.setFullYear(year, month, date));
}
// MOMENTS
function stringGet(units) {
units = normalizeUnits(units);
if (isFunction(this[units])) {
return this[units]();
}
return this;
}
function stringSet(units, value) {
if (typeof units === 'object') {
units = normalizeObjectUnits(units);
var prioritized = getPrioritizedUnits(units),
i,
prioritizedLen = prioritized.length;
for (i = 0; i < prioritizedLen; i++) {
this[prioritized[i].unit](units[prioritized[i].unit]);
}
} else {
units = normalizeUnits(units);
if (isFunction(this[units])) {
return this[units](value);
}
}
return this;
}
function mod$1(n, x) {
return ((n % x) + x) % x;
}
var indexOf;
if (Array.prototype.indexOf) {
indexOf = Array.prototype.indexOf;
} else {
indexOf = function (o) {
// I know
var i;
for (i = 0; i < this.length; ++i) {
if (this[i] === o) {
return i;
}
}
return -1;
};
}
function daysInMonth(year, month) {
if (isNaN(year) || isNaN(month)) {
return NaN;
}
var modMonth = mod$1(month, 12);
year += (month - modMonth) / 12;
return modMonth === 1
? isLeapYear(year)
? 29
: 28
: 31 - ((modMonth % 7) % 2);
}
// FORMATTING
addFormatToken('M', ['MM', 2], 'Mo', function () {
return this.month() + 1;
});
addFormatToken('MMM', 0, 0, function (format) {
return this.localeData().monthsShort(this, format);
});
addFormatToken('MMMM', 0, 0, function (format) {
return this.localeData().months(this, format);
});
// PARSING
addRegexToken('M', match1to2$1, match1to2NoLeadingZero);
addRegexToken('MM', match1to2$1, match2$1);
addRegexToken('MMM', function (isStrict, locale) {
return locale.monthsShortRegex(isStrict);
});
addRegexToken('MMMM', function (isStrict, locale) {
return locale.monthsRegex(isStrict);
});
addParseToken(['M', 'MM'], function (input, array) {
array[MONTH] = toInt(input) - 1;
});
addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
var month = config._locale.monthsParse(input, token, config._strict);
// if we didn't find a month name, mark the date as invalid.
if (month != null) {
array[MONTH] = month;
} else {
getParsingFlags(config).invalidMonth = input;
}
});
// LOCALES
var defaultLocaleMonths =
'January_February_March_April_May_June_July_August_September_October_November_December'.split(
'_'
),
defaultLocaleMonthsShort =
'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
// MOMENTS
function setMonth(mom, value) {
if (!mom.isValid()) {
// No op
return mom;
}
if (typeof value === 'string') {
if (/^\d+$/.test(value)) {
value = toInt(value);
} else {
value = mom.localeData().monthsParse(value);
// TODO: Another silent failure?
if (!isNumber(value)) {
return mom;
}
}
}
var month = value,
date = mom.date();
date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));
void (mom._isUTC
? mom._d.setUTCMonth(month, date)
: mom._d.setMonth(month, date));
return mom;
}
function getSetMonth(value) {
if (value != null) {
setMonth(this, value);
hooks.updateOffset(this, true);
return this;
} else {
return get$1(this, 'Month');
}
}
function getDaysInMonth() {
return daysInMonth(this.year(), this.month());
}
function createDate(y, m, d, h, M, s, ms) {
// can't just apply() to create a date:
// https://stackoverflow.com/q/181348
var date;
// the date constructor remaps years 0-99 to 1900-1999
if (y < 100 && y >= 0) {
// preserve leap years using a full 400 year cycle, then reset
date = new Date(y + 400, m, d, h, M, s, ms);
if (isFinite(date.getFullYear())) {
date.setFullYear(y);
}
} else {
date = new Date(y, m, d, h, M, s, ms);
}
return date;
}
function createUTCDate(y) {
var date, args;
// the Date.UTC function remaps years 0-99 to 1900-1999
if (y < 100 && y >= 0) {
args = Array.prototype.slice.call(arguments);
// preserve leap years using a full 400 year cycle, then reset
args[0] = y + 400;
date = new Date(Date.UTC.apply(null, args));
if (isFinite(date.getUTCFullYear())) {
date.setUTCFullYear(y);
}
} else {
date = new Date(Date.UTC.apply(null, arguments));
}
return date;
}
// start-of-first-week - start-of-year
function firstWeekOffset(year, dow, doy) {
var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
fwd = 7 + dow - doy,
// first-week day local weekday -- which local weekday is fwd
fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
return -fwdlw + fwd - 1;
}
// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
var localWeekday = (7 + weekday - dow) % 7,
weekOffset = firstWeekOffset(year, dow, doy),
dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
resYear,
resDayOfYear;
if (dayOfYear <= 0) {
resYear = year - 1;
resDayOfYear = daysInYear(resYear) + dayOfYear;
} else if (dayOfYear > daysInYear(year)) {
resYear = year + 1;
resDayOfYear = dayOfYear - daysInYear(year);
} else {
resYear = year;
resDayOfYear = dayOfYear;
}
return {
year: resYear,
dayOfYear: resDayOfYear,
};
}
function weekOfYear$1(mom, dow, doy) {
var weekOffset = firstWeekOffset(mom.year(), dow, doy),
week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
resWeek,
resYear;
if (week < 1) {
resYear = mom.year() - 1;
resWeek = week + weeksInYear(resYear, dow, doy);
} else if (week > weeksInYear(mom.year(), dow, doy)) {
resWeek = week - weeksInYear(mom.year(), dow, doy);
resYear = mom.year() + 1;
} else {
resYear = mom.year();
resWeek = week;
}
return {
week: resWeek,
year: resYear,
};
}
function weeksInYear(year, dow, doy) {
var weekOffset = firstWeekOffset(year, dow, doy),
weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
}
// FORMATTING
addFormatToken('w', ['ww', 2], 'wo', 'week');
addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
// PARSING
addRegexToken('w', match1to2$1, match1to2NoLeadingZero);
addRegexToken('ww', match1to2$1, match2$1);
addRegexToken('W', match1to2$1, match1to2NoLeadingZero);
addRegexToken('WW', match1to2$1, match2$1);
addWeekParseToken(
['w', 'ww', 'W', 'WW'],
function (input, week, config, token) {
week[token.substr(0, 1)] = toInt(input);
}
);
var defaultLocaleWeek = {
dow: 0, // Sunday is the first day of the week.
doy: 6, // The week that contains Jan 6th is the first week of the year.
};
// MOMENTS
function getSetWeek(input) {
var week = this.localeData().week(this);
return input == null ? week : this.add((input - week) * 7, 'd');
}
function getSetISOWeek(input) {
var week = weekOfYear$1(this, 1, 4).week;
return input == null ? week : this.add((input - week) * 7, 'd');
}
// FORMATTING
addFormatToken('d', 0, 'do', 'day');
addFormatToken('dd', 0, 0, function (format) {
return this.localeData().weekdaysMin(this, format);
});
addFormatToken('ddd', 0, 0, function (format) {
return this.localeData().weekdaysShort(this, format);
});
addFormatToken('dddd', 0, 0, function (format) {
return this.localeData().weekdays(this, format);
});
addFormatToken('e', 0, 0, 'weekday');
addFormatToken('E', 0, 0, 'isoWeekday');
// PARSING
addRegexToken('d', match1to2$1);
addRegexToken('e', match1to2$1);
addRegexToken('E', match1to2$1);
addRegexToken('dd', function (isStrict, locale) {
return locale.weekdaysMinRegex(isStrict);
});
addRegexToken('ddd', function (isStrict, locale) {
return locale.weekdaysShortRegex(isStrict);
});
addRegexToken('dddd', function (isStrict, locale) {
return locale.weekdaysRegex(isStrict);
});
addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
var weekday = config._locale.weekdaysParse(input, token, config._strict);
// if we didn't get a weekday name, mark the date as invalid
if (weekday != null) {
week.d = weekday;
} else {
getParsingFlags(config).invalidWeekday = input;
}
});
addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
week[token] = toInt(input);
});
// HELPERS
function parseWeekday(input, locale) {
if (typeof input !== 'string') {
return input;
}
if (!isNaN(input)) {
return parseInt(input, 10);
}
input = locale.weekdaysParse(input);
if (typeof input === 'number') {
return input;
}
return null;
}
function parseIsoWeekday(input, locale) {
if (typeof input === 'string') {
return locale.weekdaysParse(input) % 7 || 7;
}
return isNaN(input) ? null : input;
}
var defaultLocaleWeekdays =
'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
// MOMENTS
function getSetDayOfWeek(input) {
if (!this.isValid()) {
return input != null ? this : NaN;
}
var day = get$1(this, 'Day');
if (input != null) {
input = parseWeekday(input, this.localeData());
return this.add(input - day, 'd');
} else {
return day;
}
}
function getSetLocaleDayOfWeek(input) {
if (!this.isValid()) {
return input != null ? this : NaN;
}
var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
return input == null ? weekday : this.add(input - weekday, 'd');
}
function getSetISODayOfWeek(input) {
if (!this.isValid()) {
return input != null ? this : NaN;
}
// behaves the same as moment#day except
// as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
// as a setter, sunday should belong to the previous week.
if (input != null) {
var weekday = parseIsoWeekday(input, this.localeData());
return this.day(this.day() % 7 ? weekday : weekday - 7);
} else {
return this.day() || 7;
}
}
// FORMATTING
function hFormat() {
return this.hours() % 12 || 12;
}
function kFormat() {
return this.hours() || 24;
}
addFormatToken('H', ['HH', 2], 0, 'hour');
addFormatToken('h', ['hh', 2], 0, hFormat);
addFormatToken('k', ['kk', 2], 0, kFormat);
addFormatToken('hmm', 0, 0, function () {
return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
});
addFormatToken('hmmss', 0, 0, function () {
return (
'' +
hFormat.apply(this) +
zeroFill(this.minutes(), 2) +
zeroFill(this.seconds(), 2)
);
});
addFormatToken('Hmm', 0, 0, function () {
return '' + this.hours() + zeroFill(this.minutes(), 2);
});
addFormatToken('Hmmss', 0, 0, function () {
return (
'' +
this.hours() +
zeroFill(this.minutes(), 2) +
zeroFill(this.seconds(), 2)
);
});
function meridiem(token, lowercase) {
addFormatToken(token, 0, 0, function () {
return this.localeData().meridiem(
this.hours(),
this.minutes(),
lowercase
);
});
}
meridiem('a', true);
meridiem('A', false);
// PARSING
function matchMeridiem(isStrict, locale) {
return locale._meridiemParse;
}
addRegexToken('a', matchMeridiem);
addRegexToken('A', matchMeridiem);
addRegexToken('H', match1to2$1, match1to2HasZero);
addRegexToken('h', match1to2$1, match1to2NoLeadingZero);
addRegexToken('k', match1to2$1, match1to2NoLeadingZero);
addRegexToken('HH', match1to2$1, match2$1);
addRegexToken('hh', match1to2$1, match2$1);
addRegexToken('kk', match1to2$1, match2$1);
addRegexToken('hmm', match3to4);
addRegexToken('hmmss', match5to6);
addRegexToken('Hmm', match3to4);
addRegexToken('Hmmss', match5to6);
addParseToken(['H', 'HH'], HOUR);
addParseToken(['k', 'kk'], function (input, array, config) {
var kInput = toInt(input);
array[HOUR] = kInput === 24 ? 0 : kInput;
});
addParseToken(['a', 'A'], function (input, array, config) {
config._isPm = config._locale.isPM(input);
config._meridiem = input;
});
addParseToken(['h', 'hh'], function (input, array, config) {
array[HOUR] = toInt(input);
getParsingFlags(config).bigHour = true;
});
addParseToken('hmm', function (input, array, config) {
var pos = input.length - 2;
array[HOUR] = toInt(input.substr(0, pos));
array[MINUTE] = toInt(input.substr(pos));
getParsingFlags(config).bigHour = true;
});
addParseToken('hmmss', function (input, array, config) {
var pos1 = input.length - 4,
pos2 = input.length - 2;
array[HOUR] = toInt(input.substr(0, pos1));
array[MINUTE] = toInt(input.substr(pos1, 2));
array[SECOND] = toInt(input.substr(pos2));
getParsingFlags(config).bigHour = true;
});
addParseToken('Hmm', function (input, array, config) {
var pos = input.length - 2;
array[HOUR] = toInt(input.substr(0, pos));
array[MINUTE] = toInt(input.substr(pos));
});
addParseToken('Hmmss', function (input, array, config) {
var pos1 = input.length - 4,
pos2 = input.length - 2;
array[HOUR] = toInt(input.substr(0, pos1));
array[MINUTE] = toInt(input.substr(pos1, 2));
array[SECOND] = toInt(input.substr(pos2));
});
var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
// Setting the hour should keep the time, because the user explicitly
// specified which hour they want. So trying to maintain the same hour (in
// a new timezone) makes sense. Adding/subtracting hours does not follow
// this rule.
getSetHour = makeGetSet('Hours', true);
var baseConfig = {
calendar: defaultCalendar,
longDateFormat: defaultLongDateFormat,
invalidDate: defaultInvalidDate,
ordinal: defaultOrdinal,
dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
relativeTime: defaultRelativeTime,
months: defaultLocaleMonths,
monthsShort: defaultLocaleMonthsShort,
week: defaultLocaleWeek,
weekdays: defaultLocaleWeekdays,
weekdaysMin: defaultLocaleWeekdaysMin,
weekdaysShort: defaultLocaleWeekdaysShort,
meridiemParse: defaultLocaleMeridiemParse,
};
// internal storage for locale config files
var locales = {},
localeFamilies = {},
globalLocale;
function commonPrefix(arr1, arr2) {
var i,
minl = Math.min(arr1.length, arr2.length);
for (i = 0; i < minl; i += 1) {
if (arr1[i] !== arr2[i]) {
return i;
}
}
return minl;
}
function normalizeLocale(key) {
return key ? key.toLowerCase().replace('_', '-') : key;
}
// pick the locale from the array
// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
function chooseLocale(names) {
var i = 0,
j,
next,
locale,
split;
while (i < names.length) {
split = normalizeLocale(names[i]).split('-');
j = split.length;
next = normalizeLocale(names[i + 1]);
next = next ? next.split('-') : null;
while (j > 0) {
locale = loadLocale(split.slice(0, j).join('-'));
if (locale) {
return locale;
}
if (
next &&
next.length >= j &&
commonPrefix(split, next) >= j - 1
) {
//the next array item is better than a shallower substring of this one
break;
}
j--;
}
i++;
}
return globalLocale;
}
function isLocaleNameSane(name) {
// Prevent names that look like filesystem paths, i.e contain '/' or '\'
// Ensure name is available and function returns boolean
return !!(name && name.match('^[^/\\\\]*$'));
}
function loadLocale(name) {
var oldLocale = null,
aliasedRequire;
// TODO: Find a better way to register and load all the locales in Node
if (
locales[name] === undefined &&
typeof module !== 'undefined' &&
module &&
module.exports &&
isLocaleNameSane(name)
) {
try {
oldLocale = globalLocale._abbr;
aliasedRequire = require;
aliasedRequire('./locale/' + name);
getSetGlobalLocale(oldLocale);
} catch (e) {
// mark as not found to avoid repeating expensive file require call causing high CPU
// when trying to find en-US, en_US, en-us for every format call
locales[name] = null; // null means not found
}
}
return locales[name];
}
// This function will load locale and then set the global locale. If
// no arguments are passed in, it will simply return the current global
// locale key.
function getSetGlobalLocale(key, values) {
var data;
if (key) {
if (isUndefined(values)) {
data = getLocale(key);
} else {
data = defineLocale(key, values);
}
if (data) {
// moment.duration._locale = moment._locale = data;
globalLocale = data;
} else {
if (typeof console !== 'undefined' && console.warn) {
//warn user if arguments are passed but the locale could not be set
console.warn(
'Locale ' + key + ' not found. Did you forget to load it?'
);
}
}
}
return globalLocale._abbr;
}
function defineLocale(name, config) {
if (config !== null) {
var locale,
parentConfig = baseConfig;
config.abbr = name;
if (locales[name] != null) {
deprecateSimple(
'defineLocaleOverride',
'use moment.updateLocale(localeName, config) to change ' +
'an existing locale. moment.defineLocale(localeName, ' +
'config) should only be used for creating a new locale ' +
'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
);
parentConfig = locales[name]._config;
} else if (config.parentLocale != null) {
if (locales[config.parentLocale] != null) {
parentConfig = locales[config.parentLocale]._config;
} else {
locale = loadLocale(config.parentLocale);
if (locale != null) {
parentConfig = locale._config;
} else {
if (!localeFamilies[config.parentLocale]) {
localeFamilies[config.parentLocale] = [];
}
localeFamilies[config.parentLocale].push({
name: name,
config: config,
});
return null;
}
}
}
locales[name] = new Locale(mergeConfigs(parentConfig, config));
if (localeFamilies[name]) {
localeFamilies[name].forEach(function (x) {
defineLocale(x.name, x.config);
});
}
// backwards compat for now: also set the locale
// make sure we set the locale AFTER all child locales have been
// created, so we won't end up with the child locale set.
getSetGlobalLocale(name);
return locales[name];
} else {
// useful for testing
delete locales[name];
return null;
}
}
function updateLocale(name, config) {
if (config != null) {
var locale,
tmpLocale,
parentConfig = baseConfig;
if (locales[name] != null && locales[name].parentLocale != null) {
// Update existing child locale in-place to avoid memory-leaks
locales[name].set(mergeConfigs(locales[name]._config, config));
} else {
// MERGE
tmpLocale = loadLocale(name);
if (tmpLocale != null) {
parentConfig = tmpLocale._config;
}
config = mergeConfigs(parentConfig, config);
if (tmpLocale == null) {
// updateLocale is called for creating a new locale
// Set abbr so it will have a name (getters return
// undefined otherwise).
config.abbr = name;
}
locale = new Locale(config);
locale.parentLocale = locales[name];
locales[name] = locale;
}
// backwards compat for now: also set the locale
getSetGlobalLocale(name);
} else {
// pass null for config to unupdate, useful for tests
if (locales[name] != null) {
if (locales[name].parentLocale != null) {
locales[name] = locales[name].parentLocale;
if (name === getSetGlobalLocale()) {
getSetGlobalLocale(name);
}
} else if (locales[name] != null) {
delete locales[name];
}
}
}
return locales[name];
}
// returns locale data
function getLocale(key) {
var locale;
if (key && key._locale && key._locale._abbr) {
key = key._locale._abbr;
}
if (!key) {
return globalLocale;
}
if (!isArray(key)) {
//short-circuit everything else
locale = loadLocale(key);
if (locale) {
return locale;
}
key = [key];
}
return chooseLocale(key);
}
function listLocales() {
return keys(locales);
}
function checkOverflow(m) {
var overflow,
a = m._a;
if (a && getParsingFlags(m).overflow === -2) {
overflow =
a[MONTH] < 0 || a[MONTH] > 11
? MONTH
: a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
? DATE
: a[HOUR] < 0 ||
a[HOUR] > 24 ||
(a[HOUR] === 24 &&
(a[MINUTE] !== 0 ||
a[SECOND] !== 0 ||
a[MILLISECOND] !== 0))
? HOUR
: a[MINUTE] < 0 || a[MINUTE] > 59
? MINUTE
: a[SECOND] < 0 || a[SECOND] > 59
? SECOND
: a[MILLISECOND] < 0 || a[MILLISECOND] > 999
? MILLISECOND
: -1;
if (
getParsingFlags(m)._overflowDayOfYear &&
(overflow < YEAR || overflow > DATE)
) {
overflow = DATE;
}
if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
overflow = WEEK;
}
if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
overflow = WEEKDAY;
}
getParsingFlags(m).overflow = overflow;
}
return m;
}
// iso 8601 regex
// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
var extendedIsoRegex =
/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
basicIsoRegex =
/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
isoDates = [
['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
['GGGG-[W]WW', /\d{4}-W\d\d/, false],
['YYYY-DDD', /\d{4}-\d{3}/],
['YYYY-MM', /\d{4}-\d\d/, false],
['YYYYYYMMDD', /[+-]\d{10}/],
['YYYYMMDD', /\d{8}/],
['GGGG[W]WWE', /\d{4}W\d{3}/],
['GGGG[W]WW', /\d{4}W\d{2}/, false],
['YYYYDDD', /\d{7}/],
['YYYYMM', /\d{6}/, false],
['YYYY', /\d{4}/, false],
],
// iso time formats and regexes
isoTimes = [
['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
['HH:mm:ss', /\d\d:\d\d:\d\d/],
['HH:mm', /\d\d:\d\d/],
['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
['HHmmss', /\d\d\d\d\d\d/],
['HHmm', /\d\d\d\d/],
['HH', /\d\d/],
],
aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
rfc2822 =
/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
obsOffsets = {
UT: 0,
GMT: 0,
EDT: -4 * 60,
EST: -5 * 60,
CDT: -5 * 60,
CST: -6 * 60,
MDT: -6 * 60,
MST: -7 * 60,
PDT: -7 * 60,
PST: -8 * 60,
};
// date from iso format
function configFromISO(config) {
var i,
l,
string = config._i,
match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
allowTime,
dateFormat,
timeFormat,
tzFormat,
isoDatesLen = isoDates.length,
isoTimesLen = isoTimes.length;
if (match) {
getParsingFlags(config).iso = true;
for (i = 0, l = isoDatesLen; i < l; i++) {
if (isoDates[i][1].exec(match[1])) {
dateFormat = isoDates[i][0];
allowTime = isoDates[i][2] !== false;
break;
}
}
if (dateFormat == null) {
config._isValid = false;
return;
}
if (match[3]) {
for (i = 0, l = isoTimesLen; i < l; i++) {
if (isoTimes[i][1].exec(match[3])) {
// match[2] should be 'T' or space
timeFormat = (match[2] || ' ') + isoTimes[i][0];
break;
}
}
if (timeFormat == null) {
config._isValid = false;
return;
}
}
if (!allowTime && timeFormat != null) {
config._isValid = false;
return;
}
if (match[4]) {
if (tzRegex.exec(match[4])) {
tzFormat = 'Z';
} else {
config._isValid = false;
return;
}
}
config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
configFromStringAndFormat(config);
} else {
config._isValid = false;
}
}
function extractFromRFC2822Strings(
yearStr,
monthStr,
dayStr,
hourStr,
minuteStr,
secondStr
) {
var result = [
untruncateYear(yearStr),
defaultLocaleMonthsShort.indexOf(monthStr),
parseInt(dayStr, 10),
parseInt(hourStr, 10),
parseInt(minuteStr, 10),
];
if (secondStr) {
result.push(parseInt(secondStr, 10));
}
return result;
}
function untruncateYear(yearStr) {
var year = parseInt(yearStr, 10);
if (year <= 49) {
return 2000 + year;
} else if (year <= 999) {
return 1900 + year;
}
return year;
}
function preprocessRFC2822(s) {
// Remove comments and folding whitespace and replace multiple-spaces with a single space
return s
.replace(/\([^()]*\)|[\n\t]/g, ' ')
.replace(/(\s\s+)/g, ' ')
.replace(/^\s\s*/, '')
.replace(/\s\s*$/, '');
}
function checkWeekday(weekdayStr, parsedInput, config) {
if (weekdayStr) {
// TODO: Replace the vanilla JS Date object with an independent day-of-week check.
var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
weekdayActual = new Date(
parsedInput[0],
parsedInput[1],
parsedInput[2]
).getDay();
if (weekdayProvided !== weekdayActual) {
getParsingFlags(config).weekdayMismatch = true;
config._isValid = false;
return false;
}
}
return true;
}
function calculateOffset(obsOffset, militaryOffset, numOffset) {
if (obsOffset) {
return obsOffsets[obsOffset];
} else if (militaryOffset) {
// the only allowed military tz is Z
return 0;
} else {
var hm = parseInt(numOffset, 10),
m = hm % 100,
h = (hm - m) / 100;
return h * 60 + m;
}
}
// date and time from ref 2822 format
function configFromRFC2822(config) {
var match = rfc2822.exec(preprocessRFC2822(config._i)),
parsedArray;
if (match) {
parsedArray = extractFromRFC2822Strings(
match[4],
match[3],
match[2],
match[5],
match[6],
match[7]
);
if (!checkWeekday(match[1], parsedArray, config)) {
return;
}
config._a = parsedArray;
config._tzm = calculateOffset(match[8], match[9], match[10]);
config._d = createUTCDate.apply(null, config._a);
config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
getParsingFlags(config).rfc2822 = true;
} else {
config._isValid = false;
}
}
// date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
function configFromString(config) {
var matched = aspNetJsonRegex.exec(config._i);
if (matched !== null) {
config._d = new Date(+matched[1]);
return;
}
configFromISO(config);
if (config._isValid === false) {
delete config._isValid;
} else {
return;
}
configFromRFC2822(config);
if (config._isValid === false) {
delete config._isValid;
} else {
return;
}
if (config._strict) {
config._isValid = false;
} else {
// Final attempt, use Input Fallback
hooks.createFromInputFallback(config);
}
}
hooks.createFromInputFallback = deprecate(
'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
function (config) {
config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
}
);
// Pick the first defined of two or three arguments.
function defaults(a, b, c) {
if (a != null) {
return a;
}
if (b != null) {
return b;
}
return c;
}
function currentDateArray(config) {
// hooks is actually the exported moment object
var nowValue = new Date(hooks.now());
if (config._useUTC) {
return [
nowValue.getUTCFullYear(),
nowValue.getUTCMonth(),
nowValue.getUTCDate(),
];
}
return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
}
// convert an array to a date.
// the array should mirror the parameters below
// note: all values past the year are optional and will default to the lowest possible value.
// [year, month, day , hour, minute, second, millisecond]
function configFromArray(config) {
var i,
date,
input = [],
currentDate,
expectedWeekday,
yearToUse;
if (config._d) {
return;
}
currentDate = currentDateArray(config);
//compute day of the year from weeks and weekdays
if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
dayOfYearFromWeekInfo(config);
}
//if the day of the year is set, figure out what it is
if (config._dayOfYear != null) {
yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
if (
config._dayOfYear > daysInYear(yearToUse) ||
config._dayOfYear === 0
) {
getParsingFlags(config)._overflowDayOfYear = true;
}
date = createUTCDate(yearToUse, 0, config._dayOfYear);
config._a[MONTH] = date.getUTCMonth();
config._a[DATE] = date.getUTCDate();
}
// Default to current date.
// * if no year, month, day of month are given, default to today
// * if day of month is given, default month and year
// * if month is given, default only year
// * if year is given, don't default anything
for (i = 0; i < 3 && config._a[i] == null; ++i) {
config._a[i] = input[i] = currentDate[i];
}
// Zero out whatever was not defaulted, including time
for (; i < 7; i++) {
config._a[i] = input[i] =
config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
}
// Check for 24:00:00.000
if (
config._a[HOUR] === 24 &&
config._a[MINUTE] === 0 &&
config._a[SECOND] === 0 &&
config._a[MILLISECOND] === 0
) {
config._nextDay = true;
config._a[HOUR] = 0;
}
config._d = (config._useUTC ? createUTCDate : createDate).apply(
null,
input
);
expectedWeekday = config._useUTC
? config._d.getUTCDay()
: config._d.getDay();
// Apply timezone offset from input. The actual utcOffset can be changed
// with parseZone.
if (config._tzm != null) {
config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
}
if (config._nextDay) {
config._a[HOUR] = 24;
}
// check for mismatching day of week
if (
config._w &&
typeof config._w.d !== 'undefined' &&
config._w.d !== expectedWeekday
) {
getParsingFlags(config).weekdayMismatch = true;
}
}
function dayOfYearFromWeekInfo(config) {
var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
w = config._w;
if (w.GG != null || w.W != null || w.E != null) {
dow = 1;
doy = 4;
// TODO: We need to take the current isoWeekYear, but that depends on
// how we interpret now (local, utc, fixed offset). So create
// a now version of current config (take local/utc/offset flags, and
// create now).
weekYear = defaults(
w.GG,
config._a[YEAR],
weekOfYear$1(createLocal(), 1, 4).year
);
week = defaults(w.W, 1);
weekday = defaults(w.E, 1);
if (weekday < 1 || weekday > 7) {
weekdayOverflow = true;
}
} else {
dow = config._locale._week.dow;
doy = config._locale._week.doy;
curWeek = weekOfYear$1(createLocal(), dow, doy);
weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
// Default to current week.
week = defaults(w.w, curWeek.week);
if (w.d != null) {
// weekday -- low day numbers are considered next week
weekday = w.d;
if (weekday < 0 || weekday > 6) {
weekdayOverflow = true;
}
} else if (w.e != null) {
// local weekday -- counting starts from beginning of week
weekday = w.e + dow;
if (w.e < 0 || w.e > 6) {
weekdayOverflow = true;
}
} else {
// default to beginning of week
weekday = dow;
}
}
if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
getParsingFlags(config)._overflowWeeks = true;
} else if (weekdayOverflow != null) {
getParsingFlags(config)._overflowWeekday = true;
} else {
temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
config._a[YEAR] = temp.year;
config._dayOfYear = temp.dayOfYear;
}
}
// constant that refers to the ISO standard
hooks.ISO_8601 = function () {};
// constant that refers to the RFC 2822 form
hooks.RFC_2822 = function () {};
// date from string and format string
function configFromStringAndFormat(config) {
// TODO: Move this to another part of the creation flow to prevent circular deps
if (config._f === hooks.ISO_8601) {
configFromISO(config);
return;
}
if (config._f === hooks.RFC_2822) {
configFromRFC2822(config);
return;
}
config._a = [];
getParsingFlags(config).empty = true;
// This array is used to make a Date, either with `new Date` or `Date.UTC`
var string = '' + config._i,
i,
parsedInput,
tokens,
token,
skipped,
stringLength = string.length,
totalParsedInputLength = 0,
era,
tokenLen;
tokens =
expandFormat(config._f, config._locale).match(formattingTokens$1) || [];
tokenLen = tokens.length;
for (i = 0; i < tokenLen; i++) {
token = tokens[i];
parsedInput = (string.match(getParseRegexForToken(token, config)) ||
[])[0];
if (parsedInput) {
skipped = string.substr(0, string.indexOf(parsedInput));
if (skipped.length > 0) {
getParsingFlags(config).unusedInput.push(skipped);
}
string = string.slice(
string.indexOf(parsedInput) + parsedInput.length
);
totalParsedInputLength += parsedInput.length;
}
// don't parse if it's not a known token
if (formatTokenFunctions[token]) {
if (parsedInput) {
getParsingFlags(config).empty = false;
} else {
getParsingFlags(config).unusedTokens.push(token);
}
addTimeToArrayFromToken(token, parsedInput, config);
} else if (config._strict && !parsedInput) {
getParsingFlags(config).unusedTokens.push(token);
}
}
// add remaining unparsed input length to the string
getParsingFlags(config).charsLeftOver =
stringLength - totalParsedInputLength;
if (string.length > 0) {
getParsingFlags(config).unusedInput.push(string);
}
// clear _12h flag if hour is <= 12
if (
config._a[HOUR] <= 12 &&
getParsingFlags(config).bigHour === true &&
config._a[HOUR] > 0
) {
getParsingFlags(config).bigHour = undefined;
}
getParsingFlags(config).parsedDateParts = config._a.slice(0);
getParsingFlags(config).meridiem = config._meridiem;
// handle meridiem
config._a[HOUR] = meridiemFixWrap(
config._locale,
config._a[HOUR],
config._meridiem
);
// handle era
era = getParsingFlags(config).era;
if (era !== null) {
config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
}
configFromArray(config);
checkOverflow(config);
}
function meridiemFixWrap(locale, hour, meridiem) {
var isPm;
if (meridiem == null) {
// nothing to do
return hour;
}
if (locale.meridiemHour != null) {
return locale.meridiemHour(hour, meridiem);
} else if (locale.isPM != null) {
// Fallback
isPm = locale.isPM(meridiem);
if (isPm && hour < 12) {
hour += 12;
}
if (!isPm && hour === 12) {
hour = 0;
}
return hour;
} else {
// this is not supposed to happen
return hour;
}
}
// date from string and array of format strings
function configFromStringAndArray(config) {
var tempConfig,
bestMoment,
scoreToBeat,
i,
currentScore,
validFormatFound,
bestFormatIsValid = false,
configfLen = config._f.length;
if (configfLen === 0) {
getParsingFlags(config).invalidFormat = true;
config._d = new Date(NaN);
return;
}
for (i = 0; i < configfLen; i++) {
currentScore = 0;
validFormatFound = false;
tempConfig = copyConfig({}, config);
if (config._useUTC != null) {
tempConfig._useUTC = config._useUTC;
}
tempConfig._f = config._f[i];
configFromStringAndFormat(tempConfig);
if (isValid$1(tempConfig)) {
validFormatFound = true;
}
// if there is any input that was not parsed add a penalty for that format
currentScore += getParsingFlags(tempConfig).charsLeftOver;
//or tokens
currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
getParsingFlags(tempConfig).score = currentScore;
if (!bestFormatIsValid) {
if (
scoreToBeat == null ||
currentScore < scoreToBeat ||
validFormatFound
) {
scoreToBeat = currentScore;
bestMoment = tempConfig;
if (validFormatFound) {
bestFormatIsValid = true;
}
}
} else {
if (currentScore < scoreToBeat) {
scoreToBeat = currentScore;
bestMoment = tempConfig;
}
}
}
extend(config, bestMoment || tempConfig);
}
function configFromObject(config) {
if (config._d) {
return;
}
var i = normalizeObjectUnits(config._i),
dayOrDate = i.day === undefined ? i.date : i.day;
config._a = map(
[i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
function (obj) {
return obj && parseInt(obj, 10);
}
);
configFromArray(config);
}
function createFromConfig(config) {
var res = new Moment(checkOverflow(prepareConfig(config)));
if (res._nextDay) {
// Adding is smart enough around DST
res.add(1, 'd');
res._nextDay = undefined;
}
return res;
}
function prepareConfig(config) {
var input = config._i,
format = config._f;
config._locale = config._locale || getLocale(config._l);
if (input === null || (format === undefined && input === '')) {
return createInvalid$1({ nullInput: true });
}
if (typeof input === 'string') {
config._i = input = config._locale.preparse(input);
}
if (isMoment(input)) {
return new Moment(checkOverflow(input));
} else if (isDate(input)) {
config._d = input;
} else if (isArray(format)) {
configFromStringAndArray(config);
} else if (format) {
configFromStringAndFormat(config);
} else {
configFromInput(config);
}
if (!isValid$1(config)) {
config._d = null;
}
return config;
}
function configFromInput(config) {
var input = config._i;
if (isUndefined(input)) {
config._d = new Date(hooks.now());
} else if (isDate(input)) {
config._d = new Date(input.valueOf());
} else if (typeof input === 'string') {
configFromString(config);
} else if (isArray(input)) {
config._a = map(input.slice(0), function (obj) {
return parseInt(obj, 10);
});
configFromArray(config);
} else if (isObject(input)) {
configFromObject(config);
} else if (isNumber(input)) {
// from milliseconds
config._d = new Date(input);
} else {
hooks.createFromInputFallback(config);
}
}
function createLocalOrUTC(input, format, locale, strict, isUTC) {
var c = {};
if (format === true || format === false) {
strict = format;
format = undefined;
}
if (locale === true || locale === false) {
strict = locale;
locale = undefined;
}
if (
(isObject(input) && isObjectEmpty(input)) ||
(isArray(input) && input.length === 0)
) {
input = undefined;
}
// object construction must be done this way.
// https://github.com/moment/moment/issues/1423
c._isAMomentObject = true;
c._useUTC = c._isUTC = isUTC;
c._l = locale;
c._i = input;
c._f = format;
c._strict = strict;
return createFromConfig(c);
}
function createLocal(input, format, locale, strict) {
return createLocalOrUTC(input, format, locale, strict, false);
}
var prototypeMin = deprecate(
'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
function () {
var other = createLocal.apply(null, arguments);
if (this.isValid() && other.isValid()) {
return other < this ? this : other;
} else {
return createInvalid$1();
}
}
),
prototypeMax = deprecate(
'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
function () {
var other = createLocal.apply(null, arguments);
if (this.isValid() && other.isValid()) {
return other > this ? this : other;
} else {
return createInvalid$1();
}
}
);
// Pick a moment m from moments so that m[fn](other) is true for all
// other. This relies on the function fn to be transitive.
//
// moments should either be an array of moment objects or an array, whose
// first element is an array of moment objects.
function pickBy(fn, moments) {
var res, i;
if (moments.length === 1 && isArray(moments[0])) {
moments = moments[0];
}
if (!moments.length) {
return createLocal();
}
res = moments[0];
for (i = 1; i < moments.length; ++i) {
if (!moments[i].isValid() || moments[i][fn](res)) {
res = moments[i];
}
}
return res;
}
// TODO: Use [].sort instead?
function min() {
var args = [].slice.call(arguments, 0);
return pickBy('isBefore', args);
}
function max() {
var args = [].slice.call(arguments, 0);
return pickBy('isAfter', args);
}
var now = function () {
return Date.now ? Date.now() : +new Date();
};
var ordering = [
'year',
'quarter',
'month',
'week',
'day',
'hour',
'minute',
'second',
'millisecond',
];
function isDurationValid(m) {
var key,
unitHasDecimal = false,
i,
orderLen = ordering.length;
for (key in m) {
if (
hasOwnProp(m, key) &&
!(
indexOf.call(ordering, key) !== -1 &&
(m[key] == null || !isNaN(m[key]))
)
) {
return false;
}
}
for (i = 0; i < orderLen; ++i) {
if (m[ordering[i]]) {
if (unitHasDecimal) {
return false; // only allow non-integers for smallest unit
}
if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
unitHasDecimal = true;
}
}
}
return true;
}
function createInvalid() {
return createDuration(NaN);
}
function Duration(duration) {
var normalizedInput = normalizeObjectUnits(duration),
years = normalizedInput.year || 0,
quarters = normalizedInput.quarter || 0,
months = normalizedInput.month || 0,
weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
days = normalizedInput.day || 0,
hours = normalizedInput.hour || 0,
minutes = normalizedInput.minute || 0,
seconds = normalizedInput.second || 0,
milliseconds = normalizedInput.millisecond || 0;
this._isValid = isDurationValid(normalizedInput);
// representation for dateAddRemove
this._milliseconds =
+milliseconds +
seconds * 1e3 + // 1000
minutes * 6e4 + // 1000 * 60
hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
// Because of dateAddRemove treats 24 hours as different from a
// day when working around DST, we need to store them separately
this._days = +days + weeks * 7;
// It is impossible to translate months into days without knowing
// which months you are are talking about, so we have to store
// it separately.
this._months = +months + quarters * 3 + years * 12;
this._data = {};
this._locale = getLocale();
this._bubble();
}
function isDuration(obj) {
return obj instanceof Duration;
}
function absRound(number) {
if (number < 0) {
return Math.round(-1 * number) * -1;
} else {
return Math.round(number);
}
}
// compare two arrays, return the number of differences
function compareArrays(array1, array2, dontConvert) {
var len = Math.min(array1.length, array2.length),
lengthDiff = Math.abs(array1.length - array2.length),
diffs = 0,
i;
for (i = 0; i < len; i++) {
if (
(toInt(array1[i]) !== toInt(array2[i]))
) {
diffs++;
}
}
return diffs + lengthDiff;
}
// FORMATTING
function offset(token, separator) {
addFormatToken(token, 0, 0, function () {
var offset = this.utcOffset(),
sign = '+';
if (offset < 0) {
offset = -offset;
sign = '-';
}
return (
sign +
zeroFill(~~(offset / 60), 2) +
separator +
zeroFill(~~offset % 60, 2)
);
});
}
offset('Z', ':');
offset('ZZ', '');
// PARSING
addRegexToken('Z', matchShortOffset);
addRegexToken('ZZ', matchShortOffset);
addParseToken(['Z', 'ZZ'], function (input, array, config) {
config._useUTC = true;
config._tzm = offsetFromString$1(matchShortOffset, input);
});
// HELPERS
// timezone chunker
// '+10:00' > ['10', '00']
// '-1530' > ['-15', '30']
var chunkOffset = /([\+\-]|\d\d)/gi;
function offsetFromString$1(matcher, string) {
var matches = (string || '').match(matcher),
chunk,
parts,
minutes;
if (matches === null) {
return null;
}
chunk = matches[matches.length - 1] || [];
parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
minutes = +(parts[1] * 60) + toInt(parts[2]);
return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
}
// Return a moment from input, that is local/utc/zone equivalent to model.
function cloneWithOffset(input, model) {
var res, diff;
if (model._isUTC) {
res = model.clone();
diff =
(isMoment(input) || isDate(input)
? input.valueOf()
: createLocal(input).valueOf()) - res.valueOf();
// Use low-level api, because this fn is low-level api.
res._d.setTime(res._d.valueOf() + diff);
hooks.updateOffset(res, false);
return res;
} else {
return createLocal(input).local();
}
}
function getDateOffset(m) {
// On Firefox.24 Date#getTimezoneOffset returns a floating point.
// https://github.com/moment/moment/pull/1871
return -Math.round(m._d.getTimezoneOffset());
}
// HOOKS
// This function will be called whenever a moment is mutated.
// It is intended to keep the offset in sync with the timezone.
hooks.updateOffset = function () {};
// MOMENTS
// keepLocalTime = true means only change the timezone, without
// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
// +0200, so we adjust the time as needed, to be valid.
//
// Keeping the time actually adds/subtracts (one hour)
// from the actual represented time. That is why we call updateOffset
// a second time. In case it wants us to change the offset again
// _changeInProgress == true case, then we have to adjust, because
// there is no such time in the given timezone.
function getSetOffset(input, keepLocalTime, keepMinutes) {
var offset = this._offset || 0,
localAdjust;
if (!this.isValid()) {
return input != null ? this : NaN;
}
if (input != null) {
if (typeof input === 'string') {
input = offsetFromString$1(matchShortOffset, input);
if (input === null) {
return this;
}
} else if (Math.abs(input) < 16 && !keepMinutes) {
input = input * 60;
}
if (!this._isUTC && keepLocalTime) {
localAdjust = getDateOffset(this);
}
this._offset = input;
this._isUTC = true;
if (localAdjust != null) {
this.add(localAdjust, 'm');
}
if (offset !== input) {
if (!keepLocalTime || this._changeInProgress) {
addSubtract(
this,
createDuration(input - offset, 'm'),
1,
false
);
} else if (!this._changeInProgress) {
this._changeInProgress = true;
hooks.updateOffset(this, true);
this._changeInProgress = null;
}
}
return this;
} else {
return this._isUTC ? offset : getDateOffset(this);
}
}
function getSetZone(input, keepLocalTime) {
if (input != null) {
if (typeof input !== 'string') {
input = -input;
}
this.utcOffset(input, keepLocalTime);
return this;
} else {
return -this.utcOffset();
}
}
function setOffsetToUTC(keepLocalTime) {
return this.utcOffset(0, keepLocalTime);
}
function setOffsetToLocal(keepLocalTime) {
if (this._isUTC) {
this.utcOffset(0, keepLocalTime);
this._isUTC = false;
if (keepLocalTime) {
this.subtract(getDateOffset(this), 'm');
}
}
return this;
}
function setOffsetToParsedOffset() {
if (this._tzm != null) {
this.utcOffset(this._tzm, false, true);
} else if (typeof this._i === 'string') {
var tZone = offsetFromString$1(matchOffset$1, this._i);
if (tZone != null) {
this.utcOffset(tZone);
} else {
this.utcOffset(0, true);
}
}
return this;
}
function hasAlignedHourOffset(input) {
if (!this.isValid()) {
return false;
}
input = input ? createLocal(input).utcOffset() : 0;
return (this.utcOffset() - input) % 60 === 0;
}
function isDaylightSavingTime() {
return (
this.utcOffset() > this.clone().month(0).utcOffset() ||
this.utcOffset() > this.clone().month(5).utcOffset()
);
}
function isDaylightSavingTimeShifted() {
if (!isUndefined(this._isDSTShifted)) {
return this._isDSTShifted;
}
var c = {},
other;
copyConfig(c, this);
c = prepareConfig(c);
if (c._a) {
other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
this._isDSTShifted =
this.isValid() && compareArrays(c._a, other.toArray()) > 0;
} else {
this._isDSTShifted = false;
}
return this._isDSTShifted;
}
function isLocal() {
return this.isValid() ? !this._isUTC : false;
}
function isUtcOffset() {
return this.isValid() ? this._isUTC : false;
}
function isUtc() {
return this.isValid() ? this._isUTC && this._offset === 0 : false;
}
// ASP.NET json date format regex
var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
// and further modified to allow for strings containing both week and day
isoRegex =
/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
function createDuration(input, key) {
var duration = input,
// matching against regexp is expensive, do it on demand
match = null,
sign,
ret,
diffRes;
if (isDuration(input)) {
duration = {
ms: input._milliseconds,
d: input._days,
M: input._months,
};
} else if (isNumber(input) || !isNaN(+input)) {
duration = {};
if (key) {
duration[key] = +input;
} else {
duration.milliseconds = +input;
}
} else if ((match = aspNetRegex.exec(input))) {
sign = match[1] === '-' ? -1 : 1;
duration = {
y: 0,
d: toInt(match[DATE]) * sign,
h: toInt(match[HOUR]) * sign,
m: toInt(match[MINUTE]) * sign,
s: toInt(match[SECOND]) * sign,
ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
};
} else if ((match = isoRegex.exec(input))) {
sign = match[1] === '-' ? -1 : 1;
duration = {
y: parseIso(match[2], sign),
M: parseIso(match[3], sign),
w: parseIso(match[4], sign),
d: parseIso(match[5], sign),
h: parseIso(match[6], sign),
m: parseIso(match[7], sign),
s: parseIso(match[8], sign),
};
} else if (duration == null) {
// checks for null or undefined
duration = {};
} else if (
typeof duration === 'object' &&
('from' in duration || 'to' in duration)
) {
diffRes = momentsDifference(
createLocal(duration.from),
createLocal(duration.to)
);
duration = {};
duration.ms = diffRes.milliseconds;
duration.M = diffRes.months;
}
ret = new Duration(duration);
if (isDuration(input) && hasOwnProp(input, '_locale')) {
ret._locale = input._locale;
}
if (isDuration(input) && hasOwnProp(input, '_isValid')) {
ret._isValid = input._isValid;
}
return ret;
}
createDuration.fn = Duration.prototype;
createDuration.invalid = createInvalid;
function parseIso(inp, sign) {
// We'd normally use ~~inp for this, but unfortunately it also
// converts floats to ints.
// inp may be undefined, so careful calling replace on it.
var res = inp && parseFloat(inp.replace(',', '.'));
// apply sign while we're at it
return (isNaN(res) ? 0 : res) * sign;
}
function positiveMomentsDifference(base, other) {
var res = {};
res.months =
other.month() - base.month() + (other.year() - base.year()) * 12;
if (base.clone().add(res.months, 'M').isAfter(other)) {
--res.months;
}
res.milliseconds = +other - +base.clone().add(res.months, 'M');
return res;
}
function momentsDifference(base, other) {
var res;
if (!(base.isValid() && other.isValid())) {
return { milliseconds: 0, months: 0 };
}
other = cloneWithOffset(other, base);
if (base.isBefore(other)) {
res = positiveMomentsDifference(base, other);
} else {
res = positiveMomentsDifference(other, base);
res.milliseconds = -res.milliseconds;
res.months = -res.months;
}
return res;
}
// TODO: remove 'name' arg after deprecation is removed
function createAdder(direction, name) {
return function (val, period) {
var dur, tmp;
//invert the arguments, but complain about it
if (period !== null && !isNaN(+period)) {
deprecateSimple(
name,
'moment().' +
name +
'(period, number) is deprecated. Please use moment().' +
name +
'(number, period). ' +
'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
);
tmp = val;
val = period;
period = tmp;
}
dur = createDuration(val, period);
addSubtract(this, dur, direction);
return this;
};
}
function addSubtract(mom, duration, isAdding, updateOffset) {
var milliseconds = duration._milliseconds,
days = absRound(duration._days),
months = absRound(duration._months);
if (!mom.isValid()) {
// No op
return;
}
updateOffset = updateOffset == null ? true : updateOffset;
if (months) {
setMonth(mom, get$1(mom, 'Month') + months * isAdding);
}
if (days) {
set(mom, 'Date', get$1(mom, 'Date') + days * isAdding);
}
if (milliseconds) {
mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
}
if (updateOffset) {
hooks.updateOffset(mom, days || months);
}
}
var add = createAdder(1, 'add'),
subtract = createAdder(-1, 'subtract');
function isString(input) {
return typeof input === 'string' || input instanceof String;
}
// type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
function isMomentInput(input) {
return (
isMoment(input) ||
isDate(input) ||
isString(input) ||
isNumber(input) ||
isNumberOrStringArray(input) ||
isMomentInputObject(input) ||
input === null ||
input === undefined
);
}
function isMomentInputObject(input) {
var objectTest = isObject(input) && !isObjectEmpty(input),
propertyTest = false,
properties = [
'years',
'year',
'y',
'months',
'month',
'M',
'days',
'day',
'd',
'dates',
'date',
'D',
'hours',
'hour',
'h',
'minutes',
'minute',
'm',
'seconds',
'second',
's',
'milliseconds',
'millisecond',
'ms',
],
i,
property,
propertyLen = properties.length;
for (i = 0; i < propertyLen; i += 1) {
property = properties[i];
propertyTest = propertyTest || hasOwnProp(input, property);
}
return objectTest && propertyTest;
}
function isNumberOrStringArray(input) {
var arrayTest = isArray(input),
dataTypeTest = false;
if (arrayTest) {
dataTypeTest =
input.filter(function (item) {
return !isNumber(item) && isString(input);
}).length === 0;
}
return arrayTest && dataTypeTest;
}
function isCalendarSpec(input) {
var objectTest = isObject(input) && !isObjectEmpty(input),
propertyTest = false,
properties = [
'sameDay',
'nextDay',
'lastDay',
'nextWeek',
'lastWeek',
'sameElse',
],
i,
property;
for (i = 0; i < properties.length; i += 1) {
property = properties[i];
propertyTest = propertyTest || hasOwnProp(input, property);
}
return objectTest && propertyTest;
}
function getCalendarFormat(myMoment, now) {
var diff = myMoment.diff(now, 'days', true);
return diff < -6
? 'sameElse'
: diff < -1
? 'lastWeek'
: diff < 0
? 'lastDay'
: diff < 1
? 'sameDay'
: diff < 2
? 'nextDay'
: diff < 7
? 'nextWeek'
: 'sameElse';
}
function calendar(time, formats) {
// Support for single parameter, formats only overload to the calendar function
if (arguments.length === 1) {
if (!arguments[0]) {
time = undefined;
formats = undefined;
} else if (isMomentInput(arguments[0])) {
time = arguments[0];
formats = undefined;
} else if (isCalendarSpec(arguments[0])) {
formats = arguments[0];
time = undefined;
}
}
// We want to compare the start of today, vs this.
// Getting start-of-today depends on whether we're local/utc/offset or not.
var now = time || createLocal(),
sod = cloneWithOffset(now, this).startOf('day'),
format = hooks.calendarFormat(this, sod) || 'sameElse',
output =
formats &&
(isFunction(formats[format])
? formats[format].call(this, now)
: formats[format]);
return this.format(
output || this.localeData().calendar(format, this, createLocal(now))
);
}
function clone() {
return new Moment(this);
}
function isAfter(input, units) {
var localInput = isMoment(input) ? input : createLocal(input);
if (!(this.isValid() && localInput.isValid())) {
return false;
}
units = normalizeUnits(units) || 'millisecond';
if (units === 'millisecond') {
return this.valueOf() > localInput.valueOf();
} else {
return localInput.valueOf() < this.clone().startOf(units).valueOf();
}
}
function isBefore(input, units) {
var localInput = isMoment(input) ? input : createLocal(input);
if (!(this.isValid() && localInput.isValid())) {
return false;
}
units = normalizeUnits(units) || 'millisecond';
if (units === 'millisecond') {
return this.valueOf() < localInput.valueOf();
} else {
return this.clone().endOf(units).valueOf() < localInput.valueOf();
}
}
function isBetween(from, to, units, inclusivity) {
var localFrom = isMoment(from) ? from : createLocal(from),
localTo = isMoment(to) ? to : createLocal(to);
if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
return false;
}
inclusivity = inclusivity || '()';
return (
(inclusivity[0] === '('
? this.isAfter(localFrom, units)
: !this.isBefore(localFrom, units)) &&
(inclusivity[1] === ')'
? this.isBefore(localTo, units)
: !this.isAfter(localTo, units))
);
}
function isSame(input, units) {
var localInput = isMoment(input) ? input : createLocal(input),
inputMs;
if (!(this.isValid() && localInput.isValid())) {
return false;
}
units = normalizeUnits(units) || 'millisecond';
if (units === 'millisecond') {
return this.valueOf() === localInput.valueOf();
} else {
inputMs = localInput.valueOf();
return (
this.clone().startOf(units).valueOf() <= inputMs &&
inputMs <= this.clone().endOf(units).valueOf()
);
}
}
function isSameOrAfter(input, units) {
return this.isSame(input, units) || this.isAfter(input, units);
}
function isSameOrBefore(input, units) {
return this.isSame(input, units) || this.isBefore(input, units);
}
function diff(input, units, asFloat) {
var that, zoneDelta, output;
if (!this.isValid()) {
return NaN;
}
that = cloneWithOffset(input, this);
if (!that.isValid()) {
return NaN;
}
zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
units = normalizeUnits(units);
switch (units) {
case 'year':
output = monthDiff(this, that) / 12;
break;
case 'month':
output = monthDiff(this, that);
break;
case 'quarter':
output = monthDiff(this, that) / 3;
break;
case 'second':
output = (this - that) / 1e3;
break; // 1000
case 'minute':
output = (this - that) / 6e4;
break; // 1000 * 60
case 'hour':
output = (this - that) / 36e5;
break; // 1000 * 60 * 60
case 'day':
output = (this - that - zoneDelta) / 864e5;
break; // 1000 * 60 * 60 * 24, negate dst
case 'week':
output = (this - that - zoneDelta) / 6048e5;
break; // 1000 * 60 * 60 * 24 * 7, negate dst
default:
output = this - that;
}
return asFloat ? output : absFloor(output);
}
function monthDiff(a, b) {
if (a.date() < b.date()) {
// end-of-month calculations work correct when the start month has more
// days than the end month.
return -monthDiff(b, a);
}
// difference in months
var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
// b is in (anchor - 1 month, anchor + 1 month)
anchor = a.clone().add(wholeMonthDiff, 'months'),
anchor2,
adjust;
if (b - anchor < 0) {
anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
// linear across the month
adjust = (b - anchor) / (anchor - anchor2);
} else {
anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
// linear across the month
adjust = (b - anchor) / (anchor2 - anchor);
}
//check for negative zero, return zero if negative zero
return -(wholeMonthDiff + adjust) || 0;
}
hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
function toString() {
return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
}
function toISOString(keepOffset) {
if (!this.isValid()) {
return null;
}
var utc = keepOffset !== true,
m = utc ? this.clone().utc() : this;
if (m.year() < 0 || m.year() > 9999) {
return formatMoment(
m,
utc
? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
: 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
);
}
if (isFunction(Date.prototype.toISOString)) {
// native implementation is ~50x faster, use it when we can
if (utc) {
return this.toDate().toISOString();
} else {
return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
.toISOString()
.replace('Z', formatMoment(m, 'Z'));
}
}
return formatMoment(
m,
utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
);
}
/**
* Return a human readable representation of a moment that can
* also be evaluated to get a new moment which is the same
*
* @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
*/
function inspect() {
if (!this.isValid()) {
return 'moment.invalid(/* ' + this._i + ' */)';
}
var func = 'moment',
zone = '',
prefix,
year,
datetime,
suffix;
if (!this.isLocal()) {
func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
zone = 'Z';
}
prefix = '[' + func + '("]';
year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
datetime = '-MM-DD[T]HH:mm:ss.SSS';
suffix = zone + '[")]';
return this.format(prefix + year + datetime + suffix);
}
function format(inputString) {
if (!inputString) {
inputString = this.isUtc()
? hooks.defaultFormatUtc
: hooks.defaultFormat;
}
var output = formatMoment(this, inputString);
return this.localeData().postformat(output);
}
function from(time, withoutSuffix) {
if (
this.isValid() &&
((isMoment(time) && time.isValid()) || createLocal(time).isValid())
) {
return createDuration({ to: this, from: time })
.locale(this.locale())
.humanize(!withoutSuffix);
} else {
return this.localeData().invalidDate();
}
}
function fromNow(withoutSuffix) {
return this.from(createLocal(), withoutSuffix);
}
function to(time, withoutSuffix) {
if (
this.isValid() &&
((isMoment(time) && time.isValid()) || createLocal(time).isValid())
) {
return createDuration({ from: this, to: time })
.locale(this.locale())
.humanize(!withoutSuffix);
} else {
return this.localeData().invalidDate();
}
}
function toNow(withoutSuffix) {
return this.to(createLocal(), withoutSuffix);
}
// If passed a locale key, it will set the locale for this
// instance. Otherwise, it will return the locale configuration
// variables for this instance.
function locale$4(key) {
var newLocaleData;
if (key === undefined) {
return this._locale._abbr;
} else {
newLocaleData = getLocale(key);
if (newLocaleData != null) {
this._locale = newLocaleData;
}
return this;
}
}
var lang = deprecate(
'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
function (key) {
if (key === undefined) {
return this.localeData();
} else {
return this.locale(key);
}
}
);
function localeData$1() {
return this._locale;
}
var MS_PER_SECOND = 1000,
MS_PER_MINUTE = 60 * MS_PER_SECOND,
MS_PER_HOUR = 60 * MS_PER_MINUTE,
MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
// actual modulo - handles negative numbers (for dates before 1970):
function mod(dividend, divisor) {
return ((dividend % divisor) + divisor) % divisor;
}
function localStartOfDate(y, m, d) {
// the date constructor remaps years 0-99 to 1900-1999
if (y < 100 && y >= 0) {
// preserve leap years using a full 400 year cycle, then reset
return new Date(y + 400, m, d) - MS_PER_400_YEARS;
} else {
return new Date(y, m, d).valueOf();
}
}
function utcStartOfDate(y, m, d) {
// Date.UTC remaps years 0-99 to 1900-1999
if (y < 100 && y >= 0) {
// preserve leap years using a full 400 year cycle, then reset
return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
} else {
return Date.UTC(y, m, d);
}
}
function startOf(units) {
var time, startOfDate;
units = normalizeUnits(units);
if (units === undefined || units === 'millisecond' || !this.isValid()) {
return this;
}
startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
switch (units) {
case 'year':
time = startOfDate(this.year(), 0, 1);
break;
case 'quarter':
time = startOfDate(
this.year(),
this.month() - (this.month() % 3),
1
);
break;
case 'month':
time = startOfDate(this.year(), this.month(), 1);
break;
case 'week':
time = startOfDate(
this.year(),
this.month(),
this.date() - this.weekday()
);
break;
case 'isoWeek':
time = startOfDate(
this.year(),
this.month(),
this.date() - (this.isoWeekday() - 1)
);
break;
case 'day':
case 'date':
time = startOfDate(this.year(), this.month(), this.date());
break;
case 'hour':
time = this._d.valueOf();
time -= mod(
time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
MS_PER_HOUR
);
break;
case 'minute':
time = this._d.valueOf();
time -= mod(time, MS_PER_MINUTE);
break;
case 'second':
time = this._d.valueOf();
time -= mod(time, MS_PER_SECOND);
break;
}
this._d.setTime(time);
hooks.updateOffset(this, true);
return this;
}
function endOf(units) {
var time, startOfDate;
units = normalizeUnits(units);
if (units === undefined || units === 'millisecond' || !this.isValid()) {
return this;
}
startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
switch (units) {
case 'year':
time = startOfDate(this.year() + 1, 0, 1) - 1;
break;
case 'quarter':
time =
startOfDate(
this.year(),
this.month() - (this.month() % 3) + 3,
1
) - 1;
break;
case 'month':
time = startOfDate(this.year(), this.month() + 1, 1) - 1;
break;
case 'week':
time =
startOfDate(
this.year(),
this.month(),
this.date() - this.weekday() + 7
) - 1;
break;
case 'isoWeek':
time =
startOfDate(
this.year(),
this.month(),
this.date() - (this.isoWeekday() - 1) + 7
) - 1;
break;
case 'day':
case 'date':
time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
break;
case 'hour':
time = this._d.valueOf();
time +=
MS_PER_HOUR -
mod(
time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
MS_PER_HOUR
) -
1;
break;
case 'minute':
time = this._d.valueOf();
time += MS_PER_MINUTE - mod(time, MS_PER_MINUTE) - 1;
break;
case 'second':
time = this._d.valueOf();
time += MS_PER_SECOND - mod(time, MS_PER_SECOND) - 1;
break;
}
this._d.setTime(time);
hooks.updateOffset(this, true);
return this;
}
function valueOf() {
return this._d.valueOf() - (this._offset || 0) * 60000;
}
function unix() {
return Math.floor(this.valueOf() / 1000);
}
function toDate() {
return new Date(this.valueOf());
}
function toArray$2() {
var m = this;
return [
m.year(),
m.month(),
m.date(),
m.hour(),
m.minute(),
m.second(),
m.millisecond(),
];
}
function toObject() {
var m = this;
return {
years: m.year(),
months: m.month(),
date: m.date(),
hours: m.hours(),
minutes: m.minutes(),
seconds: m.seconds(),
milliseconds: m.milliseconds(),
};
}
function toJSON() {
// new Date(NaN).toJSON() === null
return this.isValid() ? this.toISOString() : null;
}
function isValid() {
return isValid$1(this);
}
function parsingFlags() {
return extend({}, getParsingFlags(this));
}
function invalidAt() {
return getParsingFlags(this).overflow;
}
function creationData() {
return {
input: this._i,
format: this._f,
locale: this._locale,
isUTC: this._isUTC,
strict: this._strict,
};
}
addFormatToken('N', 0, 0, 'eraAbbr');
addFormatToken('NN', 0, 0, 'eraAbbr');
addFormatToken('NNN', 0, 0, 'eraAbbr');
addFormatToken('NNNN', 0, 0, 'eraName');
addFormatToken('NNNNN', 0, 0, 'eraNarrow');
addFormatToken('y', ['y', 1], 'yo', 'eraYear');
addFormatToken('y', ['yy', 2], 0, 'eraYear');
addFormatToken('y', ['yyy', 3], 0, 'eraYear');
addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
addRegexToken('N', matchEraAbbr);
addRegexToken('NN', matchEraAbbr);
addRegexToken('NNN', matchEraAbbr);
addRegexToken('NNNN', matchEraName);
addRegexToken('NNNNN', matchEraNarrow);
addParseToken(
['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],
function (input, array, config, token) {
var era = config._locale.erasParse(input, token, config._strict);
if (era) {
getParsingFlags(config).era = era;
} else {
getParsingFlags(config).invalidEra = input;
}
}
);
addRegexToken('y', matchUnsigned);
addRegexToken('yy', matchUnsigned);
addRegexToken('yyy', matchUnsigned);
addRegexToken('yyyy', matchUnsigned);
addRegexToken('yo', matchEraYearOrdinal);
addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
addParseToken(['yo'], function (input, array, config, token) {
var match;
if (config._locale._eraYearOrdinalRegex) {
match = input.match(config._locale._eraYearOrdinalRegex);
}
if (config._locale.eraYearOrdinalParse) {
array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
} else {
array[YEAR] = parseInt(input, 10);
}
});
function getEraName() {
var i,
l,
val,
eras = this.localeData().eras();
for (i = 0, l = eras.length; i < l; ++i) {
// truncate time
val = this.clone().startOf('day').valueOf();
if (eras[i].since <= val && val <= eras[i].until) {
return eras[i].name;
}
if (eras[i].until <= val && val <= eras[i].since) {
return eras[i].name;
}
}
return '';
}
function getEraNarrow() {
var i,
l,
val,
eras = this.localeData().eras();
for (i = 0, l = eras.length; i < l; ++i) {
// truncate time
val = this.clone().startOf('day').valueOf();
if (eras[i].since <= val && val <= eras[i].until) {
return eras[i].narrow;
}
if (eras[i].until <= val && val <= eras[i].since) {
return eras[i].narrow;
}
}
return '';
}
function getEraAbbr() {
var i,
l,
val,
eras = this.localeData().eras();
for (i = 0, l = eras.length; i < l; ++i) {
// truncate time
val = this.clone().startOf('day').valueOf();
if (eras[i].since <= val && val <= eras[i].until) {
return eras[i].abbr;
}
if (eras[i].until <= val && val <= eras[i].since) {
return eras[i].abbr;
}
}
return '';
}
function getEraYear() {
var i,
l,
dir,
val,
eras = this.localeData().eras();
for (i = 0, l = eras.length; i < l; ++i) {
dir = eras[i].since <= eras[i].until ? 1 : -1;
// truncate time
val = this.clone().startOf('day').valueOf();
if (
(eras[i].since <= val && val <= eras[i].until) ||
(eras[i].until <= val && val <= eras[i].since)
) {
return (
(this.year() - hooks(eras[i].since).year()) * dir +
eras[i].offset
);
}
}
return this.year();
}
function matchEraAbbr(isStrict, locale) {
return locale.erasAbbrRegex(isStrict);
}
function matchEraName(isStrict, locale) {
return locale.erasNameRegex(isStrict);
}
function matchEraNarrow(isStrict, locale) {
return locale.erasNarrowRegex(isStrict);
}
function matchEraYearOrdinal(isStrict, locale) {
return locale._eraYearOrdinalRegex || matchUnsigned;
}
// FORMATTING
addFormatToken(0, ['gg', 2], 0, function () {
return this.weekYear() % 100;
});
addFormatToken(0, ['GG', 2], 0, function () {
return this.isoWeekYear() % 100;
});
function addWeekYearFormatToken(token, getter) {
addFormatToken(0, [token, token.length], 0, getter);
}
addWeekYearFormatToken('gggg', 'weekYear');
addWeekYearFormatToken('ggggg', 'weekYear');
addWeekYearFormatToken('GGGG', 'isoWeekYear');
addWeekYearFormatToken('GGGGG', 'isoWeekYear');
// ALIASES
// PARSING
addRegexToken('G', matchSigned$1);
addRegexToken('g', matchSigned$1);
addRegexToken('GG', match1to2$1, match2$1);
addRegexToken('gg', match1to2$1, match2$1);
addRegexToken('GGGG', match1to4, match4$1);
addRegexToken('gggg', match1to4, match4$1);
addRegexToken('GGGGG', match1to6, match6);
addRegexToken('ggggg', match1to6, match6);
addWeekParseToken(
['gggg', 'ggggg', 'GGGG', 'GGGGG'],
function (input, week, config, token) {
week[token.substr(0, 2)] = toInt(input);
}
);
addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
week[token] = hooks.parseTwoDigitYear(input);
});
// MOMENTS
function getSetWeekYear(input) {
return getSetWeekYearHelper.call(
this,
input,
this.week(),
this.weekday() + this.localeData()._week.dow,
this.localeData()._week.dow,
this.localeData()._week.doy
);
}
function getSetISOWeekYear(input) {
return getSetWeekYearHelper.call(
this,
input,
this.isoWeek(),
this.isoWeekday(),
1,
4
);
}
function getISOWeeksInYear() {
return weeksInYear(this.year(), 1, 4);
}
function getISOWeeksInISOWeekYear() {
return weeksInYear(this.isoWeekYear(), 1, 4);
}
function getWeeksInYear() {
var weekInfo = this.localeData()._week;
return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
}
function getWeeksInWeekYear() {
var weekInfo = this.localeData()._week;
return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
}
function getSetWeekYearHelper(input, week, weekday, dow, doy) {
var weeksTarget;
if (input == null) {
return weekOfYear$1(this, dow, doy).year;
} else {
weeksTarget = weeksInYear(input, dow, doy);
if (week > weeksTarget) {
week = weeksTarget;
}
return setWeekAll.call(this, input, week, weekday, dow, doy);
}
}
function setWeekAll(weekYear, week, weekday, dow, doy) {
var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
this.year(date.getUTCFullYear());
this.month(date.getUTCMonth());
this.date(date.getUTCDate());
return this;
}
// FORMATTING
addFormatToken('Q', 0, 'Qo', 'quarter');
// PARSING
addRegexToken('Q', match1$1);
addParseToken('Q', function (input, array) {
array[MONTH] = (toInt(input) - 1) * 3;
});
// MOMENTS
function getSetQuarter(input) {
return input == null
? Math.ceil((this.month() + 1) / 3)
: this.month((input - 1) * 3 + (this.month() % 3));
}
// FORMATTING
addFormatToken('D', ['DD', 2], 'Do', 'date');
// PARSING
addRegexToken('D', match1to2$1, match1to2NoLeadingZero);
addRegexToken('DD', match1to2$1, match2$1);
addRegexToken('Do', function (isStrict, locale) {
// TODO: Remove "ordinalParse" fallback in next major release.
return isStrict
? locale._dayOfMonthOrdinalParse || locale._ordinalParse
: locale._dayOfMonthOrdinalParseLenient;
});
addParseToken(['D', 'DD'], DATE);
addParseToken('Do', function (input, array) {
array[DATE] = toInt(input.match(match1to2$1)[0]);
});
// MOMENTS
var getSetDayOfMonth = makeGetSet('Date', true);
// FORMATTING
addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
// PARSING
addRegexToken('DDD', match1to3);
addRegexToken('DDDD', match3$1);
addParseToken(['DDD', 'DDDD'], function (input, array, config) {
config._dayOfYear = toInt(input);
});
// HELPERS
// MOMENTS
function getSetDayOfYear(input) {
var dayOfYear =
Math.round(
(this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
) + 1;
return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
}
// FORMATTING
addFormatToken('m', ['mm', 2], 0, 'minute');
// PARSING
addRegexToken('m', match1to2$1, match1to2HasZero);
addRegexToken('mm', match1to2$1, match2$1);
addParseToken(['m', 'mm'], MINUTE);
// MOMENTS
var getSetMinute = makeGetSet('Minutes', false);
// FORMATTING
addFormatToken('s', ['ss', 2], 0, 'second');
// PARSING
addRegexToken('s', match1to2$1, match1to2HasZero);
addRegexToken('ss', match1to2$1, match2$1);
addParseToken(['s', 'ss'], SECOND);
// MOMENTS
var getSetSecond = makeGetSet('Seconds', false);
// FORMATTING
addFormatToken('S', 0, 0, function () {
return ~~(this.millisecond() / 100);
});
addFormatToken(0, ['SS', 2], 0, function () {
return ~~(this.millisecond() / 10);
});
addFormatToken(0, ['SSS', 3], 0, 'millisecond');
addFormatToken(0, ['SSSS', 4], 0, function () {
return this.millisecond() * 10;
});
addFormatToken(0, ['SSSSS', 5], 0, function () {
return this.millisecond() * 100;
});
addFormatToken(0, ['SSSSSS', 6], 0, function () {
return this.millisecond() * 1000;
});
addFormatToken(0, ['SSSSSSS', 7], 0, function () {
return this.millisecond() * 10000;
});
addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
return this.millisecond() * 100000;
});
addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
return this.millisecond() * 1000000;
});
// PARSING
addRegexToken('S', match1to3, match1$1);
addRegexToken('SS', match1to3, match2$1);
addRegexToken('SSS', match1to3, match3$1);
var token, getSetMillisecond;
for (token = 'SSSS'; token.length <= 9; token += 'S') {
addRegexToken(token, matchUnsigned);
}
function parseMs(input, array) {
array[MILLISECOND] = toInt(('0.' + input) * 1000);
}
for (token = 'S'; token.length <= 9; token += 'S') {
addParseToken(token, parseMs);
}
getSetMillisecond = makeGetSet('Milliseconds', false);
// FORMATTING
addFormatToken('z', 0, 0, 'zoneAbbr');
addFormatToken('zz', 0, 0, 'zoneName');
// MOMENTS
function getZoneAbbr() {
return this._isUTC ? 'UTC' : '';
}
function getZoneName() {
return this._isUTC ? 'Coordinated Universal Time' : '';
}
var proto = Moment.prototype;
proto.add = add;
proto.calendar = calendar;
proto.clone = clone;
proto.diff = diff;
proto.endOf = endOf;
proto.format = format;
proto.from = from;
proto.fromNow = fromNow;
proto.to = to;
proto.toNow = toNow;
proto.get = stringGet;
proto.invalidAt = invalidAt;
proto.isAfter = isAfter;
proto.isBefore = isBefore;
proto.isBetween = isBetween;
proto.isSame = isSame;
proto.isSameOrAfter = isSameOrAfter;
proto.isSameOrBefore = isSameOrBefore;
proto.isValid = isValid;
proto.lang = lang;
proto.locale = locale$4;
proto.localeData = localeData$1;
proto.max = prototypeMax;
proto.min = prototypeMin;
proto.parsingFlags = parsingFlags;
proto.set = stringSet;
proto.startOf = startOf;
proto.subtract = subtract;
proto.toArray = toArray$2;
proto.toObject = toObject;
proto.toDate = toDate;
proto.toISOString = toISOString;
proto.inspect = inspect;
if (typeof Symbol !== 'undefined' && Symbol.for != null) {
proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
return 'Moment<' + this.format() + '>';
};
}
proto.toJSON = toJSON;
proto.toString = toString;
proto.unix = unix;
proto.valueOf = valueOf;
proto.creationData = creationData;
proto.eraName = getEraName;
proto.eraNarrow = getEraNarrow;
proto.eraAbbr = getEraAbbr;
proto.eraYear = getEraYear;
proto.year = getSetYear;
proto.isLeapYear = getIsLeapYear;
proto.weekYear = getSetWeekYear;
proto.isoWeekYear = getSetISOWeekYear;
proto.quarter = proto.quarters = getSetQuarter;
proto.month = getSetMonth;
proto.daysInMonth = getDaysInMonth;
proto.week = proto.weeks = getSetWeek;
proto.isoWeek = proto.isoWeeks = getSetISOWeek;
proto.weeksInYear = getWeeksInYear;
proto.weeksInWeekYear = getWeeksInWeekYear;
proto.isoWeeksInYear = getISOWeeksInYear;
proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
proto.date = getSetDayOfMonth;
proto.day = proto.days = getSetDayOfWeek;
proto.weekday = getSetLocaleDayOfWeek;
proto.isoWeekday = getSetISODayOfWeek;
proto.dayOfYear = getSetDayOfYear;
proto.hour = proto.hours = getSetHour;
proto.minute = proto.minutes = getSetMinute;
proto.second = proto.seconds = getSetSecond;
proto.millisecond = proto.milliseconds = getSetMillisecond;
proto.utcOffset = getSetOffset;
proto.utc = setOffsetToUTC;
proto.local = setOffsetToLocal;
proto.parseZone = setOffsetToParsedOffset;
proto.hasAlignedHourOffset = hasAlignedHourOffset;
proto.isDST = isDaylightSavingTime;
proto.isLocal = isLocal;
proto.isUtcOffset = isUtcOffset;
proto.isUtc = isUtc;
proto.isUTC = isUtc;
proto.zoneAbbr = getZoneAbbr;
proto.zoneName = getZoneName;
proto.dates = deprecate(
'dates accessor is deprecated. Use date instead.',
getSetDayOfMonth
);
proto.months = deprecate(
'months accessor is deprecated. Use month instead',
getSetMonth
);
proto.years = deprecate(
'years accessor is deprecated. Use year instead',
getSetYear
);
proto.zone = deprecate(
'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
getSetZone
);
proto.isDSTShifted = deprecate(
'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
isDaylightSavingTimeShifted
);
function createUnix(input) {
return createLocal(input * 1000);
}
function createInZone() {
return createLocal.apply(null, arguments).parseZone();
}
function get(format, index, field, setter) {
var locale = getLocale(),
utc = createUTC().set(setter, index);
return locale[field](utc, format);
}
function listMonthsImpl(format, index, field) {
if (isNumber(format)) {
index = format;
format = undefined;
}
format = format || '';
if (index != null) {
return get(format, index, field, 'month');
}
var i,
out = [];
for (i = 0; i < 12; i++) {
out[i] = get(format, i, field, 'month');
}
return out;
}
// ()
// (5)
// (fmt, 5)
// (fmt)
// (true)
// (true, 5)
// (true, fmt, 5)
// (true, fmt)
function listWeekdaysImpl(localeSorted, format, index, field) {
if (typeof localeSorted === 'boolean') {
if (isNumber(format)) {
index = format;
format = undefined;
}
format = format || '';
} else {
format = localeSorted;
index = format;
localeSorted = false;
if (isNumber(format)) {
index = format;
format = undefined;
}
format = format || '';
}
var locale = getLocale(),
shift = localeSorted ? locale._week.dow : 0,
i,
out = [];
if (index != null) {
return get(format, (index + shift) % 7, field, 'day');
}
for (i = 0; i < 7; i++) {
out[i] = get(format, (i + shift) % 7, field, 'day');
}
return out;
}
function listMonths(format, index) {
return listMonthsImpl(format, index, 'months');
}
function listMonthsShort(format, index) {
return listMonthsImpl(format, index, 'monthsShort');
}
function listWeekdays(localeSorted, format, index) {
return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
}
function listWeekdaysShort(localeSorted, format, index) {
return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
}
function listWeekdaysMin(localeSorted, format, index) {
return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
}
// Side effect imports
hooks.lang = deprecate(
'moment.lang is deprecated. Use moment.locale instead.',
getSetGlobalLocale
);
hooks.langData = deprecate(
'moment.langData is deprecated. Use moment.localeData instead.',
getLocale
);
var round = Math.round,
thresholds = {
ss: 44, // a few seconds to seconds
s: 45, // seconds to minute
m: 45, // minutes to hour
h: 22, // hours to day
d: 26, // days to month/week
w: null, // weeks to month
M: 11, // months to year
};
// This function allows you to set the rounding function for relative time strings
function getSetRelativeTimeRounding(roundingFunction) {
if (roundingFunction === undefined) {
return round;
}
if (typeof roundingFunction === 'function') {
round = roundingFunction;
return true;
}
return false;
}
// This function allows you to set a threshold for relative time strings
function getSetRelativeTimeThreshold(threshold, limit) {
if (thresholds[threshold] === undefined) {
return false;
}
if (limit === undefined) {
return thresholds[threshold];
}
thresholds[threshold] = limit;
if (threshold === 's') {
thresholds.ss = limit - 1;
}
return true;
}
//! moment.js
//! version : 2.30.1
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT
//! momentjs.com
hooks.version = '2.30.1';
setHookCallback(createLocal);
hooks.fn = proto;
hooks.min = min;
hooks.max = max;
hooks.now = now;
hooks.utc = createUTC;
hooks.unix = createUnix;
hooks.months = listMonths;
hooks.isDate = isDate;
hooks.locale = getSetGlobalLocale;
hooks.invalid = createInvalid$1;
hooks.duration = createDuration;
hooks.isMoment = isMoment;
hooks.weekdays = listWeekdays;
hooks.parseZone = createInZone;
hooks.localeData = getLocale;
hooks.isDuration = isDuration;
hooks.monthsShort = listMonthsShort;
hooks.weekdaysMin = listWeekdaysMin;
hooks.defineLocale = defineLocale;
hooks.updateLocale = updateLocale;
hooks.locales = listLocales;
hooks.weekdaysShort = listWeekdaysShort;
hooks.normalizeUnits = normalizeUnits;
hooks.relativeTimeRounding = getSetRelativeTimeRounding;
hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
hooks.calendarFormat = getCalendarFormat;
hooks.prototype = proto;
// currently HTML5 input type only supports 24-hour formats
hooks.HTML5_FMT = {
DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
DATE: 'YYYY-MM-DD', // <input type="date" />
TIME: 'HH:mm', // <input type="time" />
TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
WEEK: 'GGGG-[W]WW', // <input type="week" />
MONTH: 'YYYY-MM', // <input type="month" />
};
//! moment.js locale configuration
//! locale : Persian [fa]
//! author : Ebrahim Byagowi : https://github.com/ebraminio
var symbolMap = {
1: '۱',
2: '۲',
3: '۳',
4: '۴',
5: '۵',
6: '۶',
7: '۷',
8: '۸',
9: '۹',
0: '۰',
},
numberMap = {
'۱': '1',
'۲': '2',
'۳': '3',
'۴': '4',
'۵': '5',
'۶': '6',
'۷': '7',
'۸': '8',
'۹': '9',
'۰': '0',
};
const fa = hooks.defineLocale('fa', {
months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
'_'
),
monthsShort:
'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
'_'
),
weekdays:
'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
'_'
),
weekdaysShort:
'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
'_'
),
weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),
weekdaysParseExact: true,
longDateFormat: {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY HH:mm',
LLLL: 'dddd, D MMMM YYYY HH:mm',
},
meridiemParse: /قبل از ظهر|بعد از ظهر/,
isPM: function (input) {
return /بعد از ظهر/.test(input);
},
meridiem: function (hour, minute, isLower) {
if (hour < 12) {
return 'قبل از ظهر';
} else {
return 'بعد از ظهر';
}
},
calendar: {
sameDay: '[امروز ساعت] LT',
nextDay: '[فردا ساعت] LT',
nextWeek: 'dddd [ساعت] LT',
lastDay: '[دیروز ساعت] LT',
lastWeek: 'dddd [پیش] [ساعت] LT',
sameElse: 'L',
},
relativeTime: {
future: 'در %s',
past: '%s پیش',
s: 'چند ثانیه',
ss: '%d ثانیه',
m: 'یک دقیقه',
mm: '%d دقیقه',
h: 'یک ساعت',
hh: '%d ساعت',
d: 'یک روز',
dd: '%d روز',
M: 'یک ماه',
MM: '%d ماه',
y: 'یک سال',
yy: '%d سال',
},
preparse: function (string) {
return string
.replace(/[۰-۹]/g, function (match) {
return numberMap[match];
})
.replace(/،/g, ',');
},
postformat: function (string) {
return string
.replace(/\d/g, function (match) {
return symbolMap[match];
})
.replace(/,/g, '،');
},
dayOfMonthOrdinalParse: /\d{1,2}م/,
ordinal: '%dم',
week: {
dow: 6, // Saturday is the first day of the week.
doy: 12, // The week that contains Jan 12th is the first week of the year.
},
});
const weekday = (function (o, c) {
var proto = c.prototype;
proto.weekday = function (input) {
var weekStart = this.$locale().weekStart || 0;
var $W = this.$W;
var weekday = ($W < weekStart ? $W + 7 : $W) - weekStart;
if (this.$utils().u(input)) {
return weekday;
}
return this.subtract(weekday, 'day').add(input, 'day');
};
});
// eslint-disable-next-line import/prefer-default-export
var t = function t(format) {
return format.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, function (_, a, b) {
return a || b.slice(1);
});
};
var englishFormats = {
LTS: 'h:mm:ss A',
LT: 'h:mm A',
L: 'MM/DD/YYYY',
LL: 'MMMM D, YYYY',
LLL: 'MMMM D, YYYY h:mm A',
LLLL: 'dddd, MMMM D, YYYY h:mm A'
};
var u = function u(formatStr, formats) {
return formatStr.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, function (_, a, b) {
var B = b && b.toUpperCase();
return a || formats[b] || englishFormats[b] || t(formats[B]);
});
};
const localeData = (function (o, c, dayjs) {
// locale needed later
var proto = c.prototype;
var getLocalePart = function getLocalePart(part) {
return part && (part.indexOf ? part : part.s);
};
var getShort = function getShort(ins, target, full, num, localeOrder) {
var locale = ins.name ? ins : ins.$locale();
var targetLocale = getLocalePart(locale[target]);
var fullLocale = getLocalePart(locale[full]);
var result = targetLocale || fullLocale.map(function (f) {
return f.slice(0, num);
});
if (!localeOrder) return result;
var weekStart = locale.weekStart;
return result.map(function (_, index) {
return result[(index + (weekStart || 0)) % 7];
});
};
var getDayjsLocaleObject = function getDayjsLocaleObject() {
return dayjs.Ls[dayjs.locale()];
};
var getLongDateFormat = function getLongDateFormat(l, format) {
return l.formats[format] || t(l.formats[format.toUpperCase()]);
};
var localeData = function localeData() {
var _this = this;
return {
months: function months(instance) {
return instance ? instance.format('MMMM') : getShort(_this, 'months');
},
monthsShort: function monthsShort(instance) {
return instance ? instance.format('MMM') : getShort(_this, 'monthsShort', 'months', 3);
},
firstDayOfWeek: function firstDayOfWeek() {
return _this.$locale().weekStart || 0;
},
weekdays: function weekdays(instance) {
return instance ? instance.format('dddd') : getShort(_this, 'weekdays');
},
weekdaysMin: function weekdaysMin(instance) {
return instance ? instance.format('dd') : getShort(_this, 'weekdaysMin', 'weekdays', 2);
},
weekdaysShort: function weekdaysShort(instance) {
return instance ? instance.format('ddd') : getShort(_this, 'weekdaysShort', 'weekdays', 3);
},
longDateFormat: function longDateFormat(format) {
return getLongDateFormat(_this.$locale(), format);
},
meridiem: this.$locale().meridiem,
ordinal: this.$locale().ordinal
};
};
proto.localeData = function () {
return localeData.bind(this)();
};
dayjs.localeData = function () {
var localeObject = getDayjsLocaleObject();
return {
firstDayOfWeek: function firstDayOfWeek() {
return localeObject.weekStart || 0;
},
weekdays: function weekdays() {
return dayjs.weekdays();
},
weekdaysShort: function weekdaysShort() {
return dayjs.weekdaysShort();
},
weekdaysMin: function weekdaysMin() {
return dayjs.weekdaysMin();
},
months: function months() {
return dayjs.months();
},
monthsShort: function monthsShort() {
return dayjs.monthsShort();
},
longDateFormat: function longDateFormat(format) {
return getLongDateFormat(localeObject, format);
},
meridiem: localeObject.meridiem,
ordinal: localeObject.ordinal
};
};
dayjs.months = function () {
return getShort(getDayjsLocaleObject(), 'months');
};
dayjs.monthsShort = function () {
return getShort(getDayjsLocaleObject(), 'monthsShort', 'months', 3);
};
dayjs.weekdays = function (localeOrder) {
return getShort(getDayjsLocaleObject(), 'weekdays', null, null, localeOrder);
};
dayjs.weekdaysShort = function (localeOrder) {
return getShort(getDayjsLocaleObject(), 'weekdaysShort', 'weekdays', 3, localeOrder);
};
dayjs.weekdaysMin = function (localeOrder) {
return getShort(getDayjsLocaleObject(), 'weekdaysMin', 'weekdays', 2, localeOrder);
};
});
const weekOfYear = (function (o, c, d) {
var proto = c.prototype;
proto.week = function (week) {
if (week === void 0) {
week = null;
}
if (week !== null) {
return this.add((week - this.week()) * 7, D);
}
var yearStart = this.$locale().yearStart || 1;
if (this.month() === 11 && this.date() > 25) {
// d(this) is for badMutable
var nextYearStartDay = d(this).startOf(Y).add(1, Y).date(yearStart);
var thisEndOfWeek = d(this).endOf(W);
if (nextYearStartDay.isBefore(thisEndOfWeek)) {
return 1;
}
}
var yearStartDay = d(this).startOf(Y).date(yearStart);
var yearStartWeek = yearStartDay.startOf(W).subtract(1, MS);
var diffInWeek = this.diff(yearStartWeek, W, true);
if (diffInWeek < 0) {
return d(this).startOf('week').week();
}
return Math.ceil(diffInWeek);
};
proto.weeks = function (week) {
if (week === void 0) {
week = null;
}
return this.week(week);
};
});
const weekYear = (function (o, c) {
var proto = c.prototype;
proto.weekYear = function () {
var month = this.month();
var weekOfYear = this.week();
var year = this.year();
if (weekOfYear === 1 && month === 11) {
return year + 1;
}
if (month === 0 && weekOfYear >= 52) {
return year - 1;
}
return year;
};
});
const quarterOfYear = (function (o, c) {
var proto = c.prototype;
proto.quarter = function (quarter) {
if (!this.$utils().u(quarter)) {
return this.month(this.month() % 3 + (quarter - 1) * 3);
}
return Math.ceil((this.month() + 1) / 3);
};
var oldAdd = proto.add;
proto.add = function (number, units) {
number = Number(number); // eslint-disable-line no-param-reassign
var unit = this.$utils().p(units);
if (unit === Q) {
return this.add(number * 3, M);
}
return oldAdd.bind(this)(number, units);
};
var oldStartOf = proto.startOf;
proto.startOf = function (units, startOf) {
var utils = this.$utils();
var isStartOf = !utils.u(startOf) ? startOf : true;
var unit = utils.p(units);
if (unit === Q) {
var quarter = this.quarter() - 1;
return isStartOf ? this.month(quarter * 3).startOf(M).startOf(D) : this.month(quarter * 3 + 2).endOf(M).endOf(D);
}
return oldStartOf.bind(this)(units, startOf);
};
});
const advancedFormat = (function (o, c) {
// locale needed later
var proto = c.prototype;
var oldFormat = proto.format;
proto.format = function (formatStr) {
var _this = this;
var locale = this.$locale();
if (!this.isValid()) {
return oldFormat.bind(this)(formatStr);
}
var utils = this.$utils();
var str = formatStr || FORMAT_DEFAULT;
var result = str.replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, function (match) {
switch (match) {
case 'Q':
return Math.ceil((_this.$M + 1) / 3);
case 'Do':
return locale.ordinal(_this.$D);
case 'gggg':
return _this.weekYear();
case 'GGGG':
return _this.isoWeekYear();
case 'wo':
return locale.ordinal(_this.week(), 'W');
// W for week
case 'w':
case 'ww':
return utils.s(_this.week(), match === 'w' ? 1 : 2, '0');
case 'W':
case 'WW':
return utils.s(_this.isoWeek(), match === 'W' ? 1 : 2, '0');
case 'k':
case 'kk':
return utils.s(String(_this.$H === 0 ? 24 : _this.$H), match === 'k' ? 1 : 2, '0');
case 'X':
return Math.floor(_this.$d.getTime() / 1000);
case 'x':
return _this.$d.getTime();
case 'z':
return "[" + _this.offsetName() + "]";
case 'zzz':
return "[" + _this.offsetName('long') + "]";
default:
return match;
}
});
return oldFormat.bind(this)(result);
};
});
var formattingTokens = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g;
var match1 = /\d/; // 0 - 9
var match2 = /\d\d/; // 00 - 99
var match3 = /\d{3}/; // 000 - 999
var match4 = /\d{4}/; // 0000 - 9999
var match1to2 = /\d\d?/; // 0 - 99
var matchSigned = /[+-]?\d+/; // -inf - inf
var matchOffset = /[+-]\d\d:?(\d\d)?|Z/; // +00:00 -00:00 +0000 or -0000 +00 or Z
var matchWord = /\d*[^-_:/,()\s\d]+/; // Word
var locale$3 = {};
var parseTwoDigitYear = function parseTwoDigitYear(input) {
input = +input;
return input + (input > 68 ? 1900 : 2000);
};
function offsetFromString(string) {
if (!string) return 0;
if (string === 'Z') return 0;
var parts = string.match(/([+-]|\d\d)/g);
var minutes = +(parts[1] * 60) + (+parts[2] || 0);
return minutes === 0 ? 0 : parts[0] === '+' ? -minutes : minutes; // eslint-disable-line no-nested-ternary
}
var addInput = function addInput(property) {
return function (input) {
this[property] = +input;
};
};
var zoneExpressions = [matchOffset, function (input) {
var zone = this.zone || (this.zone = {});
zone.offset = offsetFromString(input);
}];
var getLocalePart = function getLocalePart(name) {
var part = locale$3[name];
return part && (part.indexOf ? part : part.s.concat(part.f));
};
var meridiemMatch = function meridiemMatch(input, isLowerCase) {
var isAfternoon;
var _locale = locale$3,
meridiem = _locale.meridiem;
if (!meridiem) {
isAfternoon = input === (isLowerCase ? 'pm' : 'PM');
} else {
for (var i = 1; i <= 24; i += 1) {
// todo: fix input === meridiem(i, 0, isLowerCase)
if (input.indexOf(meridiem(i, 0, isLowerCase)) > -1) {
isAfternoon = i > 12;
break;
}
}
}
return isAfternoon;
};
var expressions = {
A: [matchWord, function (input) {
this.afternoon = meridiemMatch(input, false);
}],
a: [matchWord, function (input) {
this.afternoon = meridiemMatch(input, true);
}],
Q: [match1, function (input) {
this.month = (input - 1) * 3 + 1;
}],
S: [match1, function (input) {
this.milliseconds = +input * 100;
}],
SS: [match2, function (input) {
this.milliseconds = +input * 10;
}],
SSS: [match3, function (input) {
this.milliseconds = +input;
}],
s: [match1to2, addInput('seconds')],
ss: [match1to2, addInput('seconds')],
m: [match1to2, addInput('minutes')],
mm: [match1to2, addInput('minutes')],
H: [match1to2, addInput('hours')],
h: [match1to2, addInput('hours')],
HH: [match1to2, addInput('hours')],
hh: [match1to2, addInput('hours')],
D: [match1to2, addInput('day')],
DD: [match2, addInput('day')],
Do: [matchWord, function (input) {
var _locale2 = locale$3,
ordinal = _locale2.ordinal;
var _input$match = input.match(/\d+/);
this.day = _input$match[0];
if (!ordinal) return;
for (var i = 1; i <= 31; i += 1) {
if (ordinal(i).replace(/\[|\]/g, '') === input) {
this.day = i;
}
}
}],
w: [match1to2, addInput('week')],
ww: [match2, addInput('week')],
M: [match1to2, addInput('month')],
MM: [match2, addInput('month')],
MMM: [matchWord, function (input) {
var months = getLocalePart('months');
var monthsShort = getLocalePart('monthsShort');
var matchIndex = (monthsShort || months.map(function (_) {
return _.slice(0, 3);
})).indexOf(input) + 1;
if (matchIndex < 1) {
throw new Error();
}
this.month = matchIndex % 12 || matchIndex;
}],
MMMM: [matchWord, function (input) {
var months = getLocalePart('months');
var matchIndex = months.indexOf(input) + 1;
if (matchIndex < 1) {
throw new Error();
}
this.month = matchIndex % 12 || matchIndex;
}],
Y: [matchSigned, addInput('year')],
YY: [match2, function (input) {
this.year = parseTwoDigitYear(input);
}],
YYYY: [match4, addInput('year')],
Z: zoneExpressions,
ZZ: zoneExpressions
};
function correctHours(time) {
var afternoon = time.afternoon;
if (afternoon !== undefined) {
var hours = time.hours;
if (afternoon) {
if (hours < 12) {
time.hours += 12;
}
} else if (hours === 12) {
time.hours = 0;
}
delete time.afternoon;
}
}
function makeParser(format) {
format = u(format, locale$3 && locale$3.formats);
var array = format.match(formattingTokens);
var length = array.length;
for (var i = 0; i < length; i += 1) {
var token = array[i];
var parseTo = expressions[token];
var regex = parseTo && parseTo[0];
var parser = parseTo && parseTo[1];
if (parser) {
array[i] = {
regex: regex,
parser: parser
};
} else {
array[i] = token.replace(/^\[|\]$/g, '');
}
}
return function (input) {
var time = {};
for (var _i = 0, start = 0; _i < length; _i += 1) {
var _token = array[_i];
if (typeof _token === 'string') {
start += _token.length;
} else {
var _regex = _token.regex,
_parser = _token.parser;
var part = input.slice(start);
var match = _regex.exec(part);
var value = match[0];
_parser.call(time, value);
input = input.replace(value, '');
}
}
correctHours(time);
return time;
};
}
var parseFormattedInput = function parseFormattedInput(input, format, utc, dayjs) {
try {
if (['x', 'X'].indexOf(format) > -1) return new Date((format === 'X' ? 1000 : 1) * input);
var parser = makeParser(format);
var _parser2 = parser(input),
year = _parser2.year,
month = _parser2.month,
day = _parser2.day,
hours = _parser2.hours,
minutes = _parser2.minutes,
seconds = _parser2.seconds,
milliseconds = _parser2.milliseconds,
zone = _parser2.zone,
week = _parser2.week;
var now = new Date();
var d = day || (!year && !month ? now.getDate() : 1);
var y = year || now.getFullYear();
var M = 0;
if (!(year && !month)) {
M = month > 0 ? month - 1 : now.getMonth();
}
var h = hours || 0;
var m = minutes || 0;
var s = seconds || 0;
var ms = milliseconds || 0;
if (zone) {
return new Date(Date.UTC(y, M, d, h, m, s, ms + zone.offset * 60 * 1000));
}
if (utc) {
return new Date(Date.UTC(y, M, d, h, m, s, ms));
}
var newDate;
newDate = new Date(y, M, d, h, m, s, ms);
if (week) {
newDate = dayjs(newDate).week(week).toDate();
}
return newDate;
} catch (e) {
return new Date(''); // Invalid Date
}
};
const customParseFormat = (function (o, C, d) {
d.p.customParseFormat = true;
if (o && o.parseTwoDigitYear) {
parseTwoDigitYear = o.parseTwoDigitYear;
}
var proto = C.prototype;
var oldParse = proto.parse;
proto.parse = function (cfg) {
var date = cfg.date,
utc = cfg.utc,
args = cfg.args;
this.$u = utc;
var format = args[1];
if (typeof format === 'string') {
var isStrictWithoutLocale = args[2] === true;
var isStrictWithLocale = args[3] === true;
var isStrict = isStrictWithoutLocale || isStrictWithLocale;
var pl = args[2];
if (isStrictWithLocale) {
pl = args[2];
}
locale$3 = this.$locale();
if (!isStrictWithoutLocale && pl) {
locale$3 = d.Ls[pl];
}
this.$d = parseFormattedInput(date, format, utc, d);
this.init();
if (pl && pl !== true) this.$L = this.locale(pl).$L; // use != to treat
// input number 1410715640579 and format string '1410715640579' equal
// eslint-disable-next-line eqeqeq
if (isStrict && date != this.format(format)) {
this.$d = new Date('');
} // reset global locale to make parallel unit test
locale$3 = {};
} else if (format instanceof Array) {
var len = format.length;
for (var i = 1; i <= len; i += 1) {
args[1] = format[i - 1];
var result = d.apply(this, args);
if (result.isValid()) {
this.$d = result.$d;
this.$L = result.$L;
this.init();
break;
}
if (i === len) this.$d = new Date('');
}
} else {
oldParse.call(this, cfg);
}
};
});
// This icon file is generated automatically.
var CalendarOutlined$1 = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M880 184H712v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H384v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H144c-17.7 0-32 14.3-32 32v664c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V216c0-17.7-14.3-32-32-32zm-40 656H184V460h656v380zM184 392V256h128v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h256v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h128v136H184z" } }] }, "name": "calendar", "theme": "outlined" };
function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty$2(target, key, source[key]); }); } return target; }
function _defineProperty$2(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var CalendarOutlined = function CalendarOutlined(props, context) {
var p = _objectSpread$2({}, props, context.attrs);
return createVNode(Icon, _objectSpread$2({}, p, {
"icon": CalendarOutlined$1
}), null);
};
CalendarOutlined.displayName = 'CalendarOutlined';
CalendarOutlined.inheritAttrs = false;
// This icon file is generated automatically.
var ClockCircleOutlined$1 = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" } }, { "tag": "path", "attrs": { "d": "M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z" } }] }, "name": "clock-circle", "theme": "outlined" };
function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty$1(target, key, source[key]); }); } return target; }
function _defineProperty$1(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var ClockCircleOutlined = function ClockCircleOutlined(props, context) {
var p = _objectSpread$1({}, props, context.attrs);
return createVNode(Icon, _objectSpread$1({}, p, {
"icon": ClockCircleOutlined$1
}), null);
};
ClockCircleOutlined.displayName = 'ClockCircleOutlined';
ClockCircleOutlined.inheritAttrs = false;
// This icon file is generated automatically.
var SwapRightOutlined$1 = { "icon": { "tag": "svg", "attrs": { "viewBox": "0 0 1024 1024", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M873.1 596.2l-164-208A32 32 0 00684 376h-64.8c-6.7 0-10.4 7.7-6.3 13l144.3 183H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h695.9c26.8 0 41.7-30.8 25.2-51.8z" } }] }, "name": "swap-right", "theme": "outlined" };
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? Object(arguments[i]) : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var SwapRightOutlined = function SwapRightOutlined(props, context) {
var p = _objectSpread({}, props, context.attrs);
return createVNode(Icon, _objectSpread({}, p, {
"icon": SwapRightOutlined$1
}), null);
};
SwapRightOutlined.displayName = 'SwapRightOutlined';
SwapRightOutlined.inheritAttrs = false;
dayjs.extend(customParseFormat);
dayjs.extend(advancedFormat);
dayjs.extend(weekday);
dayjs.extend(localeData);
dayjs.extend(weekOfYear);
dayjs.extend(weekYear);
dayjs.extend(quarterOfYear);
dayjs.extend((_o, c) => {
const proto = c.prototype;
const oldFormat = proto.format;
proto.format = function f(formatStr) {
const str = (formatStr || "").replace("Wo", "wo");
return oldFormat.bind(this)(str);
};
});
const localeMap = {
// ar_EG:
// az_AZ:
// bg_BG:
bn_BD: "bn-bd",
by_BY: "be",
// ca_ES:
// cs_CZ:
// da_DK:
// de_DE:
// el_GR:
en_GB: "en-gb",
en_US: "en",
// es_ES:
// et_EE:
// fa_IR:
// fi_FI:
fr_BE: "fr",
fr_CA: "fr-ca",
// fr_FR:
// ga_IE:
// gl_ES:
// he_IL:
// hi_IN:
// hr_HR:
// hu_HU:
hy_AM: "hy-am",
// id_ID:
// is_IS:
// it_IT:
// ja_JP:
// ka_GE:
// kk_KZ:
// km_KH:
kmr_IQ: "ku",
// kn_IN:
// ko_KR:
// ku_IQ: // previous ku in antd
// lt_LT:
// lv_LV:
// mk_MK:
// ml_IN:
// mn_MN:
// ms_MY:
// nb_NO:
// ne_NP:
nl_BE: "nl-be",
// nl_NL:
// pl_PL:
pt_BR: "pt-br",
// pt_PT:
// ro_RO:
// ru_RU:
// sk_SK:
// sl_SI:
// sr_RS:
// sv_SE:
// ta_IN:
// th_TH:
// tr_TR:
// uk_UA:
// ur_PK:
// vi_VN:
zh_CN: "zh-cn",
zh_HK: "zh-hk",
zh_TW: "zh-tw"
};
const parseLocale = (locale2) => {
const mapLocale = localeMap[locale2];
return mapLocale || locale2.split("_")[0];
};
const parseNoMatchNotice = () => {
noteOnce(false, "Not match any format. Please help to fire a issue about this.");
};
const advancedFormatRegex = /\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|k{1,2}|S/g;
function findTargetStr(val, index, segmentation) {
const items = [...new Set(val.split(segmentation))];
let idx = 0;
for (let i = 0; i < items.length; i++) {
const item = items[i];
idx += item.length;
if (idx > index) {
return item;
}
idx += segmentation.length;
}
}
const toDateWithValueFormat = (val, valueFormat) => {
if (!val) return null;
if (dayjs.isDayjs(val)) {
return val;
}
const matchs = valueFormat.matchAll(advancedFormatRegex);
let baseDate = dayjs(val, valueFormat);
if (matchs === null) {
return baseDate;
}
for (const match of matchs) {
const origin = match[0];
const index = match["index"];
if (origin === "Q") {
const segmentation = val.slice(index - 1, index);
const quarterStr = findTargetStr(val, index, segmentation).match(/\d+/)[0];
baseDate = baseDate.quarter(parseInt(quarterStr));
}
if (origin.toLowerCase() === "wo") {
const segmentation = val.slice(index - 1, index);
const weekStr = findTargetStr(val, index, segmentation).match(/\d+/)[0];
baseDate = baseDate.week(parseInt(weekStr));
}
if (origin.toLowerCase() === "ww") {
baseDate = baseDate.week(parseInt(val.slice(index, index + origin.length)));
}
if (origin.toLowerCase() === "w") {
baseDate = baseDate.week(parseInt(val.slice(index, index + origin.length + 1)));
}
}
return baseDate;
};
const generateConfig = {
// get
getNow: () => dayjs(),
getFixedDate: (string) => dayjs(string, ["YYYY-M-DD", "YYYY-MM-DD"]),
getEndDate: (date) => date.endOf("month"),
getWeekDay: (date) => {
const clone = date.locale("en");
return clone.weekday() + clone.localeData().firstDayOfWeek();
},
getYear: (date) => date.year(),
getMonth: (date) => date.month(),
getDate: (date) => date.date(),
getHour: (date) => date.hour(),
getMinute: (date) => date.minute(),
getSecond: (date) => date.second(),
// set
addYear: (date, diff) => date.add(diff, "year"),
addMonth: (date, diff) => date.add(diff, "month"),
addDate: (date, diff) => date.add(diff, "day"),
setYear: (date, year) => date.year(year),
setMonth: (date, month) => date.month(month),
setDate: (date, num) => date.date(num),
setHour: (date, hour) => date.hour(hour),
setMinute: (date, minute) => date.minute(minute),
setSecond: (date, second) => date.second(second),
// Compare
isAfter: (date1, date2) => date1.isAfter(date2),
isValidate: (date) => date.isValid(),
locale: {
getWeekFirstDay: (locale2) => dayjs().locale(parseLocale(locale2)).localeData().firstDayOfWeek(),
getWeekFirstDate: (locale2, date) => date.locale(parseLocale(locale2)).weekday(0),
getWeek: (locale2, date) => date.locale(parseLocale(locale2)).week(),
getShortWeekDays: (locale2) => dayjs().locale(parseLocale(locale2)).localeData().weekdaysMin(),
getShortMonths: (locale2) => dayjs().locale(parseLocale(locale2)).localeData().monthsShort(),
format: (locale2, date, format) => date.locale(parseLocale(locale2)).format(format),
parse: (locale2, text, formats) => {
const localeStr = parseLocale(locale2);
for (let i = 0; i < formats.length; i += 1) {
const format = formats[i];
const formatText = text;
if (format.includes("wo") || format.includes("Wo")) {
const year = formatText.split("-")[0];
const weekStr = formatText.split("-")[1];
const firstWeek = dayjs(year, "YYYY").startOf("year").locale(localeStr);
for (let j = 0; j <= 52; j += 1) {
const nextWeek = firstWeek.add(j, "week");
if (nextWeek.format("Wo") === weekStr) {
return nextWeek;
}
}
parseNoMatchNotice();
return null;
}
const date = dayjs(formatText, format, true).locale(localeStr);
if (date.isValid()) {
return date;
}
}
if (!text) {
parseNoMatchNotice();
}
return null;
}
},
toDate: (value, valueFormat) => {
if (Array.isArray(value)) {
return value.map((val) => toDateWithValueFormat(val, valueFormat));
} else {
return toDateWithValueFormat(value, valueFormat);
}
},
toString: (value, valueFormat) => {
if (Array.isArray(value)) {
return value.map((val) => dayjs.isDayjs(val) ? val.format(valueFormat) : val);
} else {
return dayjs.isDayjs(value) ? value.format(valueFormat) : value;
}
}
};
function useMergeProps(props) {
const attrs = useAttrs();
return _extends(_extends({}, props), attrs);
}
const PanelContextKey = Symbol("PanelContextProps");
const useProvidePanel = (props) => {
provide(PanelContextKey, props);
};
const useInjectPanel = () => {
return inject(PanelContextKey, {});
};
const HIDDEN_STYLE = {
visibility: "hidden"
};
function Header(_props, _ref) {
let {
slots
} = _ref;
var _a;
const props = useMergeProps(_props);
const {
prefixCls,
prevIcon = "\u2039",
nextIcon = "\u203A",
superPrevIcon = "\xAB",
superNextIcon = "\xBB",
onSuperPrev,
onSuperNext,
onPrev,
onNext
} = props;
const {
hideNextBtn,
hidePrevBtn
} = useInjectPanel();
return createVNode("div", {
"class": prefixCls
}, [onSuperPrev && createVNode("button", {
"type": "button",
"onClick": onSuperPrev,
"tabindex": -1,
"class": `${prefixCls}-super-prev-btn`,
"style": hidePrevBtn.value ? HIDDEN_STYLE : {}
}, [superPrevIcon]), onPrev && createVNode("button", {
"type": "button",
"onClick": onPrev,
"tabindex": -1,
"class": `${prefixCls}-prev-btn`,
"style": hidePrevBtn.value ? HIDDEN_STYLE : {}
}, [prevIcon]), createVNode("div", {
"class": `${prefixCls}-view`
}, [(_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots)]), onNext && createVNode("button", {
"type": "button",
"onClick": onNext,
"tabindex": -1,
"class": `${prefixCls}-next-btn`,
"style": hideNextBtn.value ? HIDDEN_STYLE : {}
}, [nextIcon]), onSuperNext && createVNode("button", {
"type": "button",
"onClick": onSuperNext,
"tabindex": -1,
"class": `${prefixCls}-super-next-btn`,
"style": hideNextBtn.value ? HIDDEN_STYLE : {}
}, [superNextIcon])]);
}
Header.displayName = "Header";
Header.inheritAttrs = false;
function DecadeHeader(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
generateConfig: generateConfig2,
viewDate,
onPrevDecades,
onNextDecades
} = props;
const {
hideHeader
} = useInjectPanel();
if (hideHeader) {
return null;
}
const headerPrefixCls = `${prefixCls}-header`;
const yearNumber = generateConfig2.getYear(viewDate);
const startYear = Math.floor(yearNumber / DECADE_DISTANCE_COUNT) * DECADE_DISTANCE_COUNT;
const endYear = startYear + DECADE_DISTANCE_COUNT - 1;
return createVNode(Header, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": headerPrefixCls,
"onSuperPrev": onPrevDecades,
"onSuperNext": onNextDecades
}), {
default: () => [startYear, createTextVNode("-"), endYear]
});
}
DecadeHeader.displayName = "DecadeHeader";
DecadeHeader.inheritAttrs = false;
function setTime(generateConfig2, date, hour, minute, second) {
let nextTime = generateConfig2.setHour(date, hour);
nextTime = generateConfig2.setMinute(nextTime, minute);
nextTime = generateConfig2.setSecond(nextTime, second);
return nextTime;
}
function setDateTime(generateConfig2, date, defaultDate) {
if (!defaultDate) {
return date;
}
let newDate = date;
newDate = generateConfig2.setHour(newDate, generateConfig2.getHour(defaultDate));
newDate = generateConfig2.setMinute(newDate, generateConfig2.getMinute(defaultDate));
newDate = generateConfig2.setSecond(newDate, generateConfig2.getSecond(defaultDate));
return newDate;
}
function getLowerBoundTime(hour, minute, second, hourStep, minuteStep, secondStep) {
const lowerBoundHour = Math.floor(hour / hourStep) * hourStep;
if (lowerBoundHour < hour) {
return [lowerBoundHour, 60 - minuteStep, 60 - secondStep];
}
const lowerBoundMinute = Math.floor(minute / minuteStep) * minuteStep;
if (lowerBoundMinute < minute) {
return [lowerBoundHour, lowerBoundMinute, 60 - secondStep];
}
const lowerBoundSecond = Math.floor(second / secondStep) * secondStep;
return [lowerBoundHour, lowerBoundMinute, lowerBoundSecond];
}
function getLastDay(generateConfig2, date) {
const year = generateConfig2.getYear(date);
const month = generateConfig2.getMonth(date) + 1;
const endDate = generateConfig2.getEndDate(generateConfig2.getFixedDate(`${year}-${month}-01`));
const lastDay = generateConfig2.getDate(endDate);
const monthShow = month < 10 ? `0${month}` : `${month}`;
return `${year}-${monthShow}-${lastDay}`;
}
function PanelBody(_props) {
const {
prefixCls,
disabledDate,
onSelect,
picker,
rowNum,
colNum,
prefixColumn,
rowClassName,
baseDate,
getCellClassName,
getCellText,
getCellNode,
getCellDate,
generateConfig: generateConfig2,
titleCell,
headerCells
} = useMergeProps(_props);
const {
onDateMouseenter,
onDateMouseleave,
mode
} = useInjectPanel();
const cellPrefixCls = `${prefixCls}-cell`;
const rows = [];
for (let i = 0; i < rowNum; i += 1) {
const row = [];
let rowStartDate;
for (let j = 0; j < colNum; j += 1) {
const offset = i * colNum + j;
const currentDate = getCellDate(baseDate, offset);
const disabled = getCellDateDisabled({
cellDate: currentDate,
mode: mode.value,
disabledDate,
generateConfig: generateConfig2
});
if (j === 0) {
rowStartDate = currentDate;
if (prefixColumn) {
row.push(prefixColumn(rowStartDate));
}
}
const title = titleCell && titleCell(currentDate);
row.push(createVNode("td", {
"key": j,
"title": title,
"class": classNames(cellPrefixCls, _extends({
[`${cellPrefixCls}-disabled`]: disabled,
[`${cellPrefixCls}-start`]: getCellText(currentDate) === 1 || picker === "year" && Number(title) % 10 === 0,
[`${cellPrefixCls}-end`]: title === getLastDay(generateConfig2, currentDate) || picker === "year" && Number(title) % 10 === 9
}, getCellClassName(currentDate))),
"onClick": (e) => {
e.stopPropagation();
if (!disabled) {
onSelect(currentDate);
}
},
"onMouseenter": () => {
if (!disabled && onDateMouseenter) {
onDateMouseenter(currentDate);
}
},
"onMouseleave": () => {
if (!disabled && onDateMouseleave) {
onDateMouseleave(currentDate);
}
}
}, [getCellNode ? getCellNode(currentDate) : createVNode("div", {
"class": `${cellPrefixCls}-inner`
}, [getCellText(currentDate)])]));
}
rows.push(createVNode("tr", {
"key": i,
"class": rowClassName && rowClassName(rowStartDate)
}, [row]));
}
return createVNode("div", {
"class": `${prefixCls}-body`
}, [createVNode("table", {
"class": `${prefixCls}-content`
}, [headerCells && createVNode("thead", null, [createVNode("tr", null, [headerCells])]), createVNode("tbody", null, [rows])])]);
}
PanelBody.displayName = "PanelBody";
PanelBody.inheritAttrs = false;
const DECADE_COL_COUNT = 3;
const DECADE_ROW_COUNT = 4;
function DecadeBody(_props) {
const props = useMergeProps(_props);
const DECADE_UNIT_DIFF_DES = DECADE_UNIT_DIFF - 1;
const {
prefixCls,
viewDate,
generateConfig: generateConfig2
} = props;
const cellPrefixCls = `${prefixCls}-cell`;
const yearNumber = generateConfig2.getYear(viewDate);
const decadeYearNumber = Math.floor(yearNumber / DECADE_UNIT_DIFF) * DECADE_UNIT_DIFF;
const startDecadeYear = Math.floor(yearNumber / DECADE_DISTANCE_COUNT) * DECADE_DISTANCE_COUNT;
const endDecadeYear = startDecadeYear + DECADE_DISTANCE_COUNT - 1;
const baseDecadeYear = generateConfig2.setYear(viewDate, startDecadeYear - Math.ceil((DECADE_COL_COUNT * DECADE_ROW_COUNT * DECADE_UNIT_DIFF - DECADE_DISTANCE_COUNT) / 2));
const getCellClassName = (date) => {
const startDecadeNumber = generateConfig2.getYear(date);
const endDecadeNumber = startDecadeNumber + DECADE_UNIT_DIFF_DES;
return {
[`${cellPrefixCls}-in-view`]: startDecadeYear <= startDecadeNumber && endDecadeNumber <= endDecadeYear,
[`${cellPrefixCls}-selected`]: startDecadeNumber === decadeYearNumber
};
};
return createVNode(PanelBody, _objectSpread$3(_objectSpread$3({}, props), {}, {
"rowNum": DECADE_ROW_COUNT,
"colNum": DECADE_COL_COUNT,
"baseDate": baseDecadeYear,
"getCellText": (date) => {
const startDecadeNumber = generateConfig2.getYear(date);
return `${startDecadeNumber}-${startDecadeNumber + DECADE_UNIT_DIFF_DES}`;
},
"getCellClassName": getCellClassName,
"getCellDate": (date, offset) => generateConfig2.addYear(date, offset * DECADE_UNIT_DIFF)
}), null);
}
DecadeBody.displayName = "DecadeBody";
DecadeBody.inheritAttrs = false;
const scrollIds = /* @__PURE__ */ new Map();
function waitElementReady(element, callback) {
let id;
function tryOrNextFrame() {
if (isVisible(element)) {
callback();
} else {
id = wrapperRaf(() => {
tryOrNextFrame();
});
}
}
tryOrNextFrame();
return () => {
wrapperRaf.cancel(id);
};
}
function scrollTo(element, to, duration) {
if (scrollIds.get(element)) {
wrapperRaf.cancel(scrollIds.get(element));
}
if (duration <= 0) {
scrollIds.set(element, wrapperRaf(() => {
element.scrollTop = to;
}));
return;
}
const difference = to - element.scrollTop;
const perTick = difference / duration * 10;
scrollIds.set(element, wrapperRaf(() => {
element.scrollTop += perTick;
if (element.scrollTop !== to) {
scrollTo(element, to, duration - 10);
}
}));
}
function createKeydownHandler(event, _ref) {
let {
onLeftRight,
onCtrlLeftRight,
onUpDown,
onPageUpDown,
onEnter
} = _ref;
const {
which,
ctrlKey,
metaKey
} = event;
switch (which) {
case KeyCode.LEFT:
if (ctrlKey || metaKey) {
if (onCtrlLeftRight) {
onCtrlLeftRight(-1);
return true;
}
} else if (onLeftRight) {
onLeftRight(-1);
return true;
}
break;
case KeyCode.RIGHT:
if (ctrlKey || metaKey) {
if (onCtrlLeftRight) {
onCtrlLeftRight(1);
return true;
}
} else if (onLeftRight) {
onLeftRight(1);
return true;
}
break;
case KeyCode.UP:
if (onUpDown) {
onUpDown(-1);
return true;
}
break;
case KeyCode.DOWN:
if (onUpDown) {
onUpDown(1);
return true;
}
break;
case KeyCode.PAGE_UP:
if (onPageUpDown) {
onPageUpDown(-1);
return true;
}
break;
case KeyCode.PAGE_DOWN:
if (onPageUpDown) {
onPageUpDown(1);
return true;
}
break;
case KeyCode.ENTER:
if (onEnter) {
onEnter();
return true;
}
break;
}
return false;
}
function getDefaultFormat(format, picker, showTime, use12Hours) {
let mergedFormat = format;
if (!mergedFormat) {
switch (picker) {
case "time":
mergedFormat = use12Hours ? "hh:mm:ss a" : "HH:mm:ss";
break;
case "week":
mergedFormat = "gggg-wo";
break;
case "month":
mergedFormat = "YYYY-MM";
break;
case "quarter":
mergedFormat = "YYYY-[Q]Q";
break;
case "year":
mergedFormat = "YYYY";
break;
default:
mergedFormat = showTime ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD";
}
}
return mergedFormat;
}
function getInputSize(picker, format, generateConfig2) {
const defaultSize = picker === "time" ? 8 : 10;
const length = typeof format === "function" ? format(generateConfig2.getNow()).length : format.length;
return Math.max(defaultSize, length) + 2;
}
const getYearNextMode = (next) => {
if (next === "month" || next === "date") {
return "year";
}
return next;
};
const getMonthNextMode = (next) => {
if (next === "date") {
return "month";
}
return next;
};
const getQuarterNextMode = (next) => {
if (next === "month" || next === "date") {
return "quarter";
}
return next;
};
const getWeekNextMode = (next) => {
if (next === "date") {
return "week";
}
return next;
};
const PickerModeMap = {
year: getYearNextMode,
month: getMonthNextMode,
quarter: getQuarterNextMode,
week: getWeekNextMode,
time: null,
date: null
};
function elementsContains(elements, target) {
return elements.some((ele) => ele && ele.contains(target));
}
const DECADE_UNIT_DIFF = 10;
const DECADE_DISTANCE_COUNT = DECADE_UNIT_DIFF * 10;
function DecadePanel(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
onViewDateChange,
generateConfig: generateConfig2,
viewDate,
operationRef,
onSelect,
onPanelChange
} = props;
const panelPrefixCls = `${prefixCls}-decade-panel`;
operationRef.value = {
onKeydown: (event) => createKeydownHandler(event, {
onLeftRight: (diff) => {
onSelect(generateConfig2.addYear(viewDate, diff * DECADE_UNIT_DIFF), "key");
},
onCtrlLeftRight: (diff) => {
onSelect(generateConfig2.addYear(viewDate, diff * DECADE_DISTANCE_COUNT), "key");
},
onUpDown: (diff) => {
onSelect(generateConfig2.addYear(viewDate, diff * DECADE_UNIT_DIFF * DECADE_COL_COUNT), "key");
},
onEnter: () => {
onPanelChange("year", viewDate);
}
})
};
const onDecadesChange = (diff) => {
const newDate = generateConfig2.addYear(viewDate, diff * DECADE_DISTANCE_COUNT);
onViewDateChange(newDate);
onPanelChange(null, newDate);
};
const onInternalSelect = (date) => {
onSelect(date, "mouse");
onPanelChange("year", date);
};
return createVNode("div", {
"class": panelPrefixCls
}, [createVNode(DecadeHeader, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": prefixCls,
"onPrevDecades": () => {
onDecadesChange(-1);
},
"onNextDecades": () => {
onDecadesChange(1);
}
}), null), createVNode(DecadeBody, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": prefixCls,
"onSelect": onInternalSelect
}), null)]);
}
DecadePanel.displayName = "DecadePanel";
DecadePanel.inheritAttrs = false;
const WEEK_DAY_COUNT = 7;
function isNullEqual(value1, value2) {
if (!value1 && !value2) {
return true;
}
if (!value1 || !value2) {
return false;
}
return void 0;
}
function isSameDecade(generateConfig2, decade1, decade2) {
const equal = isNullEqual(decade1, decade2);
if (typeof equal === "boolean") {
return equal;
}
const num1 = Math.floor(generateConfig2.getYear(decade1) / 10);
const num2 = Math.floor(generateConfig2.getYear(decade2) / 10);
return num1 === num2;
}
function isSameYear(generateConfig2, year1, year2) {
const equal = isNullEqual(year1, year2);
if (typeof equal === "boolean") {
return equal;
}
return generateConfig2.getYear(year1) === generateConfig2.getYear(year2);
}
function getQuarter(generateConfig2, date) {
const quota = Math.floor(generateConfig2.getMonth(date) / 3);
return quota + 1;
}
function isSameQuarter(generateConfig2, quarter1, quarter2) {
const equal = isNullEqual(quarter1, quarter2);
if (typeof equal === "boolean") {
return equal;
}
return isSameYear(generateConfig2, quarter1, quarter2) && getQuarter(generateConfig2, quarter1) === getQuarter(generateConfig2, quarter2);
}
function isSameMonth(generateConfig2, month1, month2) {
const equal = isNullEqual(month1, month2);
if (typeof equal === "boolean") {
return equal;
}
return isSameYear(generateConfig2, month1, month2) && generateConfig2.getMonth(month1) === generateConfig2.getMonth(month2);
}
function isSameDate(generateConfig2, date1, date2) {
const equal = isNullEqual(date1, date2);
if (typeof equal === "boolean") {
return equal;
}
return generateConfig2.getYear(date1) === generateConfig2.getYear(date2) && generateConfig2.getMonth(date1) === generateConfig2.getMonth(date2) && generateConfig2.getDate(date1) === generateConfig2.getDate(date2);
}
function isSameTime(generateConfig2, time1, time2) {
const equal = isNullEqual(time1, time2);
if (typeof equal === "boolean") {
return equal;
}
return generateConfig2.getHour(time1) === generateConfig2.getHour(time2) && generateConfig2.getMinute(time1) === generateConfig2.getMinute(time2) && generateConfig2.getSecond(time1) === generateConfig2.getSecond(time2);
}
function isSameWeek(generateConfig2, locale2, date1, date2) {
const equal = isNullEqual(date1, date2);
if (typeof equal === "boolean") {
return equal;
}
return generateConfig2.locale.getWeek(locale2, date1) === generateConfig2.locale.getWeek(locale2, date2);
}
function isEqual(generateConfig2, value1, value2) {
return isSameDate(generateConfig2, value1, value2) && isSameTime(generateConfig2, value1, value2);
}
function isInRange(generateConfig2, startDate, endDate, current) {
if (!startDate || !endDate || !current) {
return false;
}
return !isSameDate(generateConfig2, startDate, current) && !isSameDate(generateConfig2, endDate, current) && generateConfig2.isAfter(current, startDate) && generateConfig2.isAfter(endDate, current);
}
function getWeekStartDate(locale2, generateConfig2, value) {
const weekFirstDay = generateConfig2.locale.getWeekFirstDay(locale2);
const monthStartDate = generateConfig2.setDate(value, 1);
const startDateWeekDay = generateConfig2.getWeekDay(monthStartDate);
let alignStartDate = generateConfig2.addDate(monthStartDate, weekFirstDay - startDateWeekDay);
if (generateConfig2.getMonth(alignStartDate) === generateConfig2.getMonth(value) && generateConfig2.getDate(alignStartDate) > 1) {
alignStartDate = generateConfig2.addDate(alignStartDate, -7);
}
return alignStartDate;
}
function getClosingViewDate(viewDate, picker, generateConfig2) {
let offset = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 1;
switch (picker) {
case "year":
return generateConfig2.addYear(viewDate, offset * 10);
case "quarter":
case "month":
return generateConfig2.addYear(viewDate, offset);
default:
return generateConfig2.addMonth(viewDate, offset);
}
}
function formatValue(value, _ref) {
let {
generateConfig: generateConfig2,
locale: locale2,
format
} = _ref;
return typeof format === "function" ? format(value) : generateConfig2.locale.format(locale2.locale, value, format);
}
function parseValue(value, _ref2) {
let {
generateConfig: generateConfig2,
locale: locale2,
formatList
} = _ref2;
if (!value || typeof formatList[0] === "function") {
return null;
}
return generateConfig2.locale.parse(locale2.locale, value, formatList);
}
function getCellDateDisabled(_ref3) {
let {
cellDate,
mode,
disabledDate,
generateConfig: generateConfig2
} = _ref3;
if (!disabledDate) return false;
const getDisabledFromRange = (currentMode, start, end) => {
let current = start;
while (current <= end) {
let date;
switch (currentMode) {
case "date": {
date = generateConfig2.setDate(cellDate, current);
if (!disabledDate(date)) {
return false;
}
break;
}
case "month": {
date = generateConfig2.setMonth(cellDate, current);
if (!getCellDateDisabled({
cellDate: date,
mode: "month",
generateConfig: generateConfig2,
disabledDate
})) {
return false;
}
break;
}
case "year": {
date = generateConfig2.setYear(cellDate, current);
if (!getCellDateDisabled({
cellDate: date,
mode: "year",
generateConfig: generateConfig2,
disabledDate
})) {
return false;
}
break;
}
}
current += 1;
}
return true;
};
switch (mode) {
case "date":
case "week": {
return disabledDate(cellDate);
}
case "month": {
const startDate = 1;
const endDate = generateConfig2.getDate(generateConfig2.getEndDate(cellDate));
return getDisabledFromRange("date", startDate, endDate);
}
case "quarter": {
const startMonth = Math.floor(generateConfig2.getMonth(cellDate) / 3) * 3;
const endMonth = startMonth + 2;
return getDisabledFromRange("month", startMonth, endMonth);
}
case "year": {
return getDisabledFromRange("month", 0, 11);
}
case "decade": {
const year = generateConfig2.getYear(cellDate);
const startYear = Math.floor(year / DECADE_UNIT_DIFF) * DECADE_UNIT_DIFF;
const endYear = startYear + DECADE_UNIT_DIFF - 1;
return getDisabledFromRange("year", startYear, endYear);
}
}
}
function TimeHeader(_props) {
const props = useMergeProps(_props);
const {
hideHeader
} = useInjectPanel();
if (hideHeader.value) {
return null;
}
const {
prefixCls,
generateConfig: generateConfig2,
locale: locale2,
value,
format
} = props;
const headerPrefixCls = `${prefixCls}-header`;
return createVNode(Header, {
"prefixCls": headerPrefixCls
}, {
default: () => [value ? formatValue(value, {
locale: locale2,
format,
generateConfig: generateConfig2
}) : "\xA0"]
});
}
TimeHeader.displayName = "TimeHeader";
TimeHeader.inheritAttrs = false;
const TimeUnitColumn = defineComponent({
name: "TimeUnitColumn",
props: ["prefixCls", "units", "onSelect", "value", "active", "hideDisabledOptions"],
setup(props) {
const {
open
} = useInjectPanel();
const ulRef = shallowRef(null);
const liRefs = ref(/* @__PURE__ */ new Map());
const scrollRef = ref();
watch(() => props.value, () => {
const li = liRefs.value.get(props.value);
if (li && open.value !== false) {
scrollTo(ulRef.value, li.offsetTop, 120);
}
});
watch(open, () => {
var _a;
(_a = scrollRef.value) === null || _a === void 0 ? void 0 : _a.call(scrollRef);
nextTick(() => {
if (open.value) {
const li = liRefs.value.get(props.value);
if (li) {
scrollRef.value = waitElementReady(li, () => {
scrollTo(ulRef.value, li.offsetTop, 0);
});
}
}
});
}, {
immediate: true,
flush: "post"
});
return () => {
const {
prefixCls,
units,
onSelect,
value,
active,
hideDisabledOptions
} = props;
const cellPrefixCls = `${prefixCls}-cell`;
return createVNode("ul", {
"class": classNames(`${prefixCls}-column`, {
[`${prefixCls}-column-active`]: active
}),
"ref": ulRef,
"style": {
position: "relative"
}
}, [units.map((unit) => {
if (hideDisabledOptions && unit.disabled) {
return null;
}
return createVNode("li", {
"key": unit.value,
"ref": (element) => {
liRefs.value.set(unit.value, element);
},
"class": classNames(cellPrefixCls, {
[`${cellPrefixCls}-disabled`]: unit.disabled,
[`${cellPrefixCls}-selected`]: value === unit.value
}),
"onClick": () => {
if (unit.disabled) {
return;
}
onSelect(unit.value);
}
}, [createVNode("div", {
"class": `${cellPrefixCls}-inner`
}, [unit.label])]);
})]);
};
}
});
function leftPad(str, length) {
let fill = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "0";
let current = String(str);
while (current.length < length) {
current = `${fill}${str}`;
}
return current;
}
const tuple = function() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return args;
};
function toArray$1(val) {
if (val === null || val === void 0) {
return [];
}
return Array.isArray(val) ? val : [val];
}
function getDataOrAriaProps(props) {
const retProps = {};
Object.keys(props).forEach((key) => {
if ((key.startsWith("data-") || key.startsWith("aria-") || key === "role" || key === "name") && !key.startsWith("data-__")) {
retProps[key] = props[key];
}
});
return retProps;
}
function getValue(values, index) {
return values ? values[index] : null;
}
function updateValues(values, value, index) {
const newValues = [getValue(values, 0), getValue(values, 1)];
newValues[index] = typeof value === "function" ? value(newValues[index]) : value;
if (!newValues[0] && !newValues[1]) {
return null;
}
return newValues;
}
function generateUnits(start, end, step, disabledUnits) {
const units = [];
for (let i = start; i <= end; i += step) {
units.push({
label: leftPad(i, 2),
value: i,
disabled: (disabledUnits || []).includes(i)
});
}
return units;
}
const TimeBody = defineComponent({
compatConfig: {
MODE: 3
},
name: "TimeBody",
inheritAttrs: false,
props: ["generateConfig", "prefixCls", "operationRef", "activeColumnIndex", "value", "showHour", "showMinute", "showSecond", "use12Hours", "hourStep", "minuteStep", "secondStep", "disabledHours", "disabledMinutes", "disabledSeconds", "disabledTime", "hideDisabledOptions", "onSelect"],
setup(props) {
const originHour = computed(() => props.value ? props.generateConfig.getHour(props.value) : -1);
const isPM = computed(() => {
if (props.use12Hours) {
return originHour.value >= 12;
} else {
return false;
}
});
const hour = computed(() => {
if (props.use12Hours) {
return originHour.value % 12;
} else {
return originHour.value;
}
});
const minute = computed(() => props.value ? props.generateConfig.getMinute(props.value) : -1);
const second = computed(() => props.value ? props.generateConfig.getSecond(props.value) : -1);
const now = ref(props.generateConfig.getNow());
const mergedDisabledHours = ref();
const mergedDisabledMinutes = ref();
const mergedDisabledSeconds = ref();
watchEffect(() => {
if (props.disabledTime) {
const disabledConfig = props.disabledTime(now);
[mergedDisabledHours.value, mergedDisabledMinutes.value, mergedDisabledSeconds.value] = [disabledConfig.disabledHours, disabledConfig.disabledMinutes, disabledConfig.disabledSeconds];
} else {
[mergedDisabledHours.value, mergedDisabledMinutes.value, mergedDisabledSeconds.value] = [props.disabledHours, props.disabledMinutes, props.disabledSeconds];
}
});
const setTime$1 = (isNewPM, newHour, newMinute, newSecond) => {
let newDate = props.value || props.generateConfig.getNow();
const mergedHour = Math.max(0, newHour);
const mergedMinute = Math.max(0, newMinute);
const mergedSecond = Math.max(0, newSecond);
newDate = setTime(props.generateConfig, newDate, !props.use12Hours || !isNewPM ? mergedHour : mergedHour + 12, mergedMinute, mergedSecond);
return newDate;
};
const rawHours = computed(() => {
var _a;
return generateUnits(0, 23, (_a = props.hourStep) !== null && _a !== void 0 ? _a : 1, mergedDisabledHours.value && mergedDisabledHours.value());
});
const AMPMDisabled = computed(() => {
if (!props.use12Hours) {
return [false, false];
}
const AMPMDisabled2 = [true, true];
rawHours.value.forEach((_ref) => {
let {
disabled,
value: hourValue
} = _ref;
if (disabled) return;
if (hourValue >= 12) {
AMPMDisabled2[1] = false;
} else {
AMPMDisabled2[0] = false;
}
});
return AMPMDisabled2;
});
const hours = computed(() => {
if (!props.use12Hours) return rawHours.value;
return rawHours.value.filter(isPM.value ? (hourMeta) => hourMeta.value >= 12 : (hourMeta) => hourMeta.value < 12).map((hourMeta) => {
const hourValue = hourMeta.value % 12;
const hourLabel = hourValue === 0 ? "12" : leftPad(hourValue, 2);
return _extends(_extends({}, hourMeta), {
label: hourLabel,
value: hourValue
});
});
});
const minutes = computed(() => {
var _a;
return generateUnits(0, 59, (_a = props.minuteStep) !== null && _a !== void 0 ? _a : 1, mergedDisabledMinutes.value && mergedDisabledMinutes.value(originHour.value));
});
const seconds = computed(() => {
var _a;
return generateUnits(0, 59, (_a = props.secondStep) !== null && _a !== void 0 ? _a : 1, mergedDisabledSeconds.value && mergedDisabledSeconds.value(originHour.value, minute.value));
});
return () => {
const {
prefixCls,
operationRef,
activeColumnIndex,
showHour,
showMinute,
showSecond,
use12Hours,
hideDisabledOptions,
onSelect
} = props;
const columns = [];
const contentPrefixCls = `${prefixCls}-content`;
const columnPrefixCls = `${prefixCls}-time-panel`;
operationRef.value = {
onUpDown: (diff) => {
const column = columns[activeColumnIndex];
if (column) {
const valueIndex = column.units.findIndex((unit) => unit.value === column.value);
const unitLen = column.units.length;
for (let i = 1; i < unitLen; i += 1) {
const nextUnit = column.units[(valueIndex + diff * i + unitLen) % unitLen];
if (nextUnit.disabled !== true) {
column.onSelect(nextUnit.value);
break;
}
}
}
}
};
function addColumnNode(condition, node, columnValue, units, onColumnSelect) {
if (condition !== false) {
columns.push({
node: cloneElement(node, {
prefixCls: columnPrefixCls,
value: columnValue,
active: activeColumnIndex === columns.length,
onSelect: onColumnSelect,
units,
hideDisabledOptions
}),
onSelect: onColumnSelect,
value: columnValue,
units
});
}
}
addColumnNode(showHour, createVNode(TimeUnitColumn, {
"key": "hour"
}, null), hour.value, hours.value, (num) => {
onSelect(setTime$1(isPM.value, num, minute.value, second.value), "mouse");
});
addColumnNode(showMinute, createVNode(TimeUnitColumn, {
"key": "minute"
}, null), minute.value, minutes.value, (num) => {
onSelect(setTime$1(isPM.value, hour.value, num, second.value), "mouse");
});
addColumnNode(showSecond, createVNode(TimeUnitColumn, {
"key": "second"
}, null), second.value, seconds.value, (num) => {
onSelect(setTime$1(isPM.value, hour.value, minute.value, num), "mouse");
});
let PMIndex = -1;
if (typeof isPM.value === "boolean") {
PMIndex = isPM.value ? 1 : 0;
}
addColumnNode(use12Hours === true, createVNode(TimeUnitColumn, {
"key": "12hours"
}, null), PMIndex, [{
label: "AM",
value: 0,
disabled: AMPMDisabled.value[0]
}, {
label: "PM",
value: 1,
disabled: AMPMDisabled.value[1]
}], (num) => {
onSelect(setTime$1(!!num, hour.value, minute.value, second.value), "mouse");
});
return createVNode("div", {
"class": contentPrefixCls
}, [columns.map((_ref2) => {
let {
node
} = _ref2;
return node;
})]);
};
}
});
const countBoolean = (boolList) => boolList.filter((bool) => bool !== false).length;
function TimePanel(_props) {
const props = useMergeProps(_props);
const {
generateConfig: generateConfig2,
format = "HH:mm:ss",
prefixCls,
active,
operationRef,
showHour,
showMinute,
showSecond,
use12Hours = false,
onSelect,
value
} = props;
const panelPrefixCls = `${prefixCls}-time-panel`;
const bodyOperationRef = ref();
const activeColumnIndex = ref(-1);
const columnsCount = countBoolean([showHour, showMinute, showSecond, use12Hours]);
operationRef.value = {
onKeydown: (event) => createKeydownHandler(event, {
onLeftRight: (diff) => {
activeColumnIndex.value = (activeColumnIndex.value + diff + columnsCount) % columnsCount;
},
onUpDown: (diff) => {
if (activeColumnIndex.value === -1) {
activeColumnIndex.value = 0;
} else if (bodyOperationRef.value) {
bodyOperationRef.value.onUpDown(diff);
}
},
onEnter: () => {
onSelect(value || generateConfig2.getNow(), "key");
activeColumnIndex.value = -1;
}
}),
onBlur: () => {
activeColumnIndex.value = -1;
}
};
return createVNode("div", {
"class": classNames(panelPrefixCls, {
[`${panelPrefixCls}-active`]: active
})
}, [createVNode(TimeHeader, _objectSpread$3(_objectSpread$3({}, props), {}, {
"format": format,
"prefixCls": prefixCls
}), null), createVNode(TimeBody, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": prefixCls,
"activeColumnIndex": activeColumnIndex.value,
"operationRef": bodyOperationRef
}), null)]);
}
TimePanel.displayName = "TimePanel";
TimePanel.inheritAttrs = false;
function useCellClassName(_ref) {
let {
cellPrefixCls,
generateConfig: generateConfig2,
rangedValue,
hoverRangedValue,
isInView,
isSameCell,
offsetCell,
today,
value
} = _ref;
function getClassName(currentDate) {
const prevDate = offsetCell(currentDate, -1);
const nextDate = offsetCell(currentDate, 1);
const rangeStart = getValue(rangedValue, 0);
const rangeEnd = getValue(rangedValue, 1);
const hoverStart = getValue(hoverRangedValue, 0);
const hoverEnd = getValue(hoverRangedValue, 1);
const isRangeHovered = isInRange(generateConfig2, hoverStart, hoverEnd, currentDate);
function isRangeStart(date) {
return isSameCell(rangeStart, date);
}
function isRangeEnd(date) {
return isSameCell(rangeEnd, date);
}
const isHoverStart = isSameCell(hoverStart, currentDate);
const isHoverEnd = isSameCell(hoverEnd, currentDate);
const isHoverEdgeStart = (isRangeHovered || isHoverEnd) && (!isInView(prevDate) || isRangeEnd(prevDate));
const isHoverEdgeEnd = (isRangeHovered || isHoverStart) && (!isInView(nextDate) || isRangeStart(nextDate));
return {
// In view
[`${cellPrefixCls}-in-view`]: isInView(currentDate),
// Range
[`${cellPrefixCls}-in-range`]: isInRange(generateConfig2, rangeStart, rangeEnd, currentDate),
[`${cellPrefixCls}-range-start`]: isRangeStart(currentDate),
[`${cellPrefixCls}-range-end`]: isRangeEnd(currentDate),
[`${cellPrefixCls}-range-start-single`]: isRangeStart(currentDate) && !rangeEnd,
[`${cellPrefixCls}-range-end-single`]: isRangeEnd(currentDate) && !rangeStart,
[`${cellPrefixCls}-range-start-near-hover`]: isRangeStart(currentDate) && (isSameCell(prevDate, hoverStart) || isInRange(generateConfig2, hoverStart, hoverEnd, prevDate)),
[`${cellPrefixCls}-range-end-near-hover`]: isRangeEnd(currentDate) && (isSameCell(nextDate, hoverEnd) || isInRange(generateConfig2, hoverStart, hoverEnd, nextDate)),
// Range Hover
[`${cellPrefixCls}-range-hover`]: isRangeHovered,
[`${cellPrefixCls}-range-hover-start`]: isHoverStart,
[`${cellPrefixCls}-range-hover-end`]: isHoverEnd,
// Range Edge
[`${cellPrefixCls}-range-hover-edge-start`]: isHoverEdgeStart,
[`${cellPrefixCls}-range-hover-edge-end`]: isHoverEdgeEnd,
[`${cellPrefixCls}-range-hover-edge-start-near-range`]: isHoverEdgeStart && isSameCell(prevDate, rangeEnd),
[`${cellPrefixCls}-range-hover-edge-end-near-range`]: isHoverEdgeEnd && isSameCell(nextDate, rangeStart),
// Others
[`${cellPrefixCls}-today`]: isSameCell(today, currentDate),
[`${cellPrefixCls}-selected`]: isSameCell(value, currentDate)
};
}
return getClassName;
}
const RangeContextKey = Symbol("RangeContextProps");
const useProvideRange = (props) => {
provide(RangeContextKey, props);
};
const useInjectRange = () => {
return inject(RangeContextKey, {
rangedValue: ref(),
hoverRangedValue: ref(),
inRange: ref(),
panelPosition: ref()
});
};
const RangeContextProvider = defineComponent({
compatConfig: {
MODE: 3
},
name: "PanelContextProvider",
inheritAttrs: false,
props: {
value: {
type: Object,
default: () => ({})
}
},
setup(props, _ref) {
let {
slots
} = _ref;
const value = {
rangedValue: ref(props.value.rangedValue),
hoverRangedValue: ref(props.value.hoverRangedValue),
inRange: ref(props.value.inRange),
panelPosition: ref(props.value.panelPosition)
};
useProvideRange(value);
watch(() => props.value, () => {
Object.keys(props.value).forEach((key) => {
if (value[key]) {
value[key].value = props.value[key];
}
});
});
return () => {
var _a;
return (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);
};
}
});
function DateBody(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
generateConfig: generateConfig2,
prefixColumn,
locale: locale2,
rowCount,
viewDate,
value,
dateRender
} = props;
const {
rangedValue,
hoverRangedValue
} = useInjectRange();
const baseDate = getWeekStartDate(locale2.locale, generateConfig2, viewDate);
const cellPrefixCls = `${prefixCls}-cell`;
const weekFirstDay = generateConfig2.locale.getWeekFirstDay(locale2.locale);
const today = generateConfig2.getNow();
const headerCells = [];
const weekDaysLocale = locale2.shortWeekDays || (generateConfig2.locale.getShortWeekDays ? generateConfig2.locale.getShortWeekDays(locale2.locale) : []);
if (prefixColumn) {
headerCells.push(createVNode("th", {
"key": "empty",
"aria-label": "empty cell"
}, null));
}
for (let i = 0; i < WEEK_DAY_COUNT; i += 1) {
headerCells.push(createVNode("th", {
"key": i
}, [weekDaysLocale[(i + weekFirstDay) % WEEK_DAY_COUNT]]));
}
const getCellClassName = useCellClassName({
cellPrefixCls,
today,
value,
generateConfig: generateConfig2,
rangedValue: prefixColumn ? null : rangedValue.value,
hoverRangedValue: prefixColumn ? null : hoverRangedValue.value,
isSameCell: (current, target) => isSameDate(generateConfig2, current, target),
isInView: (date) => isSameMonth(generateConfig2, date, viewDate),
offsetCell: (date, offset) => generateConfig2.addDate(date, offset)
});
const getCellNode = dateRender ? (date) => dateRender({
current: date,
today
}) : void 0;
return createVNode(PanelBody, _objectSpread$3(_objectSpread$3({}, props), {}, {
"rowNum": rowCount,
"colNum": WEEK_DAY_COUNT,
"baseDate": baseDate,
"getCellNode": getCellNode,
"getCellText": generateConfig2.getDate,
"getCellClassName": getCellClassName,
"getCellDate": generateConfig2.addDate,
"titleCell": (date) => formatValue(date, {
locale: locale2,
format: "YYYY-MM-DD",
generateConfig: generateConfig2
}),
"headerCells": headerCells
}), null);
}
DateBody.displayName = "DateBody";
DateBody.inheritAttrs = false;
DateBody.props = [
"prefixCls",
"generateConfig",
"value?",
"viewDate",
"locale",
"rowCount",
"onSelect",
"dateRender?",
"disabledDate?",
// Used for week panel
"prefixColumn?",
"rowClassName?"
];
function DateHeader(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
generateConfig: generateConfig2,
locale: locale2,
viewDate,
onNextMonth,
onPrevMonth,
onNextYear,
onPrevYear,
onYearClick,
onMonthClick
} = props;
const {
hideHeader
} = useInjectPanel();
if (hideHeader.value) {
return null;
}
const headerPrefixCls = `${prefixCls}-header`;
const monthsLocale = locale2.shortMonths || (generateConfig2.locale.getShortMonths ? generateConfig2.locale.getShortMonths(locale2.locale) : []);
const month = generateConfig2.getMonth(viewDate);
const yearNode = createVNode("button", {
"type": "button",
"key": "year",
"onClick": onYearClick,
"tabindex": -1,
"class": `${prefixCls}-year-btn`
}, [formatValue(viewDate, {
locale: locale2,
format: locale2.yearFormat,
generateConfig: generateConfig2
})]);
const monthNode = createVNode("button", {
"type": "button",
"key": "month",
"onClick": onMonthClick,
"tabindex": -1,
"class": `${prefixCls}-month-btn`
}, [locale2.monthFormat ? formatValue(viewDate, {
locale: locale2,
format: locale2.monthFormat,
generateConfig: generateConfig2
}) : monthsLocale[month]]);
const monthYearNodes = locale2.monthBeforeYear ? [monthNode, yearNode] : [yearNode, monthNode];
return createVNode(Header, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": headerPrefixCls,
"onSuperPrev": onPrevYear,
"onPrev": onPrevMonth,
"onNext": onNextMonth,
"onSuperNext": onNextYear
}), {
default: () => [monthYearNodes]
});
}
DateHeader.displayName = "DateHeader";
DateHeader.inheritAttrs = false;
const DATE_ROW_COUNT = 6;
function DatePanel(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
panelName = "date",
keyboardConfig,
active,
operationRef,
generateConfig: generateConfig2,
value,
viewDate,
onViewDateChange,
onPanelChange,
onSelect
} = props;
const panelPrefixCls = `${prefixCls}-${panelName}-panel`;
operationRef.value = {
onKeydown: (event) => createKeydownHandler(event, _extends({
onLeftRight: (diff) => {
onSelect(generateConfig2.addDate(value || viewDate, diff), "key");
},
onCtrlLeftRight: (diff) => {
onSelect(generateConfig2.addYear(value || viewDate, diff), "key");
},
onUpDown: (diff) => {
onSelect(generateConfig2.addDate(value || viewDate, diff * WEEK_DAY_COUNT), "key");
},
onPageUpDown: (diff) => {
onSelect(generateConfig2.addMonth(value || viewDate, diff), "key");
}
}, keyboardConfig))
};
const onYearChange = (diff) => {
const newDate = generateConfig2.addYear(viewDate, diff);
onViewDateChange(newDate);
onPanelChange(null, newDate);
};
const onMonthChange = (diff) => {
const newDate = generateConfig2.addMonth(viewDate, diff);
onViewDateChange(newDate);
onPanelChange(null, newDate);
};
return createVNode("div", {
"class": classNames(panelPrefixCls, {
[`${panelPrefixCls}-active`]: active
})
}, [createVNode(DateHeader, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": prefixCls,
"value": value,
"viewDate": viewDate,
"onPrevYear": () => {
onYearChange(-1);
},
"onNextYear": () => {
onYearChange(1);
},
"onPrevMonth": () => {
onMonthChange(-1);
},
"onNextMonth": () => {
onMonthChange(1);
},
"onMonthClick": () => {
onPanelChange("month", viewDate);
},
"onYearClick": () => {
onPanelChange("year", viewDate);
}
}), null), createVNode(DateBody, _objectSpread$3(_objectSpread$3({}, props), {}, {
"onSelect": (date) => onSelect(date, "mouse"),
"prefixCls": prefixCls,
"value": value,
"viewDate": viewDate,
"rowCount": DATE_ROW_COUNT
}), null)]);
}
DatePanel.displayName = "DatePanel";
DatePanel.inheritAttrs = false;
const ACTIVE_PANEL = tuple("date", "time");
function DatetimePanel(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
operationRef,
generateConfig: generateConfig2,
value,
defaultValue,
disabledTime,
showTime,
onSelect
} = props;
const panelPrefixCls = `${prefixCls}-datetime-panel`;
const activePanel = ref(null);
const dateOperationRef = ref({});
const timeOperationRef = ref({});
const timeProps = typeof showTime === "object" ? _extends({}, showTime) : {};
function getNextActive(offset) {
const activeIndex = ACTIVE_PANEL.indexOf(activePanel.value) + offset;
const nextActivePanel = ACTIVE_PANEL[activeIndex] || null;
return nextActivePanel;
}
const onBlur = (e) => {
if (timeOperationRef.value.onBlur) {
timeOperationRef.value.onBlur(e);
}
activePanel.value = null;
};
operationRef.value = {
onKeydown: (event) => {
if (event.which === KeyCode.TAB) {
const nextActivePanel = getNextActive(event.shiftKey ? -1 : 1);
activePanel.value = nextActivePanel;
if (nextActivePanel) {
event.preventDefault();
}
return true;
}
if (activePanel.value) {
const ref2 = activePanel.value === "date" ? dateOperationRef : timeOperationRef;
if (ref2.value && ref2.value.onKeydown) {
ref2.value.onKeydown(event);
}
return true;
}
if ([KeyCode.LEFT, KeyCode.RIGHT, KeyCode.UP, KeyCode.DOWN].includes(event.which)) {
activePanel.value = "date";
return true;
}
return false;
},
onBlur,
onClose: onBlur
};
const onInternalSelect = (date, source) => {
let selectedDate = date;
if (source === "date" && !value && timeProps.defaultValue) {
selectedDate = generateConfig2.setHour(selectedDate, generateConfig2.getHour(timeProps.defaultValue));
selectedDate = generateConfig2.setMinute(selectedDate, generateConfig2.getMinute(timeProps.defaultValue));
selectedDate = generateConfig2.setSecond(selectedDate, generateConfig2.getSecond(timeProps.defaultValue));
} else if (source === "time" && !value && defaultValue) {
selectedDate = generateConfig2.setYear(selectedDate, generateConfig2.getYear(defaultValue));
selectedDate = generateConfig2.setMonth(selectedDate, generateConfig2.getMonth(defaultValue));
selectedDate = generateConfig2.setDate(selectedDate, generateConfig2.getDate(defaultValue));
}
if (onSelect) {
onSelect(selectedDate, "mouse");
}
};
const disabledTimes = disabledTime ? disabledTime(value || null) : {};
return createVNode("div", {
"class": classNames(panelPrefixCls, {
[`${panelPrefixCls}-active`]: activePanel.value
})
}, [createVNode(DatePanel, _objectSpread$3(_objectSpread$3({}, props), {}, {
"operationRef": dateOperationRef,
"active": activePanel.value === "date",
"onSelect": (date) => {
onInternalSelect(setDateTime(generateConfig2, date, !value && typeof showTime === "object" ? showTime.defaultValue : null), "date");
}
}), null), createVNode(TimePanel, _objectSpread$3(_objectSpread$3(_objectSpread$3(_objectSpread$3({}, props), {}, {
"format": void 0
}, timeProps), disabledTimes), {}, {
"disabledTime": null,
"defaultValue": void 0,
"operationRef": timeOperationRef,
"active": activePanel.value === "time",
"onSelect": (date) => {
onInternalSelect(date, "time");
}
}), null)]);
}
DatetimePanel.displayName = "DatetimePanel";
DatetimePanel.inheritAttrs = false;
function WeekPanel(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
generateConfig: generateConfig2,
locale: locale2,
value
} = props;
const cellPrefixCls = `${prefixCls}-cell`;
const prefixColumn = (date) => createVNode("td", {
"key": "week",
"class": classNames(cellPrefixCls, `${cellPrefixCls}-week`)
}, [generateConfig2.locale.getWeek(locale2.locale, date)]);
const rowPrefixCls = `${prefixCls}-week-panel-row`;
const rowClassName = (date) => classNames(rowPrefixCls, {
[`${rowPrefixCls}-selected`]: isSameWeek(generateConfig2, locale2.locale, value, date)
});
return createVNode(DatePanel, _objectSpread$3(_objectSpread$3({}, props), {}, {
"panelName": "week",
"prefixColumn": prefixColumn,
"rowClassName": rowClassName,
"keyboardConfig": {
onLeftRight: null
}
}), null);
}
WeekPanel.displayName = "WeekPanel";
WeekPanel.inheritAttrs = false;
function MonthHeader(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
generateConfig: generateConfig2,
locale: locale2,
viewDate,
onNextYear,
onPrevYear,
onYearClick
} = props;
const {
hideHeader
} = useInjectPanel();
if (hideHeader.value) {
return null;
}
const headerPrefixCls = `${prefixCls}-header`;
return createVNode(Header, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": headerPrefixCls,
"onSuperPrev": onPrevYear,
"onSuperNext": onNextYear
}), {
default: () => [createVNode("button", {
"type": "button",
"onClick": onYearClick,
"class": `${prefixCls}-year-btn`
}, [formatValue(viewDate, {
locale: locale2,
format: locale2.yearFormat,
generateConfig: generateConfig2
})])]
});
}
MonthHeader.displayName = "MonthHeader";
MonthHeader.inheritAttrs = false;
const MONTH_COL_COUNT = 3;
const MONTH_ROW_COUNT = 4;
function MonthBody(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
locale: locale2,
value,
viewDate,
generateConfig: generateConfig2,
monthCellRender
} = props;
const {
rangedValue,
hoverRangedValue
} = useInjectRange();
const cellPrefixCls = `${prefixCls}-cell`;
const getCellClassName = useCellClassName({
cellPrefixCls,
value,
generateConfig: generateConfig2,
rangedValue: rangedValue.value,
hoverRangedValue: hoverRangedValue.value,
isSameCell: (current, target) => isSameMonth(generateConfig2, current, target),
isInView: () => true,
offsetCell: (date, offset) => generateConfig2.addMonth(date, offset)
});
const monthsLocale = locale2.shortMonths || (generateConfig2.locale.getShortMonths ? generateConfig2.locale.getShortMonths(locale2.locale) : []);
const baseMonth = generateConfig2.setMonth(viewDate, 0);
const getCellNode = monthCellRender ? (date) => monthCellRender({
current: date,
locale: locale2
}) : void 0;
return createVNode(PanelBody, _objectSpread$3(_objectSpread$3({}, props), {}, {
"rowNum": MONTH_ROW_COUNT,
"colNum": MONTH_COL_COUNT,
"baseDate": baseMonth,
"getCellNode": getCellNode,
"getCellText": (date) => locale2.monthFormat ? formatValue(date, {
locale: locale2,
format: locale2.monthFormat,
generateConfig: generateConfig2
}) : monthsLocale[generateConfig2.getMonth(date)],
"getCellClassName": getCellClassName,
"getCellDate": generateConfig2.addMonth,
"titleCell": (date) => formatValue(date, {
locale: locale2,
format: "YYYY-MM",
generateConfig: generateConfig2
})
}), null);
}
MonthBody.displayName = "MonthBody";
MonthBody.inheritAttrs = false;
function MonthPanel(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
operationRef,
onViewDateChange,
generateConfig: generateConfig2,
value,
viewDate,
onPanelChange,
onSelect
} = props;
const panelPrefixCls = `${prefixCls}-month-panel`;
operationRef.value = {
onKeydown: (event) => createKeydownHandler(event, {
onLeftRight: (diff) => {
onSelect(generateConfig2.addMonth(value || viewDate, diff), "key");
},
onCtrlLeftRight: (diff) => {
onSelect(generateConfig2.addYear(value || viewDate, diff), "key");
},
onUpDown: (diff) => {
onSelect(generateConfig2.addMonth(value || viewDate, diff * MONTH_COL_COUNT), "key");
},
onEnter: () => {
onPanelChange("date", value || viewDate);
}
})
};
const onYearChange = (diff) => {
const newDate = generateConfig2.addYear(viewDate, diff);
onViewDateChange(newDate);
onPanelChange(null, newDate);
};
return createVNode("div", {
"class": panelPrefixCls
}, [createVNode(MonthHeader, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": prefixCls,
"onPrevYear": () => {
onYearChange(-1);
},
"onNextYear": () => {
onYearChange(1);
},
"onYearClick": () => {
onPanelChange("year", viewDate);
}
}), null), createVNode(MonthBody, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": prefixCls,
"onSelect": (date) => {
onSelect(date, "mouse");
onPanelChange("date", date);
}
}), null)]);
}
MonthPanel.displayName = "MonthPanel";
MonthPanel.inheritAttrs = false;
function QuarterHeader(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
generateConfig: generateConfig2,
locale: locale2,
viewDate,
onNextYear,
onPrevYear,
onYearClick
} = props;
const {
hideHeader
} = useInjectPanel();
if (hideHeader.value) {
return null;
}
const headerPrefixCls = `${prefixCls}-header`;
return createVNode(Header, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": headerPrefixCls,
"onSuperPrev": onPrevYear,
"onSuperNext": onNextYear
}), {
default: () => [createVNode("button", {
"type": "button",
"onClick": onYearClick,
"class": `${prefixCls}-year-btn`
}, [formatValue(viewDate, {
locale: locale2,
format: locale2.yearFormat,
generateConfig: generateConfig2
})])]
});
}
QuarterHeader.displayName = "QuarterHeader";
QuarterHeader.inheritAttrs = false;
const QUARTER_COL_COUNT = 4;
const QUARTER_ROW_COUNT = 1;
function QuarterBody(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
locale: locale2,
value,
viewDate,
generateConfig: generateConfig2
} = props;
const {
rangedValue,
hoverRangedValue
} = useInjectRange();
const cellPrefixCls = `${prefixCls}-cell`;
const getCellClassName = useCellClassName({
cellPrefixCls,
value,
generateConfig: generateConfig2,
rangedValue: rangedValue.value,
hoverRangedValue: hoverRangedValue.value,
isSameCell: (current, target) => isSameQuarter(generateConfig2, current, target),
isInView: () => true,
offsetCell: (date, offset) => generateConfig2.addMonth(date, offset * 3)
});
const baseQuarter = generateConfig2.setDate(generateConfig2.setMonth(viewDate, 0), 1);
return createVNode(PanelBody, _objectSpread$3(_objectSpread$3({}, props), {}, {
"rowNum": QUARTER_ROW_COUNT,
"colNum": QUARTER_COL_COUNT,
"baseDate": baseQuarter,
"getCellText": (date) => formatValue(date, {
locale: locale2,
format: locale2.quarterFormat || "[Q]Q",
generateConfig: generateConfig2
}),
"getCellClassName": getCellClassName,
"getCellDate": (date, offset) => generateConfig2.addMonth(date, offset * 3),
"titleCell": (date) => formatValue(date, {
locale: locale2,
format: "YYYY-[Q]Q",
generateConfig: generateConfig2
})
}), null);
}
QuarterBody.displayName = "QuarterBody";
QuarterBody.inheritAttrs = false;
function QuarterPanel(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
operationRef,
onViewDateChange,
generateConfig: generateConfig2,
value,
viewDate,
onPanelChange,
onSelect
} = props;
const panelPrefixCls = `${prefixCls}-quarter-panel`;
operationRef.value = {
onKeydown: (event) => createKeydownHandler(event, {
onLeftRight: (diff) => {
onSelect(generateConfig2.addMonth(value || viewDate, diff * 3), "key");
},
onCtrlLeftRight: (diff) => {
onSelect(generateConfig2.addYear(value || viewDate, diff), "key");
},
onUpDown: (diff) => {
onSelect(generateConfig2.addYear(value || viewDate, diff), "key");
}
})
};
const onYearChange = (diff) => {
const newDate = generateConfig2.addYear(viewDate, diff);
onViewDateChange(newDate);
onPanelChange(null, newDate);
};
return createVNode("div", {
"class": panelPrefixCls
}, [createVNode(QuarterHeader, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": prefixCls,
"onPrevYear": () => {
onYearChange(-1);
},
"onNextYear": () => {
onYearChange(1);
},
"onYearClick": () => {
onPanelChange("year", viewDate);
}
}), null), createVNode(QuarterBody, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": prefixCls,
"onSelect": (date) => {
onSelect(date, "mouse");
}
}), null)]);
}
QuarterPanel.displayName = "QuarterPanel";
QuarterPanel.inheritAttrs = false;
function YearHeader(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
generateConfig: generateConfig2,
viewDate,
onPrevDecade,
onNextDecade,
onDecadeClick
} = props;
const {
hideHeader
} = useInjectPanel();
if (hideHeader.value) {
return null;
}
const headerPrefixCls = `${prefixCls}-header`;
const yearNumber = generateConfig2.getYear(viewDate);
const startYear = Math.floor(yearNumber / YEAR_DECADE_COUNT) * YEAR_DECADE_COUNT;
const endYear = startYear + YEAR_DECADE_COUNT - 1;
return createVNode(Header, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": headerPrefixCls,
"onSuperPrev": onPrevDecade,
"onSuperNext": onNextDecade
}), {
default: () => [createVNode("button", {
"type": "button",
"onClick": onDecadeClick,
"class": `${prefixCls}-decade-btn`
}, [startYear, createTextVNode("-"), endYear])]
});
}
YearHeader.displayName = "YearHeader";
YearHeader.inheritAttrs = false;
const YEAR_COL_COUNT = 3;
const YEAR_ROW_COUNT = 4;
function YearBody(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
value,
viewDate,
locale: locale2,
generateConfig: generateConfig2
} = props;
const {
rangedValue,
hoverRangedValue
} = useInjectRange();
const yearPrefixCls = `${prefixCls}-cell`;
const yearNumber = generateConfig2.getYear(viewDate);
const startYear = Math.floor(yearNumber / YEAR_DECADE_COUNT) * YEAR_DECADE_COUNT;
const endYear = startYear + YEAR_DECADE_COUNT - 1;
const baseYear = generateConfig2.setYear(viewDate, startYear - Math.ceil((YEAR_COL_COUNT * YEAR_ROW_COUNT - YEAR_DECADE_COUNT) / 2));
const isInView = (date) => {
const currentYearNumber = generateConfig2.getYear(date);
return startYear <= currentYearNumber && currentYearNumber <= endYear;
};
const getCellClassName = useCellClassName({
cellPrefixCls: yearPrefixCls,
value,
generateConfig: generateConfig2,
rangedValue: rangedValue.value,
hoverRangedValue: hoverRangedValue.value,
isSameCell: (current, target) => isSameYear(generateConfig2, current, target),
isInView,
offsetCell: (date, offset) => generateConfig2.addYear(date, offset)
});
return createVNode(PanelBody, _objectSpread$3(_objectSpread$3({}, props), {}, {
"rowNum": YEAR_ROW_COUNT,
"colNum": YEAR_COL_COUNT,
"baseDate": baseYear,
"getCellText": generateConfig2.getYear,
"getCellClassName": getCellClassName,
"getCellDate": generateConfig2.addYear,
"titleCell": (date) => formatValue(date, {
locale: locale2,
format: "YYYY",
generateConfig: generateConfig2
})
}), null);
}
YearBody.displayName = "YearBody";
YearBody.inheritAttrs = false;
const YEAR_DECADE_COUNT = 10;
function YearPanel(_props) {
const props = useMergeProps(_props);
const {
prefixCls,
operationRef,
onViewDateChange,
generateConfig: generateConfig2,
value,
viewDate,
sourceMode,
onSelect,
onPanelChange
} = props;
const panelPrefixCls = `${prefixCls}-year-panel`;
operationRef.value = {
onKeydown: (event) => createKeydownHandler(event, {
onLeftRight: (diff) => {
onSelect(generateConfig2.addYear(value || viewDate, diff), "key");
},
onCtrlLeftRight: (diff) => {
onSelect(generateConfig2.addYear(value || viewDate, diff * YEAR_DECADE_COUNT), "key");
},
onUpDown: (diff) => {
onSelect(generateConfig2.addYear(value || viewDate, diff * YEAR_COL_COUNT), "key");
},
onEnter: () => {
onPanelChange(sourceMode === "date" ? "date" : "month", value || viewDate);
}
})
};
const onDecadeChange = (diff) => {
const newDate = generateConfig2.addYear(viewDate, diff * 10);
onViewDateChange(newDate);
onPanelChange(null, newDate);
};
return createVNode("div", {
"class": panelPrefixCls
}, [createVNode(YearHeader, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": prefixCls,
"onPrevDecade": () => {
onDecadeChange(-1);
},
"onNextDecade": () => {
onDecadeChange(1);
},
"onDecadeClick": () => {
onPanelChange("decade", viewDate);
}
}), null), createVNode(YearBody, _objectSpread$3(_objectSpread$3({}, props), {}, {
"prefixCls": prefixCls,
"onSelect": (date) => {
onPanelChange(sourceMode === "date" ? "date" : "month", date);
onSelect(date, "mouse");
}
}), null)]);
}
YearPanel.displayName = "YearPanel";
YearPanel.inheritAttrs = false;
function getExtraFooter(prefixCls, mode, renderExtraFooter) {
if (!renderExtraFooter) {
return null;
}
return createVNode("div", {
"class": `${prefixCls}-footer-extra`
}, [renderExtraFooter(mode)]);
}
function getRanges(_ref) {
let {
prefixCls,
components = {},
needConfirmButton,
onNow,
onOk,
okDisabled,
showNow,
locale: locale2
} = _ref;
let presetNode;
let okNode;
if (needConfirmButton) {
const Button2 = components.button || "button";
if (onNow && showNow !== false) {
presetNode = createVNode("li", {
"class": `${prefixCls}-now`
}, [createVNode("a", {
"class": `${prefixCls}-now-btn`,
"onClick": onNow
}, [locale2.now])]);
}
okNode = needConfirmButton && createVNode("li", {
"class": `${prefixCls}-ok`
}, [createVNode(Button2, {
"disabled": okDisabled,
"onClick": (e) => {
e.stopPropagation();
onOk && onOk();
}
}, {
default: () => [locale2.ok]
})]);
}
if (!presetNode && !okNode) {
return null;
}
return createVNode("ul", {
"class": `${prefixCls}-ranges`
}, [presetNode, okNode]);
}
function PickerPanel() {
return defineComponent({
name: "PickerPanel",
inheritAttrs: false,
props: {
prefixCls: String,
locale: Object,
generateConfig: Object,
value: Object,
defaultValue: Object,
pickerValue: Object,
defaultPickerValue: Object,
disabledDate: Function,
mode: String,
picker: {
type: String,
default: "date"
},
tabindex: {
type: [Number, String],
default: 0
},
showNow: {
type: Boolean,
default: void 0
},
showTime: [Boolean, Object],
showToday: Boolean,
renderExtraFooter: Function,
dateRender: Function,
hideHeader: {
type: Boolean,
default: void 0
},
onSelect: Function,
onChange: Function,
onPanelChange: Function,
onMousedown: Function,
onPickerValueChange: Function,
onOk: Function,
components: Object,
direction: String,
hourStep: {
type: Number,
default: 1
},
minuteStep: {
type: Number,
default: 1
},
secondStep: {
type: Number,
default: 1
}
},
setup(props, _ref) {
let {
attrs
} = _ref;
const needConfirmButton = computed(() => props.picker === "date" && !!props.showTime || props.picker === "time");
const isHourStepValid = computed(() => 24 % props.hourStep === 0);
const isMinuteStepValid = computed(() => 60 % props.minuteStep === 0);
const isSecondStepValid = computed(() => 60 % props.secondStep === 0);
const panelContext = useInjectPanel();
const {
operationRef,
onSelect: onContextSelect,
hideRanges,
defaultOpenValue
} = panelContext;
const {
inRange,
panelPosition,
rangedValue,
hoverRangedValue
} = useInjectRange();
const panelRef = ref({});
const [mergedValue, setInnerValue] = useMergedState(null, {
value: toRef(props, "value"),
defaultValue: props.defaultValue,
postState: (val) => {
if (!val && (defaultOpenValue === null || defaultOpenValue === void 0 ? void 0 : defaultOpenValue.value) && props.picker === "time") {
return defaultOpenValue.value;
}
return val;
}
});
const [viewDate, setInnerViewDate] = useMergedState(null, {
value: toRef(props, "pickerValue"),
defaultValue: props.defaultPickerValue || mergedValue.value,
postState: (date) => {
const {
generateConfig: generateConfig2,
showTime,
defaultValue
} = props;
const now = generateConfig2.getNow();
if (!date) return now;
if (!mergedValue.value && props.showTime) {
if (typeof showTime === "object") {
return setDateTime(generateConfig2, Array.isArray(date) ? date[0] : date, showTime.defaultValue || now);
}
if (defaultValue) {
return setDateTime(generateConfig2, Array.isArray(date) ? date[0] : date, defaultValue);
}
return setDateTime(generateConfig2, Array.isArray(date) ? date[0] : date, now);
}
return date;
}
});
const setViewDate = (date) => {
setInnerViewDate(date);
if (props.onPickerValueChange) {
props.onPickerValueChange(date);
}
};
const getInternalNextMode = (nextMode) => {
const getNextMode = PickerModeMap[props.picker];
if (getNextMode) {
return getNextMode(nextMode);
}
return nextMode;
};
const [mergedMode, setInnerMode] = useMergedState(() => {
if (props.picker === "time") {
return "time";
}
return getInternalNextMode("date");
}, {
value: toRef(props, "mode")
});
watch(() => props.picker, () => {
setInnerMode(props.picker);
});
const sourceMode = ref(mergedMode.value);
const setSourceMode = (val) => {
sourceMode.value = val;
};
const onInternalPanelChange = (newMode, viewValue) => {
const {
onPanelChange,
generateConfig: generateConfig2
} = props;
const nextMode = getInternalNextMode(newMode || mergedMode.value);
setSourceMode(mergedMode.value);
setInnerMode(nextMode);
if (onPanelChange && (mergedMode.value !== nextMode || isEqual(generateConfig2, viewDate.value, viewDate.value))) {
onPanelChange(viewValue, nextMode);
}
};
const triggerSelect = function(date, type) {
let forceTriggerSelect = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;
const {
picker,
generateConfig: generateConfig2,
onSelect,
onChange,
disabledDate
} = props;
if (mergedMode.value === picker || forceTriggerSelect) {
setInnerValue(date);
if (onSelect) {
onSelect(date);
}
if (onContextSelect) {
onContextSelect(date, type);
}
if (onChange && !isEqual(generateConfig2, date, mergedValue.value) && !(disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date))) {
onChange(date);
}
}
};
const onInternalKeydown = (e) => {
if (panelRef.value && panelRef.value.onKeydown) {
if ([KeyCode.LEFT, KeyCode.RIGHT, KeyCode.UP, KeyCode.DOWN, KeyCode.PAGE_UP, KeyCode.PAGE_DOWN, KeyCode.ENTER].includes(e.which)) {
e.preventDefault();
}
return panelRef.value.onKeydown(e);
}
{
return false;
}
};
const onInternalBlur = (e) => {
if (panelRef.value && panelRef.value.onBlur) {
panelRef.value.onBlur(e);
}
};
const onNow = () => {
const {
generateConfig: generateConfig2,
hourStep,
minuteStep,
secondStep
} = props;
const now = generateConfig2.getNow();
const lowerBoundTime = getLowerBoundTime(generateConfig2.getHour(now), generateConfig2.getMinute(now), generateConfig2.getSecond(now), isHourStepValid.value ? hourStep : 1, isMinuteStepValid.value ? minuteStep : 1, isSecondStepValid.value ? secondStep : 1);
const adjustedNow = setTime(
generateConfig2,
now,
lowerBoundTime[0],
// hour
lowerBoundTime[1],
// minute
lowerBoundTime[2]
);
triggerSelect(adjustedNow, "submit");
};
const classString = computed(() => {
const {
prefixCls,
direction
} = props;
return classNames(`${prefixCls}-panel`, {
[`${prefixCls}-panel-has-range`]: rangedValue && rangedValue.value && rangedValue.value[0] && rangedValue.value[1],
[`${prefixCls}-panel-has-range-hover`]: hoverRangedValue && hoverRangedValue.value && hoverRangedValue.value[0] && hoverRangedValue.value[1],
[`${prefixCls}-panel-rtl`]: direction === "rtl"
});
});
useProvidePanel(_extends(_extends({}, panelContext), {
mode: mergedMode,
hideHeader: computed(() => {
var _a;
return props.hideHeader !== void 0 ? props.hideHeader : (_a = panelContext.hideHeader) === null || _a === void 0 ? void 0 : _a.value;
}),
hidePrevBtn: computed(() => inRange.value && panelPosition.value === "right"),
hideNextBtn: computed(() => inRange.value && panelPosition.value === "left")
}));
watch(() => props.value, () => {
if (props.value) {
setInnerViewDate(props.value);
}
});
return () => {
const {
prefixCls = "ant-picker",
locale: locale2,
generateConfig: generateConfig2,
disabledDate,
picker = "date",
tabindex = 0,
showNow,
showTime,
showToday,
renderExtraFooter,
onMousedown,
onOk,
components
} = props;
if (operationRef && panelPosition.value !== "right") {
operationRef.value = {
onKeydown: onInternalKeydown,
onClose: () => {
if (panelRef.value && panelRef.value.onClose) {
panelRef.value.onClose();
}
}
};
}
let panelNode;
const pickerProps = _extends(_extends(_extends({}, attrs), props), {
operationRef: panelRef,
prefixCls,
viewDate: viewDate.value,
value: mergedValue.value,
onViewDateChange: setViewDate,
sourceMode: sourceMode.value,
onPanelChange: onInternalPanelChange,
disabledDate
});
delete pickerProps.onChange;
delete pickerProps.onSelect;
switch (mergedMode.value) {
case "decade":
panelNode = createVNode(DecadePanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, {
"onSelect": (date, type) => {
setViewDate(date);
triggerSelect(date, type);
}
}), null);
break;
case "year":
panelNode = createVNode(YearPanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, {
"onSelect": (date, type) => {
setViewDate(date);
triggerSelect(date, type);
}
}), null);
break;
case "month":
panelNode = createVNode(MonthPanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, {
"onSelect": (date, type) => {
setViewDate(date);
triggerSelect(date, type);
}
}), null);
break;
case "quarter":
panelNode = createVNode(QuarterPanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, {
"onSelect": (date, type) => {
setViewDate(date);
triggerSelect(date, type);
}
}), null);
break;
case "week":
panelNode = createVNode(WeekPanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, {
"onSelect": (date, type) => {
setViewDate(date);
triggerSelect(date, type);
}
}), null);
break;
case "time":
delete pickerProps.showTime;
panelNode = createVNode(TimePanel, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, pickerProps), typeof showTime === "object" ? showTime : null), {}, {
"onSelect": (date, type) => {
setViewDate(date);
triggerSelect(date, type);
}
}), null);
break;
default:
if (showTime) {
panelNode = createVNode(DatetimePanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, {
"onSelect": (date, type) => {
setViewDate(date);
triggerSelect(date, type);
}
}), null);
} else {
panelNode = createVNode(DatePanel, _objectSpread$3(_objectSpread$3({}, pickerProps), {}, {
"onSelect": (date, type) => {
setViewDate(date);
triggerSelect(date, type);
}
}), null);
}
}
let extraFooter;
let rangesNode;
if (!(hideRanges === null || hideRanges === void 0 ? void 0 : hideRanges.value)) {
extraFooter = getExtraFooter(prefixCls, mergedMode.value, renderExtraFooter);
rangesNode = getRanges({
prefixCls,
components,
needConfirmButton: needConfirmButton.value,
okDisabled: !mergedValue.value || disabledDate && disabledDate(mergedValue.value),
locale: locale2,
showNow,
onNow: needConfirmButton.value && onNow,
onOk: () => {
if (mergedValue.value) {
triggerSelect(mergedValue.value, "submit", true);
if (onOk) {
onOk(mergedValue.value);
}
}
}
});
}
let todayNode;
if (showToday && mergedMode.value === "date" && picker === "date" && !showTime) {
const now = generateConfig2.getNow();
const todayCls = `${prefixCls}-today-btn`;
const disabled = disabledDate && disabledDate(now);
todayNode = createVNode("a", {
"class": classNames(todayCls, disabled && `${todayCls}-disabled`),
"aria-disabled": disabled,
"onClick": () => {
if (!disabled) {
triggerSelect(now, "mouse", true);
}
}
}, [locale2.today]);
}
return createVNode("div", {
"tabindex": tabindex,
"class": classNames(classString.value, attrs.class),
"style": attrs.style,
"onKeydown": onInternalKeydown,
"onBlur": onInternalBlur,
"onMousedown": onMousedown
}, [panelNode, extraFooter || rangesNode || todayNode ? createVNode("div", {
"class": `${prefixCls}-footer`
}, [extraFooter, rangesNode, todayNode]) : null]);
};
}
});
}
const InterPickerPanel = PickerPanel();
const PickerPanel$1 = (props) => createVNode(InterPickerPanel, props);
const BUILT_IN_PLACEMENTS = {
bottomLeft: {
points: ["tl", "bl"],
offset: [0, 4],
overflow: {
adjustX: 1,
adjustY: 1
}
},
bottomRight: {
points: ["tr", "br"],
offset: [0, 4],
overflow: {
adjustX: 1,
adjustY: 1
}
},
topLeft: {
points: ["bl", "tl"],
offset: [0, -4],
overflow: {
adjustX: 0,
adjustY: 1
}
},
topRight: {
points: ["br", "tr"],
offset: [0, -4],
overflow: {
adjustX: 0,
adjustY: 1
}
}
};
function PickerTrigger(props, _ref) {
let {
slots
} = _ref;
const {
prefixCls,
popupStyle,
visible,
dropdownClassName,
dropdownAlign,
transitionName,
getPopupContainer,
range,
popupPlacement,
direction
} = useMergeProps(props);
const dropdownPrefixCls = `${prefixCls}-dropdown`;
const getPopupPlacement = () => {
if (popupPlacement !== void 0) {
return popupPlacement;
}
return direction === "rtl" ? "bottomRight" : "bottomLeft";
};
return createVNode(Trigger, {
"showAction": [],
"hideAction": [],
"popupPlacement": getPopupPlacement(),
"builtinPlacements": BUILT_IN_PLACEMENTS,
"prefixCls": dropdownPrefixCls,
"popupTransitionName": transitionName,
"popupAlign": dropdownAlign,
"popupVisible": visible,
"popupClassName": classNames(dropdownClassName, {
[`${dropdownPrefixCls}-range`]: range,
[`${dropdownPrefixCls}-rtl`]: direction === "rtl"
}),
"popupStyle": popupStyle,
"getPopupContainer": getPopupContainer
}, {
default: slots.default,
popup: slots.popupElement
});
}
const PresetPanel = defineComponent({
name: "PresetPanel",
props: {
prefixCls: String,
presets: {
type: Array,
default: () => []
},
onClick: Function,
onHover: Function
},
setup(props) {
return () => {
if (!props.presets.length) {
return null;
}
return createVNode("div", {
"class": `${props.prefixCls}-presets`
}, [createVNode("ul", null, [props.presets.map((_ref, index) => {
let {
label,
value
} = _ref;
return createVNode("li", {
"key": index,
"onClick": (e) => {
e.stopPropagation();
props.onClick(value);
},
"onMouseenter": () => {
var _a;
(_a = props.onHover) === null || _a === void 0 ? void 0 : _a.call(props, value);
},
"onMouseleave": () => {
var _a;
(_a = props.onHover) === null || _a === void 0 ? void 0 : _a.call(props, null);
}
}, [label]);
})])]);
};
}
});
function usePickerInput(_ref) {
let {
open,
value,
isClickOutside,
triggerOpen,
forwardKeydown,
onKeydown,
blurToCancel,
onSubmit,
onCancel,
onFocus,
onBlur
} = _ref;
const typing = shallowRef(false);
const focused = shallowRef(false);
const preventBlurRef = shallowRef(false);
const valueChangedRef = shallowRef(false);
const preventDefaultRef = shallowRef(false);
const inputProps = computed(() => ({
onMousedown: () => {
typing.value = true;
triggerOpen(true);
},
onKeydown: (e) => {
const preventDefault = () => {
preventDefaultRef.value = true;
};
onKeydown(e, preventDefault);
if (preventDefaultRef.value) return;
switch (e.which) {
case KeyCode.ENTER: {
if (!open.value) {
triggerOpen(true);
} else if (onSubmit() !== false) {
typing.value = true;
}
e.preventDefault();
return;
}
case KeyCode.TAB: {
if (typing.value && open.value && !e.shiftKey) {
typing.value = false;
e.preventDefault();
} else if (!typing.value && open.value) {
if (!forwardKeydown(e) && e.shiftKey) {
typing.value = true;
e.preventDefault();
}
}
return;
}
case KeyCode.ESC: {
typing.value = true;
onCancel();
return;
}
}
if (!open.value && ![KeyCode.SHIFT].includes(e.which)) {
triggerOpen(true);
} else if (!typing.value) {
forwardKeydown(e);
}
},
onFocus: (e) => {
typing.value = true;
focused.value = true;
if (onFocus) {
onFocus(e);
}
},
onBlur: (e) => {
if (preventBlurRef.value || !isClickOutside((void 0).activeElement)) {
preventBlurRef.value = false;
return;
}
if (blurToCancel.value) {
setTimeout(() => {
let {
activeElement
} = void 0;
while (activeElement && activeElement.shadowRoot) {
activeElement = activeElement.shadowRoot.activeElement;
}
if (isClickOutside(activeElement)) {
onCancel();
}
}, 0);
} else if (open.value) {
triggerOpen(false);
if (valueChangedRef.value) {
onSubmit();
}
}
focused.value = false;
if (onBlur) {
onBlur(e);
}
}
}));
watch(open, () => {
valueChangedRef.value = false;
});
watch(value, () => {
valueChangedRef.value = true;
});
shallowRef();
return [inputProps, {
focused,
typing
}];
}
function useTextValueMapping(_ref) {
let {
valueTexts,
onTextChange
} = _ref;
const text = ref("");
function triggerTextChange(value) {
text.value = value;
onTextChange(value);
}
function resetText() {
text.value = valueTexts.value[0];
}
watch(() => [...valueTexts.value], function(cur) {
let pre = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
if (cur.join("||") !== pre.join("||") && valueTexts.value.every((valText) => valText !== text.value)) {
resetText();
}
}, {
immediate: true
});
return [text, triggerTextChange, resetText];
}
function useValueTexts(value, _ref) {
let {
formatList,
generateConfig: generateConfig2,
locale: locale2
} = _ref;
const texts = useMemo(() => {
if (!value.value) {
return [[""], ""];
}
let firstValueText2 = "";
const fullValueTexts2 = [];
for (let i = 0; i < formatList.value.length; i += 1) {
const format = formatList.value[i];
const formatStr = formatValue(value.value, {
generateConfig: generateConfig2.value,
locale: locale2.value,
format
});
fullValueTexts2.push(formatStr);
if (i === 0) {
firstValueText2 = formatStr;
}
}
return [fullValueTexts2, firstValueText2];
}, [value, formatList], (next, prev) => prev[0] !== next[0] || !shallowequal(prev[1], next[1]));
const fullValueTexts = computed(() => texts.value[0]);
const firstValueText = computed(() => texts.value[1]);
return [fullValueTexts, firstValueText];
}
function useHoverValue(valueText, _ref) {
let {
formatList,
generateConfig: generateConfig2,
locale: locale2
} = _ref;
const innerValue = ref(null);
let rafId;
function setValue(val) {
let immediately = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
wrapperRaf.cancel(rafId);
if (immediately) {
innerValue.value = val;
return;
}
rafId = wrapperRaf(() => {
innerValue.value = val;
});
}
const [, firstText] = useValueTexts(innerValue, {
formatList,
generateConfig: generateConfig2,
locale: locale2
});
function onEnter(date) {
setValue(date);
}
function onLeave() {
let immediately = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
setValue(null, immediately);
}
watch(valueText, () => {
onLeave(true);
});
return [firstText, onEnter, onLeave];
}
function usePresets(presets, legacyRanges) {
return computed(() => {
if (presets === null || presets === void 0 ? void 0 : presets.value) {
return presets.value;
}
if (legacyRanges === null || legacyRanges === void 0 ? void 0 : legacyRanges.value) {
warningOnce(false, "`ranges` is deprecated. Please use `presets` instead.");
const rangeLabels = Object.keys(legacyRanges.value);
return rangeLabels.map((label) => {
const range = legacyRanges.value[label];
const newValues = typeof range === "function" ? range() : range;
return {
label,
value: newValues
};
});
}
return [];
});
}
function Picker() {
return defineComponent({
name: "Picker",
inheritAttrs: false,
props: ["prefixCls", "id", "tabindex", "dropdownClassName", "dropdownAlign", "popupStyle", "transitionName", "generateConfig", "locale", "inputReadOnly", "allowClear", "autofocus", "showTime", "showNow", "showHour", "showMinute", "showSecond", "picker", "format", "use12Hours", "value", "defaultValue", "open", "defaultOpen", "defaultOpenValue", "suffixIcon", "presets", "clearIcon", "disabled", "disabledDate", "placeholder", "getPopupContainer", "panelRender", "inputRender", "onChange", "onOpenChange", "onPanelChange", "onFocus", "onBlur", "onMousedown", "onMouseup", "onMouseenter", "onMouseleave", "onContextmenu", "onClick", "onKeydown", "onSelect", "direction", "autocomplete", "showToday", "renderExtraFooter", "dateRender", "minuteStep", "hourStep", "secondStep", "hideDisabledOptions"],
setup(props, _ref) {
let {
attrs,
expose
} = _ref;
const inputRef = ref(null);
const presets = computed(() => props.presets);
const presetList = usePresets(presets);
const picker = computed(() => {
var _a;
return (_a = props.picker) !== null && _a !== void 0 ? _a : "date";
});
const needConfirmButton = computed(() => picker.value === "date" && !!props.showTime || picker.value === "time");
const formatList = computed(() => toArray$1(getDefaultFormat(props.format, picker.value, props.showTime, props.use12Hours)));
const panelDivRef = ref(null);
const inputDivRef = ref(null);
const containerRef = ref(null);
const [mergedValue, setInnerValue] = useMergedState(null, {
value: toRef(props, "value"),
defaultValue: props.defaultValue
});
const selectedValue = ref(mergedValue.value);
const setSelectedValue = (val) => {
selectedValue.value = val;
};
const operationRef = ref(null);
const [mergedOpen, triggerInnerOpen] = useMergedState(false, {
value: toRef(props, "open"),
defaultValue: props.defaultOpen,
postState: (postOpen) => props.disabled ? false : postOpen,
onChange: (newOpen) => {
if (props.onOpenChange) {
props.onOpenChange(newOpen);
}
if (!newOpen && operationRef.value && operationRef.value.onClose) {
operationRef.value.onClose();
}
}
});
const [valueTexts, firstValueText] = useValueTexts(selectedValue, {
formatList,
generateConfig: toRef(props, "generateConfig"),
locale: toRef(props, "locale")
});
const [text, triggerTextChange, resetText] = useTextValueMapping({
valueTexts,
onTextChange: (newText) => {
const inputDate = parseValue(newText, {
locale: props.locale,
formatList: formatList.value,
generateConfig: props.generateConfig
});
if (inputDate && (!props.disabledDate || !props.disabledDate(inputDate))) {
setSelectedValue(inputDate);
}
}
});
const triggerChange = (newValue) => {
const {
onChange,
generateConfig: generateConfig2,
locale: locale2
} = props;
setSelectedValue(newValue);
setInnerValue(newValue);
if (onChange && !isEqual(generateConfig2, mergedValue.value, newValue)) {
onChange(newValue, newValue ? formatValue(newValue, {
generateConfig: generateConfig2,
locale: locale2,
format: formatList.value[0]
}) : "");
}
};
const triggerOpen = (newOpen) => {
if (props.disabled && newOpen) {
return;
}
triggerInnerOpen(newOpen);
};
const forwardKeydown = (e) => {
if (mergedOpen.value && operationRef.value && operationRef.value.onKeydown) {
return operationRef.value.onKeydown(e);
}
{
return false;
}
};
const onInternalMouseup = function() {
if (props.onMouseup) {
props.onMouseup(...arguments);
}
if (inputRef.value) {
inputRef.value.focus();
triggerOpen(true);
}
};
const [inputProps, {
focused,
typing
}] = usePickerInput({
blurToCancel: needConfirmButton,
open: mergedOpen,
value: text,
triggerOpen,
forwardKeydown,
isClickOutside: (target) => !elementsContains([panelDivRef.value, inputDivRef.value, containerRef.value], target),
onSubmit: () => {
if (
// When user typing disabledDate with keyboard and enter, this value will be empty
!selectedValue.value || // Normal disabled check
props.disabledDate && props.disabledDate(selectedValue.value)
) {
return false;
}
triggerChange(selectedValue.value);
triggerOpen(false);
resetText();
return true;
},
onCancel: () => {
triggerOpen(false);
setSelectedValue(mergedValue.value);
resetText();
},
onKeydown: (e, preventDefault) => {
var _a;
(_a = props.onKeydown) === null || _a === void 0 ? void 0 : _a.call(props, e, preventDefault);
},
onFocus: (e) => {
var _a;
(_a = props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, e);
},
onBlur: (e) => {
var _a;
(_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
}
});
watch([mergedOpen, valueTexts], () => {
if (!mergedOpen.value) {
setSelectedValue(mergedValue.value);
if (!valueTexts.value.length || valueTexts.value[0] === "") {
triggerTextChange("");
} else if (firstValueText.value !== text.value) {
resetText();
}
}
});
watch(picker, () => {
if (!mergedOpen.value) {
resetText();
}
});
watch(mergedValue, () => {
setSelectedValue(mergedValue.value);
});
const [hoverValue, onEnter, onLeave] = useHoverValue(text, {
formatList,
generateConfig: toRef(props, "generateConfig"),
locale: toRef(props, "locale")
});
const onContextSelect = (date, type) => {
if (type === "submit" || type !== "key" && !needConfirmButton.value) {
triggerChange(date);
triggerOpen(false);
}
};
useProvidePanel({
operationRef,
hideHeader: computed(() => picker.value === "time"),
onSelect: onContextSelect,
open: mergedOpen,
defaultOpenValue: toRef(props, "defaultOpenValue"),
onDateMouseenter: onEnter,
onDateMouseleave: onLeave
});
expose({
focus: () => {
if (inputRef.value) {
inputRef.value.focus();
}
},
blur: () => {
if (inputRef.value) {
inputRef.value.blur();
}
}
});
return () => {
const {
prefixCls = "rc-picker",
id,
tabindex,
dropdownClassName,
dropdownAlign,
popupStyle,
transitionName,
generateConfig: generateConfig2,
locale: locale2,
inputReadOnly,
allowClear,
autofocus,
picker: picker2 = "date",
defaultOpenValue,
suffixIcon,
clearIcon,
disabled,
placeholder,
getPopupContainer,
panelRender,
onMousedown,
onMouseenter,
onMouseleave,
onContextmenu,
onClick,
onSelect,
direction,
autocomplete = "off"
} = props;
const panelProps = _extends(_extends(_extends({}, props), attrs), {
class: classNames({
[`${prefixCls}-panel-focused`]: !typing.value
}),
style: void 0,
pickerValue: void 0,
onPickerValueChange: void 0,
onChange: null
});
let panelNode = createVNode("div", {
"class": `${prefixCls}-panel-layout`
}, [createVNode(PresetPanel, {
"prefixCls": prefixCls,
"presets": presetList.value,
"onClick": (nextValue) => {
triggerChange(nextValue);
triggerOpen(false);
}
}, null), createVNode(PickerPanel$1, _objectSpread$3(_objectSpread$3({}, panelProps), {}, {
"generateConfig": generateConfig2,
"value": selectedValue.value,
"locale": locale2,
"tabindex": -1,
"onSelect": (date) => {
onSelect === null || onSelect === void 0 ? void 0 : onSelect(date);
setSelectedValue(date);
},
"direction": direction,
"onPanelChange": (viewDate, mode) => {
const {
onPanelChange
} = props;
onLeave(true);
onPanelChange === null || onPanelChange === void 0 ? void 0 : onPanelChange(viewDate, mode);
}
}), null)]);
if (panelRender) {
panelNode = panelRender(panelNode);
}
const panel = createVNode("div", {
"class": `${prefixCls}-panel-container`,
"ref": panelDivRef,
"onMousedown": (e) => {
e.preventDefault();
}
}, [panelNode]);
let suffixNode;
if (suffixIcon) {
suffixNode = createVNode("span", {
"class": `${prefixCls}-suffix`
}, [suffixIcon]);
}
let clearNode;
if (allowClear && mergedValue.value && !disabled) {
clearNode = createVNode("span", {
"onMousedown": (e) => {
e.preventDefault();
e.stopPropagation();
},
"onMouseup": (e) => {
e.preventDefault();
e.stopPropagation();
triggerChange(null);
triggerOpen(false);
},
"class": `${prefixCls}-clear`,
"role": "button"
}, [clearIcon || createVNode("span", {
"class": `${prefixCls}-clear-btn`
}, null)]);
}
const mergedInputProps = _extends(_extends(_extends(_extends({
id,
tabindex,
disabled,
readonly: inputReadOnly || typeof formatList.value[0] === "function" || !typing.value,
value: hoverValue.value || text.value,
onInput: (e) => {
triggerTextChange(e.target.value);
},
autofocus,
placeholder,
ref: inputRef,
title: text.value
}, inputProps.value), {
size: getInputSize(picker2, formatList.value[0], generateConfig2)
}), getDataOrAriaProps(props)), {
autocomplete
});
const inputNode = props.inputRender ? props.inputRender(mergedInputProps) : createVNode("input", mergedInputProps, null);
const popupPlacement = direction === "rtl" ? "bottomRight" : "bottomLeft";
return createVNode("div", {
"ref": containerRef,
"class": classNames(prefixCls, attrs.class, {
[`${prefixCls}-disabled`]: disabled,
[`${prefixCls}-focused`]: focused.value,
[`${prefixCls}-rtl`]: direction === "rtl"
}),
"style": attrs.style,
"onMousedown": onMousedown,
"onMouseup": onInternalMouseup,
"onMouseenter": onMouseenter,
"onMouseleave": onMouseleave,
"onContextmenu": onContextmenu,
"onClick": onClick
}, [createVNode("div", {
"class": classNames(`${prefixCls}-input`, {
[`${prefixCls}-input-placeholder`]: !!hoverValue.value
}),
"ref": inputDivRef
}, [inputNode, suffixNode, clearNode]), createVNode(PickerTrigger, {
"visible": mergedOpen.value,
"popupStyle": popupStyle,
"prefixCls": prefixCls,
"dropdownClassName": dropdownClassName,
"dropdownAlign": dropdownAlign,
"getPopupContainer": getPopupContainer,
"transitionName": transitionName,
"popupPlacement": popupPlacement,
"direction": direction
}, {
default: () => [createVNode("div", {
"style": {
pointerEvents: "none",
position: "absolute",
top: 0,
bottom: 0,
left: 0,
right: 0
}
}, null)],
popupElement: () => panel
})]);
};
}
});
}
const Picker$1 = Picker();
function useRangeDisabled(_ref, openRecordsRef) {
let {
picker,
locale: locale2,
selectedValue,
disabledDate,
disabled,
generateConfig: generateConfig2
} = _ref;
const startDate = computed(() => getValue(selectedValue.value, 0));
const endDate = computed(() => getValue(selectedValue.value, 1));
function weekFirstDate(date) {
return generateConfig2.value.locale.getWeekFirstDate(locale2.value.locale, date);
}
function monthNumber(date) {
const year = generateConfig2.value.getYear(date);
const month = generateConfig2.value.getMonth(date);
return year * 100 + month;
}
function quarterNumber(date) {
const year = generateConfig2.value.getYear(date);
const quarter = getQuarter(generateConfig2.value, date);
return year * 10 + quarter;
}
const disabledStartDate = (date) => {
var _a;
if (disabledDate && ((_a = disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate.value) === null || _a === void 0 ? void 0 : _a.call(disabledDate, date))) {
return true;
}
if (disabled[1] && endDate) {
return !isSameDate(generateConfig2.value, date, endDate.value) && generateConfig2.value.isAfter(date, endDate.value);
}
if (openRecordsRef.value[1] && endDate.value) {
switch (picker.value) {
case "quarter":
return quarterNumber(date) > quarterNumber(endDate.value);
case "month":
return monthNumber(date) > monthNumber(endDate.value);
case "week":
return weekFirstDate(date) > weekFirstDate(endDate.value);
default:
return !isSameDate(generateConfig2.value, date, endDate.value) && generateConfig2.value.isAfter(date, endDate.value);
}
}
return false;
};
const disabledEndDate = (date) => {
var _a;
if ((_a = disabledDate.value) === null || _a === void 0 ? void 0 : _a.call(disabledDate, date)) {
return true;
}
if (disabled[0] && startDate) {
return !isSameDate(generateConfig2.value, date, endDate.value) && generateConfig2.value.isAfter(startDate.value, date);
}
if (openRecordsRef.value[0] && startDate.value) {
switch (picker.value) {
case "quarter":
return quarterNumber(date) < quarterNumber(startDate.value);
case "month":
return monthNumber(date) < monthNumber(startDate.value);
case "week":
return weekFirstDate(date) < weekFirstDate(startDate.value);
default:
return !isSameDate(generateConfig2.value, date, startDate.value) && generateConfig2.value.isAfter(startDate.value, date);
}
}
return false;
};
return [disabledStartDate, disabledEndDate];
}
function getStartEndDistance(startDate, endDate, picker, generateConfig2) {
const startNext = getClosingViewDate(startDate, picker, generateConfig2, 1);
function getDistance(compareFunc) {
if (compareFunc(startDate, endDate)) {
return "same";
}
if (compareFunc(startNext, endDate)) {
return "closing";
}
return "far";
}
switch (picker) {
case "year":
return getDistance((start, end) => isSameDecade(generateConfig2, start, end));
case "quarter":
case "month":
return getDistance((start, end) => isSameYear(generateConfig2, start, end));
default:
return getDistance((start, end) => isSameMonth(generateConfig2, start, end));
}
}
function getRangeViewDate(values, index, picker, generateConfig2) {
const startDate = getValue(values, 0);
const endDate = getValue(values, 1);
if (index === 0) {
return startDate;
}
if (startDate && endDate) {
const distance = getStartEndDistance(startDate, endDate, picker, generateConfig2);
switch (distance) {
case "same":
return startDate;
case "closing":
return startDate;
default:
return getClosingViewDate(endDate, picker, generateConfig2, -1);
}
}
return startDate;
}
function useRangeViewDates(_ref) {
let {
values,
picker,
defaultDates,
generateConfig: generateConfig2
} = _ref;
const defaultViewDates = ref([getValue(defaultDates, 0), getValue(defaultDates, 1)]);
const viewDates = ref(null);
const startDate = computed(() => getValue(values.value, 0));
const endDate = computed(() => getValue(values.value, 1));
const getViewDate = (index) => {
if (defaultViewDates.value[index]) {
return defaultViewDates.value[index];
}
return getValue(viewDates.value, index) || getRangeViewDate(values.value, index, picker.value, generateConfig2.value) || startDate.value || endDate.value || generateConfig2.value.getNow();
};
const startViewDate = ref(null);
const endViewDate = ref(null);
watchEffect(() => {
startViewDate.value = getViewDate(0);
endViewDate.value = getViewDate(1);
});
function setViewDate(viewDate, index) {
if (viewDate) {
let newViewDates = updateValues(viewDates.value, viewDate, index);
defaultViewDates.value = updateValues(defaultViewDates.value, null, index) || [null, null];
const anotherIndex = (index + 1) % 2;
if (!getValue(values.value, anotherIndex)) {
newViewDates = updateValues(newViewDates, viewDate, anotherIndex);
}
viewDates.value = newViewDates;
} else if (startDate.value || endDate.value) {
viewDates.value = null;
}
}
return [startViewDate, endViewDate, setViewDate];
}
function tryOnScopeDispose(fn) {
if (getCurrentScope()) {
onScopeDispose(fn);
return true;
}
return false;
}
function resolveUnref(r) {
return typeof r === "function" ? r() : unref(r);
}
function unrefElement(elRef) {
var _a;
const plain = resolveUnref(elRef);
return (_a = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _a !== void 0 ? _a : plain;
}
function tryOnMounted(fn) {
let sync = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
if (getCurrentInstance()) onMounted(fn);
else if (sync) fn();
else nextTick(fn);
}
function useSupported(callback) {
let sync = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
const isSupported = shallowRef();
const update = () => isSupported.value = Boolean(callback());
update();
tryOnMounted(update, sync);
return isSupported;
}
const defaultWindow = void 0;
var __rest$2 = function(s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
function useResizeObserver(target, callback) {
let options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
const {
window = defaultWindow
} = options, observerOptions = __rest$2(options, ["window"]);
let observer;
const isSupported = useSupported(() => window && "ResizeObserver" in window);
const cleanup = () => {
if (observer) {
observer.disconnect();
observer = void 0;
}
};
const stopWatch = watch(() => unrefElement(target), (el) => {
cleanup();
if (isSupported.value && window && el) {
observer = new ResizeObserver(callback);
observer.observe(el, observerOptions);
}
}, {
immediate: true,
flush: "post"
});
const stop = () => {
cleanup();
stopWatch();
};
tryOnScopeDispose(stop);
return {
isSupported,
stop
};
}
function useElementSize(target) {
let initialSize = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {
width: 0,
height: 0
};
let options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
const {
box = "content-box"
} = options;
const width = shallowRef(initialSize.width);
const height = shallowRef(initialSize.height);
useResizeObserver(target, (_ref) => {
let [entry] = _ref;
const boxSize = box === "border-box" ? entry.borderBoxSize : box === "content-box" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;
if (boxSize) {
width.value = boxSize.reduce((acc, _ref2) => {
let {
inlineSize
} = _ref2;
return acc + inlineSize;
}, 0);
height.value = boxSize.reduce((acc, _ref3) => {
let {
blockSize
} = _ref3;
return acc + blockSize;
}, 0);
} else {
width.value = entry.contentRect.width;
height.value = entry.contentRect.height;
}
}, options);
watch(() => unrefElement(target), (ele) => {
width.value = ele ? initialSize.width : 0;
height.value = ele ? initialSize.height : 0;
});
return {
width,
height
};
}
function reorderValues(values, generateConfig2) {
if (values && values[0] && values[1] && generateConfig2.isAfter(values[0], values[1])) {
return [values[1], values[0]];
}
return values;
}
function canValueTrigger(value, index, disabled, allowEmpty) {
if (value) {
return true;
}
if (allowEmpty && allowEmpty[index]) {
return true;
}
if (disabled[(index + 1) % 2]) {
return true;
}
return false;
}
function RangerPicker() {
return defineComponent({
name: "RangerPicker",
inheritAttrs: false,
props: ["prefixCls", "id", "popupStyle", "dropdownClassName", "transitionName", "dropdownAlign", "getPopupContainer", "generateConfig", "locale", "placeholder", "autofocus", "disabled", "format", "picker", "showTime", "showNow", "showHour", "showMinute", "showSecond", "use12Hours", "separator", "value", "defaultValue", "defaultPickerValue", "open", "defaultOpen", "disabledDate", "disabledTime", "dateRender", "panelRender", "ranges", "allowEmpty", "allowClear", "suffixIcon", "clearIcon", "pickerRef", "inputReadOnly", "mode", "renderExtraFooter", "onChange", "onOpenChange", "onPanelChange", "onCalendarChange", "onFocus", "onBlur", "onMousedown", "onMouseup", "onMouseenter", "onMouseleave", "onClick", "onOk", "onKeydown", "components", "order", "direction", "activePickerIndex", "autocomplete", "minuteStep", "hourStep", "secondStep", "hideDisabledOptions", "disabledMinutes", "presets", "prevIcon", "nextIcon", "superPrevIcon", "superNextIcon"],
setup(props, _ref) {
let {
attrs,
expose
} = _ref;
const needConfirmButton = computed(() => props.picker === "date" && !!props.showTime || props.picker === "time");
const presets = computed(() => props.presets);
const ranges = computed(() => props.ranges);
const presetList = usePresets(presets, ranges);
const openRecordsRef = ref({});
const containerRef = ref(null);
const panelDivRef = ref(null);
const startInputDivRef = ref(null);
const endInputDivRef = ref(null);
const separatorRef = ref(null);
const startInputRef = ref(null);
const endInputRef = ref(null);
const arrowRef = ref(null);
const formatList = computed(() => toArray$1(getDefaultFormat(props.format, props.picker, props.showTime, props.use12Hours)));
const [mergedActivePickerIndex, setMergedActivePickerIndex] = useMergedState(0, {
value: toRef(props, "activePickerIndex")
});
const operationRef = ref(null);
const mergedDisabled = computed(() => {
const {
disabled
} = props;
if (Array.isArray(disabled)) {
return disabled;
}
return [disabled || false, disabled || false];
});
const [mergedValue, setInnerValue] = useMergedState(null, {
value: toRef(props, "value"),
defaultValue: props.defaultValue,
postState: (values) => props.picker === "time" && !props.order ? values : reorderValues(values, props.generateConfig)
});
const [startViewDate, endViewDate, setViewDate] = useRangeViewDates({
values: mergedValue,
picker: toRef(props, "picker"),
defaultDates: props.defaultPickerValue,
generateConfig: toRef(props, "generateConfig")
});
const [selectedValue, setSelectedValue] = useMergedState(mergedValue.value, {
postState: (values) => {
let postValues = values;
if (mergedDisabled.value[0] && mergedDisabled.value[1]) {
return postValues;
}
for (let i = 0; i < 2; i += 1) {
if (mergedDisabled.value[i] && !getValue(postValues, i) && !getValue(props.allowEmpty, i)) {
postValues = updateValues(postValues, props.generateConfig.getNow(), i);
}
}
return postValues;
}
});
const [mergedModes, setInnerModes] = useMergedState([props.picker, props.picker], {
value: toRef(props, "mode")
});
watch(() => props.picker, () => {
setInnerModes([props.picker, props.picker]);
});
const triggerModesChange = (modes, values) => {
var _a;
setInnerModes(modes);
(_a = props.onPanelChange) === null || _a === void 0 ? void 0 : _a.call(props, values, modes);
};
const [disabledStartDate, disabledEndDate] = useRangeDisabled({
picker: toRef(props, "picker"),
selectedValue,
locale: toRef(props, "locale"),
disabled: mergedDisabled,
disabledDate: toRef(props, "disabledDate"),
generateConfig: toRef(props, "generateConfig")
}, openRecordsRef);
const [mergedOpen, triggerInnerOpen] = useMergedState(false, {
value: toRef(props, "open"),
defaultValue: props.defaultOpen,
postState: (postOpen) => mergedDisabled.value[mergedActivePickerIndex.value] ? false : postOpen,
onChange: (newOpen) => {
var _a;
(_a = props.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(props, newOpen);
if (!newOpen && operationRef.value && operationRef.value.onClose) {
operationRef.value.onClose();
}
}
});
const startOpen = computed(() => mergedOpen.value && mergedActivePickerIndex.value === 0);
const endOpen = computed(() => mergedOpen.value && mergedActivePickerIndex.value === 1);
const panelLeft = ref(0);
const arrowLeft = ref(0);
const popupMinWidth = ref(0);
const {
width: containerWidth
} = useElementSize(containerRef);
watch([mergedOpen, containerWidth], () => {
if (!mergedOpen.value && containerRef.value) {
popupMinWidth.value = containerWidth.value;
}
});
const {
width: panelDivWidth
} = useElementSize(panelDivRef);
const {
width: arrowWidth
} = useElementSize(arrowRef);
const {
width: startInputDivWidth
} = useElementSize(startInputDivRef);
const {
width: separatorWidth
} = useElementSize(separatorRef);
watch([mergedActivePickerIndex, mergedOpen, panelDivWidth, arrowWidth, startInputDivWidth, separatorWidth, () => props.direction], () => {
arrowLeft.value = 0;
if (mergedActivePickerIndex.value) {
if (startInputDivRef.value && separatorRef.value) {
arrowLeft.value = startInputDivWidth.value + separatorWidth.value;
if (panelDivWidth.value && arrowWidth.value && arrowLeft.value > panelDivWidth.value - arrowWidth.value - (props.direction === "rtl" || arrowRef.value.offsetLeft > arrowLeft.value ? 0 : arrowRef.value.offsetLeft)) {
panelLeft.value = arrowLeft.value;
}
}
} else if (mergedActivePickerIndex.value === 0) {
panelLeft.value = 0;
}
}, {
immediate: true
});
const triggerRef = ref();
function triggerOpen(newOpen, index) {
if (newOpen) {
clearTimeout(triggerRef.value);
openRecordsRef.value[index] = true;
setMergedActivePickerIndex(index);
triggerInnerOpen(newOpen);
if (!mergedOpen.value) {
setViewDate(null, index);
}
} else if (mergedActivePickerIndex.value === index) {
triggerInnerOpen(newOpen);
const openRecords = openRecordsRef.value;
triggerRef.value = setTimeout(() => {
if (openRecords === openRecordsRef.value) {
openRecordsRef.value = {};
}
});
}
}
function triggerOpenAndFocus(index) {
triggerOpen(true, index);
setTimeout(() => {
const inputRef = [startInputRef, endInputRef][index];
if (inputRef.value) {
inputRef.value.focus();
}
}, 0);
}
function triggerChange(newValue, sourceIndex) {
let values = newValue;
let startValue = getValue(values, 0);
let endValue = getValue(values, 1);
const {
generateConfig: generateConfig2,
locale: locale2,
picker,
order,
onCalendarChange,
allowEmpty,
onChange,
showTime
} = props;
if (startValue && endValue && generateConfig2.isAfter(startValue, endValue)) {
if (
// WeekPicker only compare week
picker === "week" && !isSameWeek(generateConfig2, locale2.locale, startValue, endValue) || // QuotaPicker only compare week
picker === "quarter" && !isSameQuarter(generateConfig2, startValue, endValue) || // Other non-TimePicker compare date
picker !== "week" && picker !== "quarter" && picker !== "time" && !(showTime ? isEqual(generateConfig2, startValue, endValue) : isSameDate(generateConfig2, startValue, endValue))
) {
if (sourceIndex === 0) {
values = [startValue, null];
endValue = null;
} else {
startValue = null;
values = [null, endValue];
}
openRecordsRef.value = {
[sourceIndex]: true
};
} else if (picker !== "time" || order !== false) {
values = reorderValues(values, generateConfig2);
}
}
setSelectedValue(values);
const startStr2 = values && values[0] ? formatValue(values[0], {
generateConfig: generateConfig2,
locale: locale2,
format: formatList.value[0]
}) : "";
const endStr2 = values && values[1] ? formatValue(values[1], {
generateConfig: generateConfig2,
locale: locale2,
format: formatList.value[0]
}) : "";
if (onCalendarChange) {
const info = {
range: sourceIndex === 0 ? "start" : "end"
};
onCalendarChange(values, [startStr2, endStr2], info);
}
const canStartValueTrigger = canValueTrigger(startValue, 0, mergedDisabled.value, allowEmpty);
const canEndValueTrigger = canValueTrigger(endValue, 1, mergedDisabled.value, allowEmpty);
const canTrigger = values === null || canStartValueTrigger && canEndValueTrigger;
if (canTrigger) {
setInnerValue(values);
if (onChange && (!isEqual(generateConfig2, getValue(mergedValue.value, 0), startValue) || !isEqual(generateConfig2, getValue(mergedValue.value, 1), endValue))) {
onChange(values, [startStr2, endStr2]);
}
}
let nextOpenIndex = null;
if (sourceIndex === 0 && !mergedDisabled.value[1]) {
nextOpenIndex = 1;
} else if (sourceIndex === 1 && !mergedDisabled.value[0]) {
nextOpenIndex = 0;
}
if (nextOpenIndex !== null && nextOpenIndex !== mergedActivePickerIndex.value && (!openRecordsRef.value[nextOpenIndex] || !getValue(values, nextOpenIndex)) && getValue(values, sourceIndex)) {
triggerOpenAndFocus(nextOpenIndex);
} else {
triggerOpen(false, sourceIndex);
}
}
const forwardKeydown = (e) => {
if (mergedOpen && operationRef.value && operationRef.value.onKeydown) {
return operationRef.value.onKeydown(e);
}
{
return false;
}
};
const sharedTextHooksProps = {
formatList,
generateConfig: toRef(props, "generateConfig"),
locale: toRef(props, "locale")
};
const [startValueTexts, firstStartValueText] = useValueTexts(computed(() => getValue(selectedValue.value, 0)), sharedTextHooksProps);
const [endValueTexts, firstEndValueText] = useValueTexts(computed(() => getValue(selectedValue.value, 1)), sharedTextHooksProps);
const onTextChange = (newText, index) => {
const inputDate = parseValue(newText, {
locale: props.locale,
formatList: formatList.value,
generateConfig: props.generateConfig
});
const disabledFunc = index === 0 ? disabledStartDate : disabledEndDate;
if (inputDate && !disabledFunc(inputDate)) {
setSelectedValue(updateValues(selectedValue.value, inputDate, index));
setViewDate(inputDate, index);
}
};
const [startText, triggerStartTextChange, resetStartText] = useTextValueMapping({
valueTexts: startValueTexts,
onTextChange: (newText) => onTextChange(newText, 0)
});
const [endText, triggerEndTextChange, resetEndText] = useTextValueMapping({
valueTexts: endValueTexts,
onTextChange: (newText) => onTextChange(newText, 1)
});
const [rangeHoverValue, setRangeHoverValue] = useState$1(null);
const [hoverRangedValue, setHoverRangedValue] = useState$1(null);
const [startHoverValue, onStartEnter, onStartLeave] = useHoverValue(startText, sharedTextHooksProps);
const [endHoverValue, onEndEnter, onEndLeave] = useHoverValue(endText, sharedTextHooksProps);
const onDateMouseenter = (date) => {
setHoverRangedValue(updateValues(selectedValue.value, date, mergedActivePickerIndex.value));
if (mergedActivePickerIndex.value === 0) {
onStartEnter(date);
} else {
onEndEnter(date);
}
};
const onDateMouseleave = () => {
setHoverRangedValue(updateValues(selectedValue.value, null, mergedActivePickerIndex.value));
if (mergedActivePickerIndex.value === 0) {
onStartLeave();
} else {
onEndLeave();
}
};
const getSharedInputHookProps = (index, resetText) => ({
forwardKeydown,
onBlur: (e) => {
var _a;
(_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
},
isClickOutside: (target) => !elementsContains([panelDivRef.value, startInputDivRef.value, endInputDivRef.value, containerRef.value], target),
onFocus: (e) => {
var _a;
setMergedActivePickerIndex(index);
(_a = props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, e);
},
triggerOpen: (newOpen) => {
triggerOpen(newOpen, index);
},
onSubmit: () => {
if (
// When user typing disabledDate with keyboard and enter, this value will be empty
!selectedValue.value || // Normal disabled check
props.disabledDate && props.disabledDate(selectedValue.value[index])
) {
return false;
}
triggerChange(selectedValue.value, index);
resetText();
},
onCancel: () => {
triggerOpen(false, index);
setSelectedValue(mergedValue.value);
resetText();
}
});
const [startInputProps, {
focused: startFocused,
typing: startTyping
}] = usePickerInput(_extends(_extends({}, getSharedInputHookProps(0, resetStartText)), {
blurToCancel: needConfirmButton,
open: startOpen,
value: startText,
onKeydown: (e, preventDefault) => {
var _a;
(_a = props.onKeydown) === null || _a === void 0 ? void 0 : _a.call(props, e, preventDefault);
}
}));
const [endInputProps, {
focused: endFocused,
typing: endTyping
}] = usePickerInput(_extends(_extends({}, getSharedInputHookProps(1, resetEndText)), {
blurToCancel: needConfirmButton,
open: endOpen,
value: endText,
onKeydown: (e, preventDefault) => {
var _a;
(_a = props.onKeydown) === null || _a === void 0 ? void 0 : _a.call(props, e, preventDefault);
}
}));
const onPickerClick = (e) => {
var _a;
(_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props, e);
if (!mergedOpen.value && !startInputRef.value.contains(e.target) && !endInputRef.value.contains(e.target)) {
if (!mergedDisabled.value[0]) {
triggerOpenAndFocus(0);
} else if (!mergedDisabled.value[1]) {
triggerOpenAndFocus(1);
}
}
};
const onPickerMousedown = (e) => {
var _a;
(_a = props.onMousedown) === null || _a === void 0 ? void 0 : _a.call(props, e);
if (mergedOpen.value && (startFocused.value || endFocused.value) && !startInputRef.value.contains(e.target) && !endInputRef.value.contains(e.target)) {
e.preventDefault();
}
};
const startStr = computed(() => {
var _a;
return ((_a = mergedValue.value) === null || _a === void 0 ? void 0 : _a[0]) ? formatValue(mergedValue.value[0], {
locale: props.locale,
format: "YYYYMMDDHHmmss",
generateConfig: props.generateConfig
}) : "";
});
const endStr = computed(() => {
var _a;
return ((_a = mergedValue.value) === null || _a === void 0 ? void 0 : _a[1]) ? formatValue(mergedValue.value[1], {
locale: props.locale,
format: "YYYYMMDDHHmmss",
generateConfig: props.generateConfig
}) : "";
});
watch([mergedOpen, startValueTexts, endValueTexts], () => {
if (!mergedOpen.value) {
setSelectedValue(mergedValue.value);
if (!startValueTexts.value.length || startValueTexts.value[0] === "") {
triggerStartTextChange("");
} else if (firstStartValueText.value !== startText.value) {
resetStartText();
}
if (!endValueTexts.value.length || endValueTexts.value[0] === "") {
triggerEndTextChange("");
} else if (firstEndValueText.value !== endText.value) {
resetEndText();
}
}
});
watch([startStr, endStr], () => {
setSelectedValue(mergedValue.value);
});
expose({
focus: () => {
if (startInputRef.value) {
startInputRef.value.focus();
}
},
blur: () => {
if (startInputRef.value) {
startInputRef.value.blur();
}
if (endInputRef.value) {
endInputRef.value.blur();
}
}
});
const panelHoverRangedValue = computed(() => {
if (mergedOpen.value && hoverRangedValue.value && hoverRangedValue.value[0] && hoverRangedValue.value[1] && props.generateConfig.isAfter(hoverRangedValue.value[1], hoverRangedValue.value[0])) {
return hoverRangedValue.value;
} else {
return null;
}
});
function renderPanel() {
let panelPosition = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
let panelProps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
const {
generateConfig: generateConfig2,
showTime,
dateRender,
direction,
disabledTime,
prefixCls,
locale: locale2
} = props;
let panelShowTime = showTime;
if (showTime && typeof showTime === "object" && showTime.defaultValue) {
const timeDefaultValues = showTime.defaultValue;
panelShowTime = _extends(_extends({}, showTime), {
defaultValue: getValue(timeDefaultValues, mergedActivePickerIndex.value) || void 0
});
}
let panelDateRender = null;
if (dateRender) {
panelDateRender = (_ref2) => {
let {
current: date,
today
} = _ref2;
return dateRender({
current: date,
today,
info: {
range: mergedActivePickerIndex.value ? "end" : "start"
}
});
};
}
return createVNode(RangeContextProvider, {
"value": {
inRange: true,
panelPosition,
rangedValue: rangeHoverValue.value || selectedValue.value,
hoverRangedValue: panelHoverRangedValue.value
}
}, {
default: () => [createVNode(PickerPanel$1, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, props), panelProps), {}, {
"dateRender": panelDateRender,
"showTime": panelShowTime,
"mode": mergedModes.value[mergedActivePickerIndex.value],
"generateConfig": generateConfig2,
"style": void 0,
"direction": direction,
"disabledDate": mergedActivePickerIndex.value === 0 ? disabledStartDate : disabledEndDate,
"disabledTime": (date) => {
if (disabledTime) {
return disabledTime(date, mergedActivePickerIndex.value === 0 ? "start" : "end");
}
return false;
},
"class": classNames({
[`${prefixCls}-panel-focused`]: mergedActivePickerIndex.value === 0 ? !startTyping.value : !endTyping.value
}),
"value": getValue(selectedValue.value, mergedActivePickerIndex.value),
"locale": locale2,
"tabIndex": -1,
"onPanelChange": (date, newMode) => {
if (mergedActivePickerIndex.value === 0) {
onStartLeave(true);
}
if (mergedActivePickerIndex.value === 1) {
onEndLeave(true);
}
triggerModesChange(updateValues(mergedModes.value, newMode, mergedActivePickerIndex.value), updateValues(selectedValue.value, date, mergedActivePickerIndex.value));
let viewDate = date;
if (panelPosition === "right" && mergedModes.value[mergedActivePickerIndex.value] === newMode) {
viewDate = getClosingViewDate(viewDate, newMode, generateConfig2, -1);
}
setViewDate(viewDate, mergedActivePickerIndex.value);
},
"onOk": null,
"onSelect": void 0,
"onChange": void 0,
"defaultValue": mergedActivePickerIndex.value === 0 ? getValue(selectedValue.value, 1) : getValue(selectedValue.value, 0)
}), null)]
});
}
const onContextSelect = (date, type) => {
const values = updateValues(selectedValue.value, date, mergedActivePickerIndex.value);
if (type === "submit" || type !== "key" && !needConfirmButton.value) {
triggerChange(values, mergedActivePickerIndex.value);
if (mergedActivePickerIndex.value === 0) {
onStartLeave();
} else {
onEndLeave();
}
} else {
setSelectedValue(values);
}
};
useProvidePanel({
operationRef,
hideHeader: computed(() => props.picker === "time"),
onDateMouseenter,
onDateMouseleave,
hideRanges: computed(() => true),
onSelect: onContextSelect,
open: mergedOpen
});
return () => {
const {
prefixCls = "rc-picker",
id,
popupStyle,
dropdownClassName,
transitionName,
dropdownAlign,
getPopupContainer,
generateConfig: generateConfig2,
locale: locale2,
placeholder,
autofocus,
picker = "date",
showTime,
separator = "~",
disabledDate,
panelRender,
allowClear,
suffixIcon,
clearIcon,
inputReadOnly,
renderExtraFooter,
onMouseenter,
onMouseleave,
onMouseup,
onOk,
components,
direction,
autocomplete = "off"
} = props;
const arrowPositionStyle = direction === "rtl" ? {
right: `${arrowLeft.value}px`
} : {
left: `${arrowLeft.value}px`
};
function renderPanels() {
let panels;
const extraNode = getExtraFooter(prefixCls, mergedModes.value[mergedActivePickerIndex.value], renderExtraFooter);
const rangesNode = getRanges({
prefixCls,
components,
needConfirmButton: needConfirmButton.value,
okDisabled: !getValue(selectedValue.value, mergedActivePickerIndex.value) || disabledDate && disabledDate(selectedValue.value[mergedActivePickerIndex.value]),
locale: locale2,
onOk: () => {
if (getValue(selectedValue.value, mergedActivePickerIndex.value)) {
triggerChange(selectedValue.value, mergedActivePickerIndex.value);
if (onOk) {
onOk(selectedValue.value);
}
}
}
});
if (picker !== "time" && !showTime) {
const viewDate = mergedActivePickerIndex.value === 0 ? startViewDate.value : endViewDate.value;
const nextViewDate = getClosingViewDate(viewDate, picker, generateConfig2);
const currentMode = mergedModes.value[mergedActivePickerIndex.value];
const showDoublePanel = currentMode === picker;
const leftPanel = renderPanel(showDoublePanel ? "left" : false, {
pickerValue: viewDate,
onPickerValueChange: (newViewDate) => {
setViewDate(newViewDate, mergedActivePickerIndex.value);
}
});
const rightPanel = renderPanel("right", {
pickerValue: nextViewDate,
onPickerValueChange: (newViewDate) => {
setViewDate(getClosingViewDate(newViewDate, picker, generateConfig2, -1), mergedActivePickerIndex.value);
}
});
if (direction === "rtl") {
panels = createVNode(Fragment, null, [rightPanel, showDoublePanel && leftPanel]);
} else {
panels = createVNode(Fragment, null, [leftPanel, showDoublePanel && rightPanel]);
}
} else {
panels = renderPanel();
}
let mergedNodes = createVNode("div", {
"class": `${prefixCls}-panel-layout`
}, [createVNode(PresetPanel, {
"prefixCls": prefixCls,
"presets": presetList.value,
"onClick": (nextValue) => {
triggerChange(nextValue, null);
triggerOpen(false, mergedActivePickerIndex.value);
},
"onHover": (hoverValue) => {
setRangeHoverValue(hoverValue);
}
}, null), createVNode("div", null, [createVNode("div", {
"class": `${prefixCls}-panels`
}, [panels]), (extraNode || rangesNode) && createVNode("div", {
"class": `${prefixCls}-footer`
}, [extraNode, rangesNode])])]);
if (panelRender) {
mergedNodes = panelRender(mergedNodes);
}
return createVNode("div", {
"class": `${prefixCls}-panel-container`,
"style": {
marginLeft: `${panelLeft.value}px`
},
"ref": panelDivRef,
"onMousedown": (e) => {
e.preventDefault();
}
}, [mergedNodes]);
}
const rangePanel = createVNode("div", {
"class": classNames(`${prefixCls}-range-wrapper`, `${prefixCls}-${picker}-range-wrapper`),
"style": {
minWidth: `${popupMinWidth.value}px`
}
}, [createVNode("div", {
"ref": arrowRef,
"class": `${prefixCls}-range-arrow`,
"style": arrowPositionStyle
}, null), renderPanels()]);
let suffixNode;
if (suffixIcon) {
suffixNode = createVNode("span", {
"class": `${prefixCls}-suffix`
}, [suffixIcon]);
}
let clearNode;
if (allowClear && (getValue(mergedValue.value, 0) && !mergedDisabled.value[0] || getValue(mergedValue.value, 1) && !mergedDisabled.value[1])) {
clearNode = createVNode("span", {
"onMousedown": (e) => {
e.preventDefault();
e.stopPropagation();
},
"onMouseup": (e) => {
e.preventDefault();
e.stopPropagation();
let values = mergedValue.value;
if (!mergedDisabled.value[0]) {
values = updateValues(values, null, 0);
}
if (!mergedDisabled.value[1]) {
values = updateValues(values, null, 1);
}
triggerChange(values, null);
triggerOpen(false, mergedActivePickerIndex.value);
},
"class": `${prefixCls}-clear`
}, [clearIcon || createVNode("span", {
"class": `${prefixCls}-clear-btn`
}, null)]);
}
const inputSharedProps = {
size: getInputSize(picker, formatList.value[0], generateConfig2)
};
let activeBarLeft = 0;
let activeBarWidth = 0;
if (startInputDivRef.value && endInputDivRef.value && separatorRef.value) {
if (mergedActivePickerIndex.value === 0) {
activeBarWidth = startInputDivRef.value.offsetWidth;
} else {
activeBarLeft = arrowLeft.value;
activeBarWidth = endInputDivRef.value.offsetWidth;
}
}
const activeBarPositionStyle = direction === "rtl" ? {
right: `${activeBarLeft}px`
} : {
left: `${activeBarLeft}px`
};
return createVNode("div", _objectSpread$3({
"ref": containerRef,
"class": classNames(prefixCls, `${prefixCls}-range`, attrs.class, {
[`${prefixCls}-disabled`]: mergedDisabled.value[0] && mergedDisabled.value[1],
[`${prefixCls}-focused`]: mergedActivePickerIndex.value === 0 ? startFocused.value : endFocused.value,
[`${prefixCls}-rtl`]: direction === "rtl"
}),
"style": attrs.style,
"onClick": onPickerClick,
"onMouseenter": onMouseenter,
"onMouseleave": onMouseleave,
"onMousedown": onPickerMousedown,
"onMouseup": onMouseup
}, getDataOrAriaProps(props)), [createVNode("div", {
"class": classNames(`${prefixCls}-input`, {
[`${prefixCls}-input-active`]: mergedActivePickerIndex.value === 0,
[`${prefixCls}-input-placeholder`]: !!startHoverValue.value
}),
"ref": startInputDivRef
}, [createVNode("input", _objectSpread$3(_objectSpread$3(_objectSpread$3({
"id": id,
"disabled": mergedDisabled.value[0],
"readonly": inputReadOnly || typeof formatList.value[0] === "function" || !startTyping.value,
"value": startHoverValue.value || startText.value,
"onInput": (e) => {
triggerStartTextChange(e.target.value);
},
"autofocus": autofocus,
"placeholder": getValue(placeholder, 0) || "",
"ref": startInputRef
}, startInputProps.value), inputSharedProps), {}, {
"autocomplete": autocomplete
}), null)]), createVNode("div", {
"class": `${prefixCls}-range-separator`,
"ref": separatorRef
}, [separator]), createVNode("div", {
"class": classNames(`${prefixCls}-input`, {
[`${prefixCls}-input-active`]: mergedActivePickerIndex.value === 1,
[`${prefixCls}-input-placeholder`]: !!endHoverValue.value
}),
"ref": endInputDivRef
}, [createVNode("input", _objectSpread$3(_objectSpread$3(_objectSpread$3({
"disabled": mergedDisabled.value[1],
"readonly": inputReadOnly || typeof formatList.value[0] === "function" || !endTyping.value,
"value": endHoverValue.value || endText.value,
"onInput": (e) => {
triggerEndTextChange(e.target.value);
},
"placeholder": getValue(placeholder, 1) || "",
"ref": endInputRef
}, endInputProps.value), inputSharedProps), {}, {
"autocomplete": autocomplete
}), null)]), createVNode("div", {
"class": `${prefixCls}-active-bar`,
"style": _extends(_extends({}, activeBarPositionStyle), {
width: `${activeBarWidth}px`,
position: "absolute"
})
}, null), suffixNode, clearNode, createVNode(PickerTrigger, {
"visible": mergedOpen.value,
"popupStyle": popupStyle,
"prefixCls": prefixCls,
"dropdownClassName": dropdownClassName,
"dropdownAlign": dropdownAlign,
"getPopupContainer": getPopupContainer,
"transitionName": transitionName,
"range": true,
"direction": direction
}, {
default: () => [createVNode("div", {
"style": {
pointerEvents: "none",
position: "absolute",
top: 0,
bottom: 0,
left: 0,
right: 0
}
}, null)],
popupElement: () => rangePanel
})]);
};
}
});
}
const InterRangerPicker = RangerPicker();
const genPikerPadding = (token, inputHeight, fontSize, paddingHorizontal) => {
const {
lineHeight
} = token;
const fontHeight = Math.floor(fontSize * lineHeight) + 2;
const paddingTop = Math.max((inputHeight - fontHeight) / 2, 0);
const paddingBottom = Math.max(inputHeight - fontHeight - paddingTop, 0);
return {
padding: `${paddingTop}px ${paddingHorizontal}px ${paddingBottom}px`
};
};
const genPickerCellInnerStyle = (token) => {
const {
componentCls,
pickerCellCls,
pickerCellInnerCls,
pickerPanelCellHeight,
motionDurationSlow,
borderRadiusSM,
motionDurationMid,
controlItemBgHover,
lineWidth,
lineType,
colorPrimary,
controlItemBgActive,
colorTextLightSolid,
controlHeightSM,
pickerDateHoverRangeBorderColor,
pickerCellBorderGap,
pickerBasicCellHoverWithRangeColor,
pickerPanelCellWidth,
colorTextDisabled,
colorBgContainerDisabled
} = token;
return {
"&::before": {
position: "absolute",
top: "50%",
insetInlineStart: 0,
insetInlineEnd: 0,
zIndex: 1,
height: pickerPanelCellHeight,
transform: "translateY(-50%)",
transition: `all ${motionDurationSlow}`,
content: '""'
},
// >>> Default
[pickerCellInnerCls]: {
position: "relative",
zIndex: 2,
display: "inline-block",
minWidth: pickerPanelCellHeight,
height: pickerPanelCellHeight,
lineHeight: `${pickerPanelCellHeight}px`,
borderRadius: borderRadiusSM,
transition: `background ${motionDurationMid}, border ${motionDurationMid}`
},
// >>> Hover
[`&:hover:not(${pickerCellCls}-in-view),
&:hover:not(${pickerCellCls}-selected):not(${pickerCellCls}-range-start):not(${pickerCellCls}-range-end):not(${pickerCellCls}-range-hover-start):not(${pickerCellCls}-range-hover-end)`]: {
[pickerCellInnerCls]: {
background: controlItemBgHover
}
},
// >>> Today
[`&-in-view${pickerCellCls}-today ${pickerCellInnerCls}`]: {
"&::before": {
position: "absolute",
top: 0,
insetInlineEnd: 0,
bottom: 0,
insetInlineStart: 0,
zIndex: 1,
border: `${lineWidth}px ${lineType} ${colorPrimary}`,
borderRadius: borderRadiusSM,
content: '""'
}
},
// >>> In Range
[`&-in-view${pickerCellCls}-in-range`]: {
position: "relative",
"&::before": {
background: controlItemBgActive
}
},
// >>> Selected
[`&-in-view${pickerCellCls}-selected ${pickerCellInnerCls},
&-in-view${pickerCellCls}-range-start ${pickerCellInnerCls},
&-in-view${pickerCellCls}-range-end ${pickerCellInnerCls}`]: {
color: colorTextLightSolid,
background: colorPrimary
},
[`&-in-view${pickerCellCls}-range-start:not(${pickerCellCls}-range-start-single),
&-in-view${pickerCellCls}-range-end:not(${pickerCellCls}-range-end-single)`]: {
"&::before": {
background: controlItemBgActive
}
},
[`&-in-view${pickerCellCls}-range-start::before`]: {
insetInlineStart: "50%"
},
[`&-in-view${pickerCellCls}-range-end::before`]: {
insetInlineEnd: "50%"
},
// >>> Range Hover
[`&-in-view${pickerCellCls}-range-hover-start:not(${pickerCellCls}-in-range):not(${pickerCellCls}-range-start):not(${pickerCellCls}-range-end),
&-in-view${pickerCellCls}-range-hover-end:not(${pickerCellCls}-in-range):not(${pickerCellCls}-range-start):not(${pickerCellCls}-range-end),
&-in-view${pickerCellCls}-range-hover-start${pickerCellCls}-range-start-single,
&-in-view${pickerCellCls}-range-hover-start${pickerCellCls}-range-start${pickerCellCls}-range-end${pickerCellCls}-range-end-near-hover,
&-in-view${pickerCellCls}-range-hover-end${pickerCellCls}-range-start${pickerCellCls}-range-end${pickerCellCls}-range-start-near-hover,
&-in-view${pickerCellCls}-range-hover-end${pickerCellCls}-range-end-single,
&-in-view${pickerCellCls}-range-hover:not(${pickerCellCls}-in-range)`]: {
"&::after": {
position: "absolute",
top: "50%",
zIndex: 0,
height: controlHeightSM,
borderTop: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`,
borderBottom: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`,
transform: "translateY(-50%)",
transition: `all ${motionDurationSlow}`,
content: '""'
}
},
// Add space for stash
[`&-range-hover-start::after,
&-range-hover-end::after,
&-range-hover::after`]: {
insetInlineEnd: 0,
insetInlineStart: pickerCellBorderGap
},
// Hover with in range
[`&-in-view${pickerCellCls}-in-range${pickerCellCls}-range-hover::before,
&-in-view${pickerCellCls}-range-start${pickerCellCls}-range-hover::before,
&-in-view${pickerCellCls}-range-end${pickerCellCls}-range-hover::before,
&-in-view${pickerCellCls}-range-start:not(${pickerCellCls}-range-start-single)${pickerCellCls}-range-hover-start::before,
&-in-view${pickerCellCls}-range-end:not(${pickerCellCls}-range-end-single)${pickerCellCls}-range-hover-end::before,
${componentCls}-panel
> :not(${componentCls}-date-panel)
&-in-view${pickerCellCls}-in-range${pickerCellCls}-range-hover-start::before,
${componentCls}-panel
> :not(${componentCls}-date-panel)
&-in-view${pickerCellCls}-in-range${pickerCellCls}-range-hover-end::before`]: {
background: pickerBasicCellHoverWithRangeColor
},
// range start border-radius
[`&-in-view${pickerCellCls}-range-start:not(${pickerCellCls}-range-start-single):not(${pickerCellCls}-range-end) ${pickerCellInnerCls}`]: {
borderStartStartRadius: borderRadiusSM,
borderEndStartRadius: borderRadiusSM,
borderStartEndRadius: 0,
borderEndEndRadius: 0
},
// range end border-radius
[`&-in-view${pickerCellCls}-range-end:not(${pickerCellCls}-range-end-single):not(${pickerCellCls}-range-start) ${pickerCellInnerCls}`]: {
borderStartStartRadius: 0,
borderEndStartRadius: 0,
borderStartEndRadius: borderRadiusSM,
borderEndEndRadius: borderRadiusSM
},
[`&-range-hover${pickerCellCls}-range-end::after`]: {
insetInlineStart: "50%"
},
// Edge start
[`tr > &-in-view${pickerCellCls}-range-hover:first-child::after,
tr > &-in-view${pickerCellCls}-range-hover-end:first-child::after,
&-in-view${pickerCellCls}-start${pickerCellCls}-range-hover-edge-start${pickerCellCls}-range-hover-edge-start-near-range::after,
&-in-view${pickerCellCls}-range-hover-edge-start:not(${pickerCellCls}-range-hover-edge-start-near-range)::after,
&-in-view${pickerCellCls}-range-hover-start::after`]: {
insetInlineStart: (pickerPanelCellWidth - pickerPanelCellHeight) / 2,
borderInlineStart: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`,
borderStartStartRadius: lineWidth,
borderEndStartRadius: lineWidth
},
// Edge end
[`tr > &-in-view${pickerCellCls}-range-hover:last-child::after,
tr > &-in-view${pickerCellCls}-range-hover-start:last-child::after,
&-in-view${pickerCellCls}-end${pickerCellCls}-range-hover-edge-end${pickerCellCls}-range-hover-edge-end-near-range::after,
&-in-view${pickerCellCls}-range-hover-edge-end:not(${pickerCellCls}-range-hover-edge-end-near-range)::after,
&-in-view${pickerCellCls}-range-hover-end::after`]: {
insetInlineEnd: (pickerPanelCellWidth - pickerPanelCellHeight) / 2,
borderInlineEnd: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`,
borderStartEndRadius: lineWidth,
borderEndEndRadius: lineWidth
},
// >>> Disabled
"&-disabled": {
color: colorTextDisabled,
pointerEvents: "none",
[pickerCellInnerCls]: {
background: "transparent"
},
"&::before": {
background: colorBgContainerDisabled
}
},
[`&-disabled${pickerCellCls}-today ${pickerCellInnerCls}::before`]: {
borderColor: colorTextDisabled
}
};
};
const genPanelStyle = (token) => {
const {
componentCls,
pickerCellInnerCls,
pickerYearMonthCellWidth,
pickerControlIconSize,
pickerPanelCellWidth,
paddingSM,
paddingXS,
paddingXXS,
colorBgContainer,
lineWidth,
lineType,
borderRadiusLG,
colorPrimary,
colorTextHeading,
colorSplit,
pickerControlIconBorderWidth,
colorIcon,
pickerTextHeight,
motionDurationMid,
colorIconHover,
fontWeightStrong,
pickerPanelCellHeight,
pickerCellPaddingVertical,
colorTextDisabled,
colorText,
fontSize,
pickerBasicCellHoverWithRangeColor,
motionDurationSlow,
pickerPanelWithoutTimeCellHeight,
pickerQuarterPanelContentHeight,
colorLink,
colorLinkActive,
colorLinkHover,
pickerDateHoverRangeBorderColor,
borderRadiusSM,
colorTextLightSolid,
borderRadius,
controlItemBgHover,
pickerTimePanelColumnHeight,
pickerTimePanelColumnWidth,
pickerTimePanelCellHeight,
controlItemBgActive,
marginXXS
} = token;
const pickerPanelWidth = pickerPanelCellWidth * 7 + paddingSM * 2 + 4;
const hoverCellFixedDistance = (pickerPanelWidth - paddingXS * 2) / 3 - pickerYearMonthCellWidth - paddingSM;
return {
[componentCls]: {
"&-panel": {
display: "inline-flex",
flexDirection: "column",
textAlign: "center",
background: colorBgContainer,
border: `${lineWidth}px ${lineType} ${colorSplit}`,
borderRadius: borderRadiusLG,
outline: "none",
"&-focused": {
borderColor: colorPrimary
},
"&-rtl": {
direction: "rtl",
[`${componentCls}-prev-icon,
${componentCls}-super-prev-icon`]: {
transform: "rotate(45deg)"
},
[`${componentCls}-next-icon,
${componentCls}-super-next-icon`]: {
transform: "rotate(-135deg)"
}
}
},
// ========================================================
// = Shared Panel =
// ========================================================
[`&-decade-panel,
&-year-panel,
&-quarter-panel,
&-month-panel,
&-week-panel,
&-date-panel,
&-time-panel`]: {
display: "flex",
flexDirection: "column",
width: pickerPanelWidth
},
// ======================= Header =======================
"&-header": {
display: "flex",
padding: `0 ${paddingXS}px`,
color: colorTextHeading,
borderBottom: `${lineWidth}px ${lineType} ${colorSplit}`,
"> *": {
flex: "none"
},
button: {
padding: 0,
color: colorIcon,
lineHeight: `${pickerTextHeight}px`,
background: "transparent",
border: 0,
cursor: "pointer",
transition: `color ${motionDurationMid}`
},
"> button": {
minWidth: "1.6em",
fontSize,
"&:hover": {
color: colorIconHover
}
},
"&-view": {
flex: "auto",
fontWeight: fontWeightStrong,
lineHeight: `${pickerTextHeight}px`,
button: {
color: "inherit",
fontWeight: "inherit",
verticalAlign: "top",
"&:not(:first-child)": {
marginInlineStart: paddingXS
},
"&:hover": {
color: colorPrimary
}
}
}
},
// Arrow button
[`&-prev-icon,
&-next-icon,
&-super-prev-icon,
&-super-next-icon`]: {
position: "relative",
display: "inline-block",
width: pickerControlIconSize,
height: pickerControlIconSize,
"&::before": {
position: "absolute",
top: 0,
insetInlineStart: 0,
display: "inline-block",
width: pickerControlIconSize,
height: pickerControlIconSize,
border: `0 solid currentcolor`,
borderBlockStartWidth: pickerControlIconBorderWidth,
borderBlockEndWidth: 0,
borderInlineStartWidth: pickerControlIconBorderWidth,
borderInlineEndWidth: 0,
content: '""'
}
},
[`&-super-prev-icon,
&-super-next-icon`]: {
"&::after": {
position: "absolute",
top: Math.ceil(pickerControlIconSize / 2),
insetInlineStart: Math.ceil(pickerControlIconSize / 2),
display: "inline-block",
width: pickerControlIconSize,
height: pickerControlIconSize,
border: "0 solid currentcolor",
borderBlockStartWidth: pickerControlIconBorderWidth,
borderBlockEndWidth: 0,
borderInlineStartWidth: pickerControlIconBorderWidth,
borderInlineEndWidth: 0,
content: '""'
}
},
[`&-prev-icon,
&-super-prev-icon`]: {
transform: "rotate(-45deg)"
},
[`&-next-icon,
&-super-next-icon`]: {
transform: "rotate(135deg)"
},
// ======================== Body ========================
"&-content": {
width: "100%",
tableLayout: "fixed",
borderCollapse: "collapse",
"th, td": {
position: "relative",
minWidth: pickerPanelCellHeight,
fontWeight: "normal"
},
th: {
height: pickerPanelCellHeight + pickerCellPaddingVertical * 2,
color: colorText,
verticalAlign: "middle"
}
},
"&-cell": _extends({
padding: `${pickerCellPaddingVertical}px 0`,
color: colorTextDisabled,
cursor: "pointer",
// In view
"&-in-view": {
color: colorText
}
}, genPickerCellInnerStyle(token)),
// DatePanel only
[`&-date-panel ${componentCls}-cell-in-view${componentCls}-cell-in-range${componentCls}-cell-range-hover-start ${pickerCellInnerCls},
&-date-panel ${componentCls}-cell-in-view${componentCls}-cell-in-range${componentCls}-cell-range-hover-end ${pickerCellInnerCls}`]: {
"&::after": {
position: "absolute",
top: 0,
bottom: 0,
zIndex: -1,
background: pickerBasicCellHoverWithRangeColor,
transition: `all ${motionDurationSlow}`,
content: '""'
}
},
[`&-date-panel
${componentCls}-cell-in-view${componentCls}-cell-in-range${componentCls}-cell-range-hover-start
${pickerCellInnerCls}::after`]: {
insetInlineEnd: -(pickerPanelCellWidth - pickerPanelCellHeight) / 2,
insetInlineStart: 0
},
[`&-date-panel ${componentCls}-cell-in-view${componentCls}-cell-in-range${componentCls}-cell-range-hover-end ${pickerCellInnerCls}::after`]: {
insetInlineEnd: 0,
insetInlineStart: -(pickerPanelCellWidth - pickerPanelCellHeight) / 2
},
// Hover with range start & end
[`&-range-hover${componentCls}-range-start::after`]: {
insetInlineEnd: "50%"
},
[`&-decade-panel,
&-year-panel,
&-quarter-panel,
&-month-panel`]: {
[`${componentCls}-content`]: {
height: pickerPanelWithoutTimeCellHeight * 4
},
[pickerCellInnerCls]: {
padding: `0 ${paddingXS}px`
}
},
"&-quarter-panel": {
[`${componentCls}-content`]: {
height: pickerQuarterPanelContentHeight
}
},
// ======================== Footer ========================
[`&-panel ${componentCls}-footer`]: {
borderTop: `${lineWidth}px ${lineType} ${colorSplit}`
},
"&-footer": {
width: "min-content",
minWidth: "100%",
lineHeight: `${pickerTextHeight - 2 * lineWidth}px`,
textAlign: "center",
"&-extra": {
padding: `0 ${paddingSM}`,
lineHeight: `${pickerTextHeight - 2 * lineWidth}px`,
textAlign: "start",
"&:not(:last-child)": {
borderBottom: `${lineWidth}px ${lineType} ${colorSplit}`
}
}
},
"&-now": {
textAlign: "start"
},
"&-today-btn": {
color: colorLink,
"&:hover": {
color: colorLinkHover
},
"&:active": {
color: colorLinkActive
},
[`&${componentCls}-today-btn-disabled`]: {
color: colorTextDisabled,
cursor: "not-allowed"
}
},
// ========================================================
// = Special =
// ========================================================
// ===================== Decade Panel =====================
"&-decade-panel": {
[pickerCellInnerCls]: {
padding: `0 ${paddingXS / 2}px`
},
[`${componentCls}-cell::before`]: {
display: "none"
}
},
// ============= Year & Quarter & Month Panel =============
[`&-year-panel,
&-quarter-panel,
&-month-panel`]: {
[`${componentCls}-body`]: {
padding: `0 ${paddingXS}px`
},
[pickerCellInnerCls]: {
width: pickerYearMonthCellWidth
},
[`${componentCls}-cell-range-hover-start::after`]: {
insetInlineStart: hoverCellFixedDistance,
borderInlineStart: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`,
borderStartStartRadius: borderRadiusSM,
borderBottomStartRadius: borderRadiusSM,
borderStartEndRadius: 0,
borderBottomEndRadius: 0,
[`${componentCls}-panel-rtl &`]: {
insetInlineEnd: hoverCellFixedDistance,
borderInlineEnd: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`,
borderStartStartRadius: 0,
borderBottomStartRadius: 0,
borderStartEndRadius: borderRadiusSM,
borderBottomEndRadius: borderRadiusSM
}
},
[`${componentCls}-cell-range-hover-end::after`]: {
insetInlineEnd: hoverCellFixedDistance,
borderInlineEnd: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`,
borderStartStartRadius: 0,
borderEndStartRadius: 0,
borderStartEndRadius: borderRadius,
borderEndEndRadius: borderRadius,
[`${componentCls}-panel-rtl &`]: {
insetInlineStart: hoverCellFixedDistance,
borderInlineStart: `${lineWidth}px dashed ${pickerDateHoverRangeBorderColor}`,
borderStartStartRadius: borderRadius,
borderEndStartRadius: borderRadius,
borderStartEndRadius: 0,
borderEndEndRadius: 0
}
}
},
// ====================== Week Panel ======================
"&-week-panel": {
[`${componentCls}-body`]: {
padding: `${paddingXS}px ${paddingSM}px`
},
// Clear cell style
[`${componentCls}-cell`]: {
[`&:hover ${pickerCellInnerCls},
&-selected ${pickerCellInnerCls},
${pickerCellInnerCls}`]: {
background: "transparent !important"
}
},
"&-row": {
td: {
transition: `background ${motionDurationMid}`,
"&:first-child": {
borderStartStartRadius: borderRadiusSM,
borderEndStartRadius: borderRadiusSM
},
"&:last-child": {
borderStartEndRadius: borderRadiusSM,
borderEndEndRadius: borderRadiusSM
}
},
"&:hover td": {
background: controlItemBgHover
},
[`&-selected td,
&-selected:hover td`]: {
background: colorPrimary,
[`&${componentCls}-cell-week`]: {
color: new TinyColor(colorTextLightSolid).setAlpha(0.5).toHexString()
},
[`&${componentCls}-cell-today ${pickerCellInnerCls}::before`]: {
borderColor: colorTextLightSolid
},
[pickerCellInnerCls]: {
color: colorTextLightSolid
}
}
}
},
// ====================== Date Panel ======================
"&-date-panel": {
[`${componentCls}-body`]: {
padding: `${paddingXS}px ${paddingSM}px`
},
[`${componentCls}-content`]: {
width: pickerPanelCellWidth * 7,
th: {
width: pickerPanelCellWidth
}
}
},
// ==================== Datetime Panel ====================
"&-datetime-panel": {
display: "flex",
[`${componentCls}-time-panel`]: {
borderInlineStart: `${lineWidth}px ${lineType} ${colorSplit}`
},
[`${componentCls}-date-panel,
${componentCls}-time-panel`]: {
transition: `opacity ${motionDurationSlow}`
},
// Keyboard
"&-active": {
[`${componentCls}-date-panel,
${componentCls}-time-panel`]: {
opacity: 0.3,
"&-active": {
opacity: 1
}
}
}
},
// ====================== Time Panel ======================
"&-time-panel": {
width: "auto",
minWidth: "auto",
direction: "ltr",
[`${componentCls}-content`]: {
display: "flex",
flex: "auto",
height: pickerTimePanelColumnHeight
},
"&-column": {
flex: "1 0 auto",
width: pickerTimePanelColumnWidth,
margin: `${paddingXXS}px 0`,
padding: 0,
overflowY: "hidden",
textAlign: "start",
listStyle: "none",
transition: `background ${motionDurationMid}`,
overflowX: "hidden",
"&::after": {
display: "block",
height: pickerTimePanelColumnHeight - pickerTimePanelCellHeight,
content: '""'
},
"&:not(:first-child)": {
borderInlineStart: `${lineWidth}px ${lineType} ${colorSplit}`
},
"&-active": {
background: new TinyColor(controlItemBgActive).setAlpha(0.2).toHexString()
},
"&:hover": {
overflowY: "auto"
},
"> li": {
margin: 0,
padding: 0,
[`&${componentCls}-time-panel-cell`]: {
marginInline: marginXXS,
[`${componentCls}-time-panel-cell-inner`]: {
display: "block",
width: pickerTimePanelColumnWidth - 2 * marginXXS,
height: pickerTimePanelCellHeight,
margin: 0,
paddingBlock: 0,
paddingInlineEnd: 0,
paddingInlineStart: (pickerTimePanelColumnWidth - pickerTimePanelCellHeight) / 2,
color: colorText,
lineHeight: `${pickerTimePanelCellHeight}px`,
borderRadius: borderRadiusSM,
cursor: "pointer",
transition: `background ${motionDurationMid}`,
"&:hover": {
background: controlItemBgHover
}
},
"&-selected": {
[`${componentCls}-time-panel-cell-inner`]: {
background: controlItemBgActive
}
},
"&-disabled": {
[`${componentCls}-time-panel-cell-inner`]: {
color: colorTextDisabled,
background: "transparent",
cursor: "not-allowed"
}
}
}
}
}
},
// https://github.com/ant-design/ant-design/issues/39227
[`&-datetime-panel ${componentCls}-time-panel-column:after`]: {
height: pickerTimePanelColumnHeight - pickerTimePanelCellHeight + paddingXXS * 2
}
}
};
};
const genPickerStatusStyle = (token) => {
const {
componentCls,
colorBgContainer,
colorError,
colorErrorOutline,
colorWarning,
colorWarningOutline
} = token;
return {
[componentCls]: {
[`&-status-error${componentCls}`]: {
"&, &:not([disabled]):hover": {
backgroundColor: colorBgContainer,
borderColor: colorError
},
"&-focused, &:focus": _extends({}, genActiveStyle(merge(token, {
inputBorderActiveColor: colorError,
inputBorderHoverColor: colorError,
controlOutline: colorErrorOutline
}))),
[`${componentCls}-active-bar`]: {
background: colorError
}
},
[`&-status-warning${componentCls}`]: {
"&, &:not([disabled]):hover": {
backgroundColor: colorBgContainer,
borderColor: colorWarning
},
"&-focused, &:focus": _extends({}, genActiveStyle(merge(token, {
inputBorderActiveColor: colorWarning,
inputBorderHoverColor: colorWarning,
controlOutline: colorWarningOutline
}))),
[`${componentCls}-active-bar`]: {
background: colorWarning
}
}
}
};
};
const genPickerStyle = (token) => {
const {
componentCls,
antCls,
boxShadowPopoverArrow,
controlHeight,
fontSize,
inputPaddingHorizontal,
colorBgContainer,
lineWidth,
lineType,
colorBorder,
borderRadius,
motionDurationMid,
colorBgContainerDisabled,
colorTextDisabled,
colorTextPlaceholder,
controlHeightLG,
fontSizeLG,
controlHeightSM,
inputPaddingHorizontalSM,
paddingXS,
marginXS,
colorTextDescription,
lineWidthBold,
lineHeight,
colorPrimary,
motionDurationSlow,
zIndexPopup,
paddingXXS,
paddingSM,
pickerTextHeight,
controlItemBgActive,
colorPrimaryBorder,
sizePopupArrow,
borderRadiusXS,
borderRadiusOuter,
colorBgElevated,
borderRadiusLG,
boxShadowSecondary,
borderRadiusSM,
colorSplit,
controlItemBgHover,
presetsWidth,
presetsMaxWidth
} = token;
return [
{
[componentCls]: _extends(_extends(_extends({}, resetComponent(token)), genPikerPadding(token, controlHeight, fontSize, inputPaddingHorizontal)), {
position: "relative",
display: "inline-flex",
alignItems: "center",
background: colorBgContainer,
lineHeight: 1,
border: `${lineWidth}px ${lineType} ${colorBorder}`,
borderRadius,
transition: `border ${motionDurationMid}, box-shadow ${motionDurationMid}`,
"&:hover, &-focused": _extends({}, genHoverStyle(token)),
"&-focused": _extends({}, genActiveStyle(token)),
[`&${componentCls}-disabled`]: {
background: colorBgContainerDisabled,
borderColor: colorBorder,
cursor: "not-allowed",
[`${componentCls}-suffix`]: {
color: colorTextDisabled
}
},
[`&${componentCls}-borderless`]: {
backgroundColor: "transparent !important",
borderColor: "transparent !important",
boxShadow: "none !important"
},
// ======================== Input =========================
[`${componentCls}-input`]: {
position: "relative",
display: "inline-flex",
alignItems: "center",
width: "100%",
"> input": _extends(_extends({}, genBasicInputStyle(token)), {
flex: "auto",
// Fix Firefox flex not correct:
// https://github.com/ant-design/ant-design/pull/20023#issuecomment-564389553
minWidth: 1,
height: "auto",
padding: 0,
background: "transparent",
border: 0,
"&:focus": {
boxShadow: "none"
},
"&[disabled]": {
background: "transparent"
}
}),
"&:hover": {
[`${componentCls}-clear`]: {
opacity: 1
}
},
"&-placeholder": {
"> input": {
color: colorTextPlaceholder
}
}
},
// Size
"&-large": _extends(_extends({}, genPikerPadding(token, controlHeightLG, fontSizeLG, inputPaddingHorizontal)), {
[`${componentCls}-input > input`]: {
fontSize: fontSizeLG
}
}),
"&-small": _extends({}, genPikerPadding(token, controlHeightSM, fontSize, inputPaddingHorizontalSM)),
[`${componentCls}-suffix`]: {
display: "flex",
flex: "none",
alignSelf: "center",
marginInlineStart: paddingXS / 2,
color: colorTextDisabled,
lineHeight: 1,
pointerEvents: "none",
"> *": {
verticalAlign: "top",
"&:not(:last-child)": {
marginInlineEnd: marginXS
}
}
},
[`${componentCls}-clear`]: {
position: "absolute",
top: "50%",
insetInlineEnd: 0,
color: colorTextDisabled,
lineHeight: 1,
background: colorBgContainer,
transform: "translateY(-50%)",
cursor: "pointer",
opacity: 0,
transition: `opacity ${motionDurationMid}, color ${motionDurationMid}`,
"> *": {
verticalAlign: "top"
},
"&:hover": {
color: colorTextDescription
}
},
[`${componentCls}-separator`]: {
position: "relative",
display: "inline-block",
width: "1em",
height: fontSizeLG,
color: colorTextDisabled,
fontSize: fontSizeLG,
verticalAlign: "top",
cursor: "default",
[`${componentCls}-focused &`]: {
color: colorTextDescription
},
[`${componentCls}-range-separator &`]: {
[`${componentCls}-disabled &`]: {
cursor: "not-allowed"
}
}
},
// ======================== Range =========================
"&-range": {
position: "relative",
display: "inline-flex",
// Clear
[`${componentCls}-clear`]: {
insetInlineEnd: inputPaddingHorizontal
},
"&:hover": {
[`${componentCls}-clear`]: {
opacity: 1
}
},
// Active bar
[`${componentCls}-active-bar`]: {
bottom: -lineWidth,
height: lineWidthBold,
marginInlineStart: inputPaddingHorizontal,
background: colorPrimary,
opacity: 0,
transition: `all ${motionDurationSlow} ease-out`,
pointerEvents: "none"
},
[`&${componentCls}-focused`]: {
[`${componentCls}-active-bar`]: {
opacity: 1
}
},
[`${componentCls}-range-separator`]: {
alignItems: "center",
padding: `0 ${paddingXS}px`,
lineHeight: 1
},
[`&${componentCls}-small`]: {
[`${componentCls}-clear`]: {
insetInlineEnd: inputPaddingHorizontalSM
},
[`${componentCls}-active-bar`]: {
marginInlineStart: inputPaddingHorizontalSM
}
}
},
// ======================= Dropdown =======================
"&-dropdown": _extends(_extends(_extends({}, resetComponent(token)), genPanelStyle(token)), {
position: "absolute",
// Fix incorrect position of picker popup
// https://github.com/ant-design/ant-design/issues/35590
top: -9999,
left: {
_skip_check_: true,
value: -9999
},
zIndex: zIndexPopup,
[`&${componentCls}-dropdown-hidden`]: {
display: "none"
},
[`&${componentCls}-dropdown-placement-bottomLeft`]: {
[`${componentCls}-range-arrow`]: {
top: 0,
display: "block",
transform: "translateY(-100%)"
}
},
[`&${componentCls}-dropdown-placement-topLeft`]: {
[`${componentCls}-range-arrow`]: {
bottom: 0,
display: "block",
transform: "translateY(100%) rotate(180deg)"
}
},
[`&${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-topLeft,
&${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-topRight,
&${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-topLeft,
&${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-topRight`]: {
animationName: slideDownIn
},
[`&${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-bottomLeft,
&${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-bottomRight,
&${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-bottomLeft,
&${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-bottomRight`]: {
animationName: slideUpIn
},
[`&${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-topLeft,
&${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-topRight`]: {
animationName: slideDownOut
},
[`&${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-bottomLeft,
&${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-bottomRight`]: {
animationName: slideUpOut
},
// Time picker with additional style
[`${componentCls}-panel > ${componentCls}-time-panel`]: {
paddingTop: paddingXXS
},
// ======================== Ranges ========================
[`${componentCls}-ranges`]: {
marginBottom: 0,
padding: `${paddingXXS}px ${paddingSM}px`,
overflow: "hidden",
lineHeight: `${pickerTextHeight - 2 * lineWidth - paddingXS / 2}px`,
textAlign: "start",
listStyle: "none",
display: "flex",
justifyContent: "space-between",
"> li": {
display: "inline-block"
},
// https://github.com/ant-design/ant-design/issues/23687
[`${componentCls}-preset > ${antCls}-tag-blue`]: {
color: colorPrimary,
background: controlItemBgActive,
borderColor: colorPrimaryBorder,
cursor: "pointer"
},
[`${componentCls}-ok`]: {
marginInlineStart: "auto"
}
},
[`${componentCls}-range-wrapper`]: {
display: "flex",
position: "relative"
},
[`${componentCls}-range-arrow`]: _extends({
position: "absolute",
zIndex: 1,
display: "none",
marginInlineStart: inputPaddingHorizontal * 1.5,
transition: `left ${motionDurationSlow} ease-out`
}, roundedArrow(sizePopupArrow, borderRadiusXS, borderRadiusOuter, colorBgElevated, boxShadowPopoverArrow)),
[`${componentCls}-panel-container`]: {
overflow: "hidden",
verticalAlign: "top",
background: colorBgElevated,
borderRadius: borderRadiusLG,
boxShadow: boxShadowSecondary,
transition: `margin ${motionDurationSlow}`,
// ======================== Layout ========================
[`${componentCls}-panel-layout`]: {
display: "flex",
flexWrap: "nowrap",
alignItems: "stretch"
},
// ======================== Preset ========================
[`${componentCls}-presets`]: {
display: "flex",
flexDirection: "column",
minWidth: presetsWidth,
maxWidth: presetsMaxWidth,
ul: {
height: 0,
flex: "auto",
listStyle: "none",
overflow: "auto",
margin: 0,
padding: paddingXS,
borderInlineEnd: `${lineWidth}px ${lineType} ${colorSplit}`,
li: _extends(_extends({}, textEllipsis), {
borderRadius: borderRadiusSM,
paddingInline: paddingXS,
paddingBlock: (controlHeightSM - Math.round(fontSize * lineHeight)) / 2,
cursor: "pointer",
transition: `all ${motionDurationSlow}`,
"+ li": {
marginTop: marginXS
},
"&:hover": {
background: controlItemBgHover
}
})
}
},
// ======================== Panels ========================
[`${componentCls}-panels`]: {
display: "inline-flex",
flexWrap: "nowrap",
direction: "ltr",
[`${componentCls}-panel`]: {
borderWidth: `0 0 ${lineWidth}px`
},
"&:last-child": {
[`${componentCls}-panel`]: {
borderWidth: 0
}
}
},
[`${componentCls}-panel`]: {
verticalAlign: "top",
background: "transparent",
borderRadius: 0,
borderWidth: 0,
[`${componentCls}-content,
table`]: {
textAlign: "center"
},
"&-focused": {
borderColor: colorBorder
}
}
}
}),
"&-dropdown-range": {
padding: `${sizePopupArrow * 2 / 3}px 0`,
"&-hidden": {
display: "none"
}
},
"&-rtl": {
direction: "rtl",
[`${componentCls}-separator`]: {
transform: "rotate(180deg)"
},
[`${componentCls}-footer`]: {
"&-extra": {
direction: "rtl"
}
}
}
})
},
// Follow code may reuse in other components
initSlideMotion(token, "slide-up"),
initSlideMotion(token, "slide-down"),
initMoveMotion(token, "move-up"),
initMoveMotion(token, "move-down")
];
};
const initPickerPanelToken = (token) => {
const pickerTimePanelCellHeight = 28;
const {
componentCls,
controlHeightLG,
controlHeightSM,
colorPrimary,
paddingXXS
} = token;
return {
pickerCellCls: `${componentCls}-cell`,
pickerCellInnerCls: `${componentCls}-cell-inner`,
pickerTextHeight: controlHeightLG,
pickerPanelCellWidth: controlHeightSM * 1.5,
pickerPanelCellHeight: controlHeightSM,
pickerDateHoverRangeBorderColor: new TinyColor(colorPrimary).lighten(20).toHexString(),
pickerBasicCellHoverWithRangeColor: new TinyColor(colorPrimary).lighten(35).toHexString(),
pickerPanelWithoutTimeCellHeight: controlHeightLG * 1.65,
pickerYearMonthCellWidth: controlHeightLG * 1.5,
pickerTimePanelColumnHeight: pickerTimePanelCellHeight * 8,
pickerTimePanelColumnWidth: controlHeightLG * 1.4,
pickerTimePanelCellHeight,
pickerQuarterPanelContentHeight: controlHeightLG * 1.4,
pickerCellPaddingVertical: paddingXXS,
pickerCellBorderGap: 2,
pickerControlIconSize: 7,
pickerControlIconBorderWidth: 1.5
};
};
const useStyle = genComponentStyleHook("DatePicker", (token) => {
const pickerToken = merge(initInputToken(token), initPickerPanelToken(token));
return [
genPickerStyle(pickerToken),
genPickerStatusStyle(pickerToken),
// =====================================================
// == Space Compact ==
// =====================================================
genCompactItemStyle(token, {
focusElCls: `${token.componentCls}-focused`
})
];
}, (token) => ({
presetsWidth: 120,
presetsMaxWidth: 200,
zIndexPopup: token.zIndexPopupBase + 50
}));
const PickerButton = (props, _ref) => {
let {
attrs,
slots
} = _ref;
return createVNode(Button, _objectSpread$3(_objectSpread$3({
"size": "small",
"type": "primary"
}, props), attrs), slots);
};
function PickerTag(props, _ref) {
let {
slots,
attrs
} = _ref;
return createVNode(Tag, _objectSpread$3(_objectSpread$3({
"color": "blue"
}, props), attrs), slots);
}
function getPlaceholder(locale2, picker, customizePlaceholder) {
if (customizePlaceholder !== void 0) {
return customizePlaceholder;
}
if (picker === "year" && locale2.lang.yearPlaceholder) {
return locale2.lang.yearPlaceholder;
}
if (picker === "quarter" && locale2.lang.quarterPlaceholder) {
return locale2.lang.quarterPlaceholder;
}
if (picker === "month" && locale2.lang.monthPlaceholder) {
return locale2.lang.monthPlaceholder;
}
if (picker === "week" && locale2.lang.weekPlaceholder) {
return locale2.lang.weekPlaceholder;
}
if (picker === "time" && locale2.timePickerLocale.placeholder) {
return locale2.timePickerLocale.placeholder;
}
return locale2.lang.placeholder;
}
function getRangePlaceholder(locale2, picker, customizePlaceholder) {
if (customizePlaceholder !== void 0) {
return customizePlaceholder;
}
if (picker === "year" && locale2.lang.yearPlaceholder) {
return locale2.lang.rangeYearPlaceholder;
}
if (picker === "month" && locale2.lang.monthPlaceholder) {
return locale2.lang.rangeMonthPlaceholder;
}
if (picker === "week" && locale2.lang.weekPlaceholder) {
return locale2.lang.rangeWeekPlaceholder;
}
if (picker === "time" && locale2.timePickerLocale.placeholder) {
return locale2.timePickerLocale.rangePlaceholder;
}
return locale2.lang.rangePlaceholder;
}
function transPlacement2DropdownAlign(direction, placement) {
const overflow = {
adjustX: 1,
adjustY: 1
};
switch (placement) {
case "bottomLeft": {
return {
points: ["tl", "bl"],
offset: [0, 4],
overflow
};
}
case "bottomRight": {
return {
points: ["tr", "br"],
offset: [0, 4],
overflow
};
}
case "topLeft": {
return {
points: ["bl", "tl"],
offset: [0, -4],
overflow
};
}
case "topRight": {
return {
points: ["br", "tr"],
offset: [0, -4],
overflow
};
}
default: {
return {
points: direction === "rtl" ? ["tr", "br"] : ["tl", "bl"],
offset: [0, 4],
overflow
};
}
}
}
function commonProps() {
return {
id: String,
/**
* @deprecated `dropdownClassName` is deprecated which will be removed in next major
* version.Please use `popupClassName` instead.
*/
dropdownClassName: String,
popupClassName: String,
popupStyle: objectType(),
transitionName: String,
placeholder: String,
allowClear: booleanType(),
autofocus: booleanType(),
disabled: booleanType(),
tabindex: Number,
open: booleanType(),
defaultOpen: booleanType(),
/** Make input readOnly to avoid popup keyboard in mobile */
inputReadOnly: booleanType(),
format: someType([String, Function, Array]),
// Value
// format: string | CustomFormat<DateType> | (string | CustomFormat<DateType>)[];
// Render
// suffixIcon?: VueNode;
// clearIcon?: VueNode;
// prevIcon?: VueNode;
// nextIcon?: VueNode;
// superPrevIcon?: VueNode;
// superNextIcon?: VueNode;
getPopupContainer: functionType(),
panelRender: functionType(),
// // Events
onChange: functionType(),
"onUpdate:value": functionType(),
onOk: functionType(),
onOpenChange: functionType(),
"onUpdate:open": functionType(),
onFocus: functionType(),
onBlur: functionType(),
onMousedown: functionType(),
onMouseup: functionType(),
onMouseenter: functionType(),
onMouseleave: functionType(),
onClick: functionType(),
onContextmenu: functionType(),
onKeydown: functionType(),
// WAI-ARIA
role: String,
name: String,
autocomplete: String,
direction: stringType(),
showToday: booleanType(),
showTime: someType([Boolean, Object]),
locale: objectType(),
size: stringType(),
bordered: booleanType(),
dateRender: functionType(),
disabledDate: functionType(),
mode: stringType(),
picker: stringType(),
valueFormat: String,
placement: stringType(),
status: stringType(),
/** @deprecated Please use `disabledTime` instead. */
disabledHours: functionType(),
/** @deprecated Please use `disabledTime` instead. */
disabledMinutes: functionType(),
/** @deprecated Please use `disabledTime` instead. */
disabledSeconds: functionType()
};
}
function datePickerProps() {
return {
defaultPickerValue: someType([Object, String]),
defaultValue: someType([Object, String]),
value: someType([Object, String]),
presets: arrayType(),
disabledTime: functionType(),
renderExtraFooter: functionType(),
showNow: booleanType(),
monthCellRender: functionType(),
// deprecated Please use `monthCellRender"` instead.',
monthCellContentRender: functionType()
};
}
function rangePickerProps() {
return {
allowEmpty: arrayType(),
dateRender: functionType(),
defaultPickerValue: arrayType(),
defaultValue: arrayType(),
value: arrayType(),
presets: arrayType(),
disabledTime: functionType(),
disabled: someType([Boolean, Array]),
renderExtraFooter: functionType(),
separator: {
type: String
},
showTime: someType([Boolean, Object]),
ranges: objectType(),
placeholder: arrayType(),
mode: arrayType(),
onChange: functionType(),
"onUpdate:value": functionType(),
onCalendarChange: functionType(),
onPanelChange: functionType(),
onOk: functionType()
};
}
var __rest$1 = function(s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
function generateSinglePicker(generateConfig2, extraProps) {
function getPicker(picker, displayName) {
const comProps = _extends(_extends(_extends({}, commonProps()), datePickerProps()), extraProps);
return defineComponent({
compatConfig: {
MODE: 3
},
name: displayName,
inheritAttrs: false,
props: comProps,
slots: Object,
setup(_props, _ref) {
let {
slots,
expose,
attrs,
emit
} = _ref;
const props = _props;
const formItemContext = useInjectFormItemContext();
const formItemInputContext = FormItemInputContext.useInject();
const {
prefixCls,
direction,
getPopupContainer,
size,
rootPrefixCls,
disabled
} = useConfigInject("picker", props);
const {
compactSize,
compactItemClassnames
} = useCompactItemContext(prefixCls, direction);
const mergedSize = computed(() => compactSize.value || size.value);
const [wrapSSR, hashId] = useStyle(prefixCls);
const pickerRef = ref();
expose({
focus: () => {
var _a;
(_a = pickerRef.value) === null || _a === void 0 ? void 0 : _a.focus();
},
blur: () => {
var _a;
(_a = pickerRef.value) === null || _a === void 0 ? void 0 : _a.blur();
}
});
const maybeToString = (date) => {
return props.valueFormat ? generateConfig2.toString(date, props.valueFormat) : date;
};
const onChange = (date, dateString) => {
const value2 = maybeToString(date);
emit("update:value", value2);
emit("change", value2, dateString);
formItemContext.onFieldChange();
};
const onOpenChange = (open) => {
emit("update:open", open);
emit("openChange", open);
};
const onFocus = (e) => {
emit("focus", e);
};
const onBlur = (e) => {
emit("blur", e);
formItemContext.onFieldBlur();
};
const onPanelChange = (date, mode) => {
const value2 = maybeToString(date);
emit("panelChange", value2, mode);
};
const onOk = (date) => {
const value2 = maybeToString(date);
emit("ok", value2);
};
const [contextLocale] = useLocaleReceiver("DatePicker", locale$1$1);
const value = computed(() => {
if (props.value) {
return props.valueFormat ? generateConfig2.toDate(props.value, props.valueFormat) : props.value;
}
return props.value === "" ? void 0 : props.value;
});
const defaultValue = computed(() => {
if (props.defaultValue) {
return props.valueFormat ? generateConfig2.toDate(props.defaultValue, props.valueFormat) : props.defaultValue;
}
return props.defaultValue === "" ? void 0 : props.defaultValue;
});
const defaultPickerValue = computed(() => {
if (props.defaultPickerValue) {
return props.valueFormat ? generateConfig2.toDate(props.defaultPickerValue, props.valueFormat) : props.defaultPickerValue;
}
return props.defaultPickerValue === "" ? void 0 : props.defaultPickerValue;
});
return () => {
var _a, _b, _c, _d, _e, _f;
const locale2 = _extends(_extends({}, contextLocale.value), props.locale);
const p = _extends(_extends({}, props), attrs);
const {
bordered = true,
placeholder,
suffixIcon = (_a = slots.suffixIcon) === null || _a === void 0 ? void 0 : _a.call(slots),
showToday = true,
transitionName,
allowClear = true,
dateRender = slots.dateRender,
renderExtraFooter = slots.renderExtraFooter,
monthCellRender = slots.monthCellRender || props.monthCellContentRender || slots.monthCellContentRender,
clearIcon = (_b = slots.clearIcon) === null || _b === void 0 ? void 0 : _b.call(slots),
id = formItemContext.id.value
} = p, restProps = __rest$1(p, ["bordered", "placeholder", "suffixIcon", "showToday", "transitionName", "allowClear", "dateRender", "renderExtraFooter", "monthCellRender", "clearIcon", "id"]);
const showTime = p.showTime === "" ? true : p.showTime;
const {
format
} = p;
let additionalOverrideProps = {};
if (picker) {
additionalOverrideProps.picker = picker;
}
const mergedPicker = picker || p.picker || "date";
additionalOverrideProps = _extends(_extends(_extends({}, additionalOverrideProps), showTime ? getTimeProps(_extends({
format,
picker: mergedPicker
}, typeof showTime === "object" ? showTime : {})) : {}), mergedPicker === "time" ? getTimeProps(_extends(_extends({
format
}, restProps), {
picker: mergedPicker
})) : {});
const pre = prefixCls.value;
const suffixNode = createVNode(Fragment, null, [suffixIcon || (picker === "time" ? createVNode(ClockCircleOutlined, null, null) : createVNode(CalendarOutlined, null, null)), formItemInputContext.hasFeedback && formItemInputContext.feedbackIcon]);
return wrapSSR(createVNode(Picker$1, _objectSpread$3(_objectSpread$3(_objectSpread$3({
"monthCellRender": monthCellRender,
"dateRender": dateRender,
"renderExtraFooter": renderExtraFooter,
"ref": pickerRef,
"placeholder": getPlaceholder(locale2, mergedPicker, placeholder),
"suffixIcon": suffixNode,
"dropdownAlign": transPlacement2DropdownAlign(direction.value, props.placement),
"clearIcon": clearIcon || createVNode(CloseCircleFilled, null, null),
"allowClear": allowClear,
"transitionName": transitionName || `${rootPrefixCls.value}-slide-up`
}, restProps), additionalOverrideProps), {}, {
"id": id,
"picker": mergedPicker,
"value": value.value,
"defaultValue": defaultValue.value,
"defaultPickerValue": defaultPickerValue.value,
"showToday": showToday,
"locale": locale2.lang,
"class": classNames({
[`${pre}-${mergedSize.value}`]: mergedSize.value,
[`${pre}-borderless`]: !bordered
}, getStatusClassNames(pre, getMergedStatus(formItemInputContext.status, props.status), formItemInputContext.hasFeedback), attrs.class, hashId.value, compactItemClassnames.value),
"disabled": disabled.value,
"prefixCls": pre,
"getPopupContainer": attrs.getCalendarContainer || getPopupContainer.value,
"generateConfig": generateConfig2,
"prevIcon": ((_c = slots.prevIcon) === null || _c === void 0 ? void 0 : _c.call(slots)) || createVNode("span", {
"class": `${pre}-prev-icon`
}, null),
"nextIcon": ((_d = slots.nextIcon) === null || _d === void 0 ? void 0 : _d.call(slots)) || createVNode("span", {
"class": `${pre}-next-icon`
}, null),
"superPrevIcon": ((_e = slots.superPrevIcon) === null || _e === void 0 ? void 0 : _e.call(slots)) || createVNode("span", {
"class": `${pre}-super-prev-icon`
}, null),
"superNextIcon": ((_f = slots.superNextIcon) === null || _f === void 0 ? void 0 : _f.call(slots)) || createVNode("span", {
"class": `${pre}-super-next-icon`
}, null),
"components": Components,
"direction": direction.value,
"dropdownClassName": classNames(hashId.value, props.popupClassName, props.dropdownClassName),
"onChange": onChange,
"onOpenChange": onOpenChange,
"onFocus": onFocus,
"onBlur": onBlur,
"onPanelChange": onPanelChange,
"onOk": onOk
}), null));
};
}
});
}
const DatePicker2 = getPicker(void 0, "ADatePicker");
const WeekPicker2 = getPicker("week", "AWeekPicker");
const MonthPicker2 = getPicker("month", "AMonthPicker");
const YearPicker2 = getPicker("year", "AYearPicker");
const TimePicker2 = getPicker("time", "TimePicker");
const QuarterPicker2 = getPicker("quarter", "AQuarterPicker");
return {
DatePicker: DatePicker2,
WeekPicker: WeekPicker2,
MonthPicker: MonthPicker2,
YearPicker: YearPicker2,
TimePicker: TimePicker2,
QuarterPicker: QuarterPicker2
};
}
var __rest = function(s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
function generateRangePicker(generateConfig2, extraProps) {
const RangePicker2 = defineComponent({
compatConfig: {
MODE: 3
},
name: "ARangePicker",
inheritAttrs: false,
props: _extends(_extends(_extends({}, commonProps()), rangePickerProps()), extraProps),
slots: Object,
setup(_props, _ref) {
let {
expose,
slots,
attrs,
emit
} = _ref;
const props = _props;
const formItemContext = useInjectFormItemContext();
const formItemInputContext = FormItemInputContext.useInject();
const {
prefixCls,
direction,
getPopupContainer,
size,
rootPrefixCls,
disabled
} = useConfigInject("picker", props);
const {
compactSize,
compactItemClassnames
} = useCompactItemContext(prefixCls, direction);
const mergedSize = computed(() => compactSize.value || size.value);
const [wrapSSR, hashId] = useStyle(prefixCls);
const pickerRef = ref();
expose({
focus: () => {
var _a;
(_a = pickerRef.value) === null || _a === void 0 ? void 0 : _a.focus();
},
blur: () => {
var _a;
(_a = pickerRef.value) === null || _a === void 0 ? void 0 : _a.blur();
}
});
const maybeToStrings = (dates) => {
return props.valueFormat ? generateConfig2.toString(dates, props.valueFormat) : dates;
};
const onChange = (dates, dateStrings) => {
const values = maybeToStrings(dates);
emit("update:value", values);
emit("change", values, dateStrings);
formItemContext.onFieldChange();
};
const onOpenChange = (open) => {
emit("update:open", open);
emit("openChange", open);
};
const onFocus = (e) => {
emit("focus", e);
};
const onBlur = (e) => {
emit("blur", e);
formItemContext.onFieldBlur();
};
const onPanelChange = (dates, modes) => {
const values = maybeToStrings(dates);
emit("panelChange", values, modes);
};
const onOk = (dates) => {
const value2 = maybeToStrings(dates);
emit("ok", value2);
};
const onCalendarChange = (dates, dateStrings, info) => {
const values = maybeToStrings(dates);
emit("calendarChange", values, dateStrings, info);
};
const [contextLocale] = useLocaleReceiver("DatePicker", locale$1$1);
const value = computed(() => {
if (props.value) {
return props.valueFormat ? generateConfig2.toDate(props.value, props.valueFormat) : props.value;
}
return props.value;
});
const defaultValue = computed(() => {
if (props.defaultValue) {
return props.valueFormat ? generateConfig2.toDate(props.defaultValue, props.valueFormat) : props.defaultValue;
}
return props.defaultValue;
});
const defaultPickerValue = computed(() => {
if (props.defaultPickerValue) {
return props.valueFormat ? generateConfig2.toDate(props.defaultPickerValue, props.valueFormat) : props.defaultPickerValue;
}
return props.defaultPickerValue;
});
return () => {
var _a, _b, _c, _d, _e, _f, _g;
const locale2 = _extends(_extends({}, contextLocale.value), props.locale);
const p = _extends(_extends({}, props), attrs);
const {
prefixCls: customizePrefixCls,
bordered = true,
placeholder,
suffixIcon = (_a = slots.suffixIcon) === null || _a === void 0 ? void 0 : _a.call(slots),
picker = "date",
transitionName,
allowClear = true,
dateRender = slots.dateRender,
renderExtraFooter = slots.renderExtraFooter,
separator = (_b = slots.separator) === null || _b === void 0 ? void 0 : _b.call(slots),
clearIcon = (_c = slots.clearIcon) === null || _c === void 0 ? void 0 : _c.call(slots),
id = formItemContext.id.value
} = p, restProps = __rest(p, ["prefixCls", "bordered", "placeholder", "suffixIcon", "picker", "transitionName", "allowClear", "dateRender", "renderExtraFooter", "separator", "clearIcon", "id"]);
delete restProps["onUpdate:value"];
delete restProps["onUpdate:open"];
const {
format,
showTime
} = p;
let additionalOverrideProps = {};
additionalOverrideProps = _extends(_extends(_extends({}, additionalOverrideProps), showTime ? getTimeProps(_extends({
format,
picker
}, showTime)) : {}), picker === "time" ? getTimeProps(_extends(_extends({
format
}, omit(restProps, ["disabledTime"])), {
picker
})) : {});
const pre = prefixCls.value;
const suffixNode = createVNode(Fragment, null, [suffixIcon || (picker === "time" ? createVNode(ClockCircleOutlined, null, null) : createVNode(CalendarOutlined, null, null)), formItemInputContext.hasFeedback && formItemInputContext.feedbackIcon]);
return wrapSSR(createVNode(InterRangerPicker, _objectSpread$3(_objectSpread$3(_objectSpread$3({
"dateRender": dateRender,
"renderExtraFooter": renderExtraFooter,
"separator": separator || createVNode("span", {
"aria-label": "to",
"class": `${pre}-separator`
}, [createVNode(SwapRightOutlined, null, null)]),
"ref": pickerRef,
"dropdownAlign": transPlacement2DropdownAlign(direction.value, props.placement),
"placeholder": getRangePlaceholder(locale2, picker, placeholder),
"suffixIcon": suffixNode,
"clearIcon": clearIcon || createVNode(CloseCircleFilled, null, null),
"allowClear": allowClear,
"transitionName": transitionName || `${rootPrefixCls.value}-slide-up`
}, restProps), additionalOverrideProps), {}, {
"disabled": disabled.value,
"id": id,
"value": value.value,
"defaultValue": defaultValue.value,
"defaultPickerValue": defaultPickerValue.value,
"picker": picker,
"class": classNames({
[`${pre}-${mergedSize.value}`]: mergedSize.value,
[`${pre}-borderless`]: !bordered
}, getStatusClassNames(pre, getMergedStatus(formItemInputContext.status, props.status), formItemInputContext.hasFeedback), attrs.class, hashId.value, compactItemClassnames.value),
"locale": locale2.lang,
"prefixCls": pre,
"getPopupContainer": attrs.getCalendarContainer || getPopupContainer.value,
"generateConfig": generateConfig2,
"prevIcon": ((_d = slots.prevIcon) === null || _d === void 0 ? void 0 : _d.call(slots)) || createVNode("span", {
"class": `${pre}-prev-icon`
}, null),
"nextIcon": ((_e = slots.nextIcon) === null || _e === void 0 ? void 0 : _e.call(slots)) || createVNode("span", {
"class": `${pre}-next-icon`
}, null),
"superPrevIcon": ((_f = slots.superPrevIcon) === null || _f === void 0 ? void 0 : _f.call(slots)) || createVNode("span", {
"class": `${pre}-super-prev-icon`
}, null),
"superNextIcon": ((_g = slots.superNextIcon) === null || _g === void 0 ? void 0 : _g.call(slots)) || createVNode("span", {
"class": `${pre}-super-next-icon`
}, null),
"components": Components,
"direction": direction.value,
"dropdownClassName": classNames(hashId.value, props.popupClassName, props.dropdownClassName),
"onChange": onChange,
"onOpenChange": onOpenChange,
"onFocus": onFocus,
"onBlur": onBlur,
"onPanelChange": onPanelChange,
"onOk": onOk,
"onCalendarChange": onCalendarChange
}), null));
};
}
});
return RangePicker2;
}
const Components = {
button: PickerButton,
rangeItem: PickerTag
};
function toArray(list) {
if (!list) {
return [];
}
return Array.isArray(list) ? list : [list];
}
function getTimeProps(props) {
const {
format,
picker,
showHour,
showMinute,
showSecond,
use12Hours
} = props;
const firstFormat = toArray(format)[0];
const showTimeObj = _extends({}, props);
if (firstFormat && typeof firstFormat === "string") {
if (!firstFormat.includes("s") && showSecond === void 0) {
showTimeObj.showSecond = false;
}
if (!firstFormat.includes("m") && showMinute === void 0) {
showTimeObj.showMinute = false;
}
if (!firstFormat.includes("H") && !firstFormat.includes("h") && showHour === void 0) {
showTimeObj.showHour = false;
}
if ((firstFormat.includes("a") || firstFormat.includes("A")) && use12Hours === void 0) {
showTimeObj.use12Hours = true;
}
}
if (picker === "time") {
return showTimeObj;
}
if (typeof firstFormat === "function") {
delete showTimeObj.format;
}
return {
showTime: showTimeObj
};
}
function generatePicker(generateConfig2, extraProps) {
const {
DatePicker: DatePicker2,
WeekPicker: WeekPicker2,
MonthPicker: MonthPicker2,
YearPicker: YearPicker2,
TimePicker: TimePicker2,
QuarterPicker: QuarterPicker2
} = generateSinglePicker(generateConfig2, extraProps);
const RangePicker2 = generateRangePicker(generateConfig2, extraProps);
return {
DatePicker: DatePicker2,
WeekPicker: WeekPicker2,
MonthPicker: MonthPicker2,
YearPicker: YearPicker2,
TimePicker: TimePicker2,
QuarterPicker: QuarterPicker2,
RangePicker: RangePicker2
};
}
const {
DatePicker,
WeekPicker,
MonthPicker,
YearPicker,
TimePicker,
QuarterPicker,
RangePicker
} = generatePicker(generateConfig);
const DatePicker$1 = _extends(DatePicker, {
WeekPicker,
MonthPicker,
YearPicker,
RangePicker,
TimePicker,
QuarterPicker,
install: (app) => {
app.component(DatePicker.name, DatePicker);
app.component(RangePicker.name, RangePicker);
app.component(MonthPicker.name, MonthPicker);
app.component(WeekPicker.name, WeekPicker);
app.component(QuarterPicker.name, QuarterPicker);
return app;
}
});
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
__name: "BaseDatePicker",
__ssrInlineRender: true,
props: {
value: { type: [String, Number, Boolean, Array] },
disabledDate: { type: Boolean }
},
emits: ["update:value"],
setup(__props, { emit: __emit }) {
const disabledDate = (current) => {
if (props.disabledDate)
return current && current < dayjs().endOf("day");
else
return false;
};
const emit = __emit;
const props = __props;
const localValue = computed({
get() {
const dayjsDate = props.value ? dayjs(props.value) : null;
return dayjsDate;
},
set(value) {
const date = dayjs(value).format("YYYY-MM-DD");
emit("update:value", date);
}
});
return (_ctx, _push, _parent, _attrs) => {
_push(ssrRenderComponent(unref(DatePicker$1), mergeProps({
value: localValue.value,
"onUpdate:value": ($event) => localValue.value = $event,
"disabled-date": disabledDate,
class: "w-full",
inputReadOnly: ""
}, _attrs), null, _parent));
};
}
});
const _sfc_setup$1 = _sfc_main$1.setup;
_sfc_main$1.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/BasicPacks/BaseDatePicker/src/BaseDatePicker.vue");
return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
};
const locale$2 = {
locale: "fa_IR",
today: "\u0627\u0645\u0631\u0648\u0632",
now: "\u0627\u06A9\u0646\u0648\u0646",
backToToday: "\u0628\u0627\u0632\u06AF\u0634\u062A \u0628\u0647 \u0631\u0648\u0632",
ok: "\u0628\u0627\u0634\u0647",
clear: "\u067E\u0627\u06A9 \u06A9\u0631\u062F\u0646",
month: "\u0645\u0627\u0647",
year: "\u0633\u0627\u0644",
timeSelect: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0632\u0645\u0627\u0646",
dateSelect: "\u0627\u0646\u062A\u062E\u0627\u0628 \u062A\u0627\u0631\u06CC\u062E",
monthSelect: "\u06CC\u06A9 \u0645\u0627\u0647 \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F",
yearSelect: "\u06CC\u06A9 \u0633\u0627\u0644 \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F",
decadeSelect: "\u06CC\u06A9 \u062F\u0647\u0647 \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F",
yearFormat: "YYYY",
dateFormat: "M/D/YYYY",
dayFormat: "D",
dateTimeFormat: "M/D/YYYY HH:mm:ss",
monthBeforeYear: true,
previousMonth: "\u0645\u0627\u0647 \u0642\u0628\u0644 (PageUp)",
nextMonth: "\u0645\u0627\u0647 \u0628\u0639\u062F (PageDown)",
previousYear: "\u0633\u0627\u0644 \u0642\u0628\u0644 (Control + left)",
nextYear: "\u0633\u0627\u0644 \u0628\u0639\u062F (Control + right)",
previousDecade: "\u062F\u0647\u0647 \u0642\u0628\u0644",
nextDecade: "\u062F\u0647\u0647 \u0628\u0639\u062F",
previousCentury: "\u0642\u0631\u0646 \u0642\u0628\u0644",
nextCentury: "\u0642\u0631\u0646 \u0628\u0639\u062F"
};
const locale$1 = {
placeholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0632\u0645\u0627\u0646",
rangePlaceholder: ["\u0632\u0645\u0627\u0646 \u0634\u0631\u0648\u0639", "\u0632\u0645\u0627\u0646 \u067E\u0627\u06CC\u0627\u0646"]
};
const locale = {
lang: _extends({
placeholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u062A\u0627\u0631\u06CC\u062E",
yearPlaceholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0633\u0627\u0644",
quarterPlaceholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0641\u0635\u0644",
monthPlaceholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0645\u0627\u0647",
weekPlaceholder: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0647\u0641\u062A\u0647",
rangePlaceholder: ["\u062A\u0627\u0631\u06CC\u062E \u0634\u0631\u0648\u0639", "\u062A\u0627\u0631\u06CC\u062E \u067E\u0627\u06CC\u0627\u0646"],
rangeYearPlaceholder: ["\u0633\u0627\u0644 \u0634\u0631\u0648\u0639", "\u0633\u0627\u0644 \u067E\u0627\u06CC\u0627\u0646"],
rangeMonthPlaceholder: ["\u0645\u0627\u0647 \u0634\u0631\u0648\u0639", "\u0645\u0627\u0647 \u067E\u0627\u06CC\u0627\u0646"],
rangeWeekPlaceholder: ["\u0647\u0641\u062A\u0647 \u0634\u0631\u0648\u0639", "\u0647\u0641\u062A\u0647 \u067E\u0627\u06CC\u0627\u0646"]
}, locale$2),
timePickerLocale: _extends({}, locale$1)
};
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "BaseDatePicker",
__ssrInlineRender: true,
props: {
value: { type: [String, Number, Boolean, Array] }
},
emits: ["update:value"],
setup(__props, { emit: __emit }) {
const config = useConfigStore();
moment.locale("fa", fa);
moment.loadPersian();
dayjs.extend(jalaliday);
const months = [
"\u0641\u0631\u0648\u0631\u062F\u06CC\u0646",
"\u0627\u0631\u062F\u06CC\u0628\u0647\u0634\u062A",
"\u062E\u0631\u062F\u0627\u062F",
"\u062A\u06CC\u0631",
"\u0645\u0631\u062F\u0627\u062F",
"\u0634\u0647\u0631\u06CC\u0648\u0631",
"\u0645\u0647\u0631",
"\u0622\u0628\u0627\u0646",
"\u0622\u0630\u0631",
"\u062F\u06CC",
"\u0628\u0647\u0645\u0646",
"\u0627\u0633\u0641\u0646\u062F"
];
dayjs.updateLocale("fa", {
monthsShort: months,
months
});
dayjs.calendar("jalali");
const emit = __emit;
const props = __props;
const localValue = computed({
get() {
const dayjsDate = props.value ? dayjs(props.value) : null;
return dayjsDate;
},
set(value) {
const date = dayjs(value).format("YYYY-MM-DD");
console.log(moment(date, "jYYYY/jM/jD HH:mm").format("YYYY-M-D"));
emit("update:value", moment(date, "jYYYY/jM/jD HH:mm").format("YYYY-M-D"));
}
});
return (_ctx, _push, _parent, _attrs) => {
_push(ssrRenderComponent(unref(DatePicker$1), mergeProps({
value: localValue.value,
"onUpdate:value": ($event) => localValue.value = $event,
locale: unref(locale),
class: "w-full",
placeholder: unref(config).useString("selectDate"),
inputReadOnly: ""
}, _attrs), null, _parent));
};
}
});
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/BasicPacks/BaseDatePickerJalali/src/BaseDatePicker.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
export { _sfc_main$1 as _, _sfc_main as a };
//# sourceMappingURL=BaseDatePicker-CBTFfZPt.mjs.map