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 { bE as D, bF as Y, bG as W, bH as MS, bI as Q, bJ as M, bK as FORMAT_DEFAULT, ba as Icon, av as dayjs, a as useConfigStore, C as useConfigInject, bv as useCompactItemContext, D as genComponentStyleHook, bk as useLocaleReceiver, bL as locale$1$1, E as omit, aC as CloseCircleFilled, F as classNames, Z as merge, a6 as genCompactItemStyle, bq 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, bM as warningOnce, Q as KeyCode, ac as cloneElement, bN 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', //
DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', //
DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', //
DATE: 'YYYY-MM-DD', //
TIME: 'HH:mm', //
TIME_SECONDS: 'HH:mm:ss', //
TIME_MS: 'HH:mm:ss.SSS', //
WEEK: 'GGGG-[W]WW', //
MONTH: 'YYYY-MM', //
};
//! 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 | (string | CustomFormat)[];
// 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